{ "schemaVersion": 1, "task": "WBV2-P1424-001", "job": "MESH-EDITOR-COVERAGE", "parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5", "acceptance": "pending independent local validation", "result": { "status": "ready", "summary": "Mesh selection and UV seams reach native Blender transactions", "workflow": "Subdivide selected edges/faces, triangulate, repair normals, bridge loops, delete vertices/edges/faces, and project selected UVs with edge seams; verify native Main recovery and preserve unrelated geometry", "sourceUnits": [ "web-command:meshSubdivide", "web-command:meshTriangulate", "web-command:meshRecalculateNormals", "web-command:meshBridgeLoops", "web-command:meshDeleteElements", "web-command:meshUVProject" ], "routeIds": [ "web-command:meshSubdivide", "web-command:meshTriangulate", "web-command:meshRecalculateNormals", "web-command:meshBridgeLoops", "web-command:meshDeleteElements", "web-command:meshUVProject" ], "sourceReferences": [ "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", "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", "blender-5.2.0/source/blender/makesrna/intern/rna_mesh.cc" ], "changedFiles": [ "web/tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "web/tests/fixtures/mesh-editor-main-snapshots.py", "my-tools/prepare_wbv2_mesh_editor_workflow.py", "web/app/src/app/App.tsx", "web/tests/fixtures/create-mesh-editor-input.py", "tests/files/web/mesh_editor_scene.blend", "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", "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h" ], "dependencies": [ ".emscripten-web", "blender-5.2.0/source/blender/makesrna/intern/rna_mesh.cc", "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", "blender-5.2.0/source/blender/web_engine/web_engine_main_state.h", "build_web_blender6/CMakeCache.txt", "my-tools/build_local_webengine.py", "my-tools/prepare_wbv2_mesh_editor_workflow.py", "tests/files/web/basic_scene.blend", "tests/files/web/mesh_editor_scene.blend", "tools/web/incremental-web-build.mjs", "tools/web/sync-web-engine-runtime.mjs", "web/app/src/app/App.tsx", "web/app/src/engine-client/WebEngineClient.ts", "web/app/src/workers/web-engine.worker.ts", "web/app/vite.config.ts", "web/package.json", "web/playwright.config.ts", "web/protocol/mesh-authoring-commands.ts", "web/protocol/scene-ir.ts", "web/protocol/web-engine.ts", "web/tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "web/tests/fixtures/create-mesh-editor-input.py", "web/tests/fixtures/mesh-editor-main-snapshots.py", "web/tests/fixtures/native-ui-workflow.ts", "web/tsconfig.json" ], "artifacts": [ "build_web_blender6/bin/web_engine.wasm", "build_web_blender6/bin/web_engine.js", "build_blender_native/bin/blender" ], "checks": [ { "id": "wasm-source-build", "argv": [ "python3", "my-tools/build_local_webengine.py" ], "cwd": ".", "kinds": [ "source_build" ], "timeoutSeconds": 1200, "continueOnFailure": true }, { "id": "web-build", "argv": [ "node", "tools/web/incremental-web-build.mjs" ], "cwd": ".", "kinds": [ "typecheck" ], "dependsOn": [ "wasm-source-build" ], "timeoutSeconds": 300, "continueOnFailure": true }, { "id": "authoring-lint", "argv": [ "node", "node_modules/eslint/bin/eslint.js", "app/src/app/App.tsx", "tests/e2e/mesh-editor-coverage-ui-production.spec.ts" ], "cwd": "web", "kinds": [ "lint" ], "timeoutSeconds": 90, "continueOnFailure": true }, { "id": "chromium-panel", "argv": [ "env", "WEB_TEST_PORT=5380", "node", "node_modules/@playwright/test/cli.js", "test", "--config", "playwright.config.ts", "tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "--grep", "mesh editor panel ", "--workers=1", "--max-failures=1" ], "cwd": "web", "kinds": [ "chromium" ], "dependsOn": [ "wasm-source-build", "web-build", "authoring-lint" ], "timeoutSeconds": 90, "continueOnFailure": true }, { "id": "chromium-subdivide", "argv": [ "env", "WEB_TEST_PORT=5380", "node", "node_modules/@playwright/test/cli.js", "test", "--config", "playwright.config.ts", "tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "--grep", "mesh editor subdivide ", "--workers=1", "--max-failures=1" ], "cwd": "web", "kinds": [ "chromium", "positive", "negative", "undo_redo", "save_reopen", "determinism" ], "dependsOn": [ "wasm-source-build", "web-build", "authoring-lint" ], "timeoutSeconds": 90, "continueOnFailure": true }, { "id": "chromium-triangulate", "argv": [ "env", "WEB_TEST_PORT=5380", "node", "node_modules/@playwright/test/cli.js", "test", "--config", "playwright.config.ts", "tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "--grep", "mesh editor triangulate ", "--workers=1", "--max-failures=1" ], "cwd": "web", "kinds": [ "chromium", "positive", "negative", "undo_redo", "save_reopen", "determinism" ], "dependsOn": [ "wasm-source-build", "web-build", "authoring-lint" ], "timeoutSeconds": 90, "continueOnFailure": true }, { "id": "chromium-normals", "argv": [ "env", "WEB_TEST_PORT=5380", "node", "node_modules/@playwright/test/cli.js", "test", "--config", "playwright.config.ts", "tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "--grep", "mesh editor normals ", "--workers=1", "--max-failures=1" ], "cwd": "web", "kinds": [ "chromium", "positive", "negative", "undo_redo", "save_reopen", "determinism" ], "dependsOn": [ "wasm-source-build", "web-build", "authoring-lint" ], "timeoutSeconds": 90, "continueOnFailure": true }, { "id": "chromium-bridge", "argv": [ "env", "WEB_TEST_PORT=5380", "node", "node_modules/@playwright/test/cli.js", "test", "--config", "playwright.config.ts", "tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "--grep", "mesh editor bridge ", "--workers=1", "--max-failures=1" ], "cwd": "web", "kinds": [ "chromium", "positive", "negative", "undo_redo", "save_reopen", "determinism" ], "dependsOn": [ "wasm-source-build", "web-build", "authoring-lint" ], "timeoutSeconds": 90, "continueOnFailure": true }, { "id": "chromium-delete", "argv": [ "env", "WEB_TEST_PORT=5380", "node", "node_modules/@playwright/test/cli.js", "test", "--config", "playwright.config.ts", "tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "--grep", "mesh editor delete ", "--workers=1", "--max-failures=1" ], "cwd": "web", "kinds": [ "chromium", "positive", "negative", "undo_redo", "save_reopen", "determinism" ], "dependsOn": [ "wasm-source-build", "web-build", "authoring-lint" ], "timeoutSeconds": 90, "continueOnFailure": true }, { "id": "chromium-uv", "argv": [ "env", "WEB_TEST_PORT=5380", "node", "node_modules/@playwright/test/cli.js", "test", "--config", "playwright.config.ts", "tests/e2e/mesh-editor-coverage-ui-production.spec.ts", "--grep", "mesh editor uv ", "--workers=1", "--max-failures=1" ], "cwd": "web", "kinds": [ "chromium", "positive", "negative", "undo_redo", "save_reopen", "determinism" ], "dependsOn": [ "wasm-source-build", "web-build", "authoring-lint" ], "timeoutSeconds": 90, "continueOnFailure": true } ], "cases": [ { "id": "mesh-editor-subdivide-edge-positive", "kind": "positive", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-edge-positive.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-edge-negative", "kind": "negative", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-edge-negative.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-edge-undo_redo", "kind": "undo_redo", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-edge-undo_redo.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-edge-save_reopen", "kind": "save_reopen", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-edge-save_reopen.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-edge-determinism", "kind": "determinism", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-edge-determinism.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-face-positive", "kind": "positive", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-face-positive.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-face-negative", "kind": "negative", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-face-negative.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-face-undo_redo", "kind": "undo_redo", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-face-undo_redo.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-face-save_reopen", "kind": "save_reopen", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-face-save_reopen.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-subdivide-face-determinism", "kind": "determinism", "checkId": "chromium-subdivide", "receipt": "unallocated/subdivide-face-determinism.json", "unitIds": [ "web-command:meshSubdivide" ] }, { "id": "mesh-editor-triangulate-positive", "kind": "positive", "checkId": "chromium-triangulate", "receipt": "unallocated/triangulate-positive.json", "unitIds": [ "web-command:meshTriangulate" ] }, { "id": "mesh-editor-triangulate-negative", "kind": "negative", "checkId": "chromium-triangulate", "receipt": "unallocated/triangulate-negative.json", "unitIds": [ "web-command:meshTriangulate" ] }, { "id": "mesh-editor-triangulate-undo_redo", "kind": "undo_redo", "checkId": "chromium-triangulate", "receipt": "unallocated/triangulate-undo_redo.json", "unitIds": [ "web-command:meshTriangulate" ] }, { "id": "mesh-editor-triangulate-save_reopen", "kind": "save_reopen", "checkId": "chromium-triangulate", "receipt": "unallocated/triangulate-save_reopen.json", "unitIds": [ "web-command:meshTriangulate" ] }, { "id": "mesh-editor-triangulate-determinism", "kind": "determinism", "checkId": "chromium-triangulate", "receipt": "unallocated/triangulate-determinism.json", "unitIds": [ "web-command:meshTriangulate" ] }, { "id": "mesh-editor-normals-positive", "kind": "positive", "checkId": "chromium-normals", "receipt": "unallocated/normals-positive.json", "unitIds": [ "web-command:meshRecalculateNormals" ] }, { "id": "mesh-editor-normals-negative", "kind": "negative", "checkId": "chromium-normals", "receipt": "unallocated/normals-negative.json", "unitIds": [ "web-command:meshRecalculateNormals" ] }, { "id": "mesh-editor-normals-undo_redo", "kind": "undo_redo", "checkId": "chromium-normals", "receipt": "unallocated/normals-undo_redo.json", "unitIds": [ "web-command:meshRecalculateNormals" ] }, { "id": "mesh-editor-normals-save_reopen", "kind": "save_reopen", "checkId": "chromium-normals", "receipt": "unallocated/normals-save_reopen.json", "unitIds": [ "web-command:meshRecalculateNormals" ] }, { "id": "mesh-editor-normals-determinism", "kind": "determinism", "checkId": "chromium-normals", "receipt": "unallocated/normals-determinism.json", "unitIds": [ "web-command:meshRecalculateNormals" ] }, { "id": "mesh-editor-bridge-positive", "kind": "positive", "checkId": "chromium-bridge", "receipt": "unallocated/bridge-positive.json", "unitIds": [ "web-command:meshBridgeLoops" ] }, { "id": "mesh-editor-bridge-negative", "kind": "negative", "checkId": "chromium-bridge", "receipt": "unallocated/bridge-negative.json", "unitIds": [ "web-command:meshBridgeLoops" ] }, { "id": "mesh-editor-bridge-undo_redo", "kind": "undo_redo", "checkId": "chromium-bridge", "receipt": "unallocated/bridge-undo_redo.json", "unitIds": [ "web-command:meshBridgeLoops" ] }, { "id": "mesh-editor-bridge-save_reopen", "kind": "save_reopen", "checkId": "chromium-bridge", "receipt": "unallocated/bridge-save_reopen.json", "unitIds": [ "web-command:meshBridgeLoops" ] }, { "id": "mesh-editor-bridge-determinism", "kind": "determinism", "checkId": "chromium-bridge", "receipt": "unallocated/bridge-determinism.json", "unitIds": [ "web-command:meshBridgeLoops" ] }, { "id": "mesh-editor-delete-vert-positive", "kind": "positive", "checkId": "chromium-delete", "receipt": "unallocated/delete-vert-positive.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-vert-negative", "kind": "negative", "checkId": "chromium-delete", "receipt": "unallocated/delete-vert-negative.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-vert-undo_redo", "kind": "undo_redo", "checkId": "chromium-delete", "receipt": "unallocated/delete-vert-undo_redo.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-vert-save_reopen", "kind": "save_reopen", "checkId": "chromium-delete", "receipt": "unallocated/delete-vert-save_reopen.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-vert-determinism", "kind": "determinism", "checkId": "chromium-delete", "receipt": "unallocated/delete-vert-determinism.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-edge-positive", "kind": "positive", "checkId": "chromium-delete", "receipt": "unallocated/delete-edge-positive.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-edge-negative", "kind": "negative", "checkId": "chromium-delete", "receipt": "unallocated/delete-edge-negative.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-edge-undo_redo", "kind": "undo_redo", "checkId": "chromium-delete", "receipt": "unallocated/delete-edge-undo_redo.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-edge-save_reopen", "kind": "save_reopen", "checkId": "chromium-delete", "receipt": "unallocated/delete-edge-save_reopen.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-edge-determinism", "kind": "determinism", "checkId": "chromium-delete", "receipt": "unallocated/delete-edge-determinism.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-face-positive", "kind": "positive", "checkId": "chromium-delete", "receipt": "unallocated/delete-face-positive.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-face-negative", "kind": "negative", "checkId": "chromium-delete", "receipt": "unallocated/delete-face-negative.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-face-undo_redo", "kind": "undo_redo", "checkId": "chromium-delete", "receipt": "unallocated/delete-face-undo_redo.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-face-save_reopen", "kind": "save_reopen", "checkId": "chromium-delete", "receipt": "unallocated/delete-face-save_reopen.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-delete-face-determinism", "kind": "determinism", "checkId": "chromium-delete", "receipt": "unallocated/delete-face-determinism.json", "unitIds": [ "web-command:meshDeleteElements" ] }, { "id": "mesh-editor-uv-planar-positive", "kind": "positive", "checkId": "chromium-uv", "receipt": "unallocated/uv-planar-positive.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-planar-negative", "kind": "negative", "checkId": "chromium-uv", "receipt": "unallocated/uv-planar-negative.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-planar-undo_redo", "kind": "undo_redo", "checkId": "chromium-uv", "receipt": "unallocated/uv-planar-undo_redo.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-planar-save_reopen", "kind": "save_reopen", "checkId": "chromium-uv", "receipt": "unallocated/uv-planar-save_reopen.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-planar-determinism", "kind": "determinism", "checkId": "chromium-uv", "receipt": "unallocated/uv-planar-determinism.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cube-positive", "kind": "positive", "checkId": "chromium-uv", "receipt": "unallocated/uv-cube-positive.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cube-negative", "kind": "negative", "checkId": "chromium-uv", "receipt": "unallocated/uv-cube-negative.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cube-undo_redo", "kind": "undo_redo", "checkId": "chromium-uv", "receipt": "unallocated/uv-cube-undo_redo.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cube-save_reopen", "kind": "save_reopen", "checkId": "chromium-uv", "receipt": "unallocated/uv-cube-save_reopen.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cube-determinism", "kind": "determinism", "checkId": "chromium-uv", "receipt": "unallocated/uv-cube-determinism.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cylinder-positive", "kind": "positive", "checkId": "chromium-uv", "receipt": "unallocated/uv-cylinder-positive.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cylinder-negative", "kind": "negative", "checkId": "chromium-uv", "receipt": "unallocated/uv-cylinder-negative.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cylinder-undo_redo", "kind": "undo_redo", "checkId": "chromium-uv", "receipt": "unallocated/uv-cylinder-undo_redo.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cylinder-save_reopen", "kind": "save_reopen", "checkId": "chromium-uv", "receipt": "unallocated/uv-cylinder-save_reopen.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-cylinder-determinism", "kind": "determinism", "checkId": "chromium-uv", "receipt": "unallocated/uv-cylinder-determinism.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-sphere-positive", "kind": "positive", "checkId": "chromium-uv", "receipt": "unallocated/uv-sphere-positive.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-sphere-negative", "kind": "negative", "checkId": "chromium-uv", "receipt": "unallocated/uv-sphere-negative.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-sphere-undo_redo", "kind": "undo_redo", "checkId": "chromium-uv", "receipt": "unallocated/uv-sphere-undo_redo.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-sphere-save_reopen", "kind": "save_reopen", "checkId": "chromium-uv", "receipt": "unallocated/uv-sphere-save_reopen.json", "unitIds": [ "web-command:meshUVProject" ] }, { "id": "mesh-editor-uv-sphere-determinism", "kind": "determinism", "checkId": "chromium-uv", "receipt": "unallocated/uv-sphere-determinism.json", "unitIds": [ "web-command:meshUVProject" ] } ] } }