{ "schemaVersion": 1, "task": "WBV2-P1424-001", "parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5", "job": "NATIVE-OPERATOR-BRIDGE", "acceptance": "pending fresh validation", "result": { "status": "ready", "summary": "Native operator discovery, cube invocation, context rejection and HTTP voxel remesh", "workflow": "Discover native cube operator, invoke it, reject invalid properties and desktop-only file context, verify history/reopen/replay against desktop Blender; separately verify bounded server voxel remesh", "sourceUnits": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile", "operator:OBJECT_OT_voxel_remesh" ], "routeIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile", "operator:OBJECT_OT_voxel_remesh" ], "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_blend_reader.cpp", "blender-5.2.0/source/blender/editors/object/object_remesh.cc", "blender-5.2.0/source/blender/blenkernel/intern/mesh_remesh_voxel.cc" ], "changedFiles": [ "web/tests/e2e/native-operator-bridge.spec.ts", "web/tests/fixtures/operator-bridge-main.py", "my-tools/prepare_wbv2_native_operator_bridge_workflow.py" ], "dependencies": [ ".emscripten-web", "blender-5.2.0/source/blender/blenkernel/intern/mesh_remesh_voxel.cc", "blender-5.2.0/source/blender/editors/object/object_remesh.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", "blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp", "build_web_blender6/CMakeCache.txt", "my-tools/build_local_webengine.py", "my-tools/local-workflows/SCULPT-ADVANCED-AUTHORING.json", "my-tools/local-workflows/WEBUI-SCULPT.json", "my-tools/prepare_wbv2_native_operator_bridge_workflow.py", "my-tools/prepare_wbv2_sculpt_advanced_workflow.py", "my-tools/prepare_wbv2_sculpt_workflow.py", "tests/files/web/basic_scene.blend", "tools/web/deployment-http-server.mjs", "tools/web/incremental-web-build.mjs", "tools/web/server-operator-job-server.mjs", "tools/web/server-operator-job.py", "tools/web/server_operator_remesh.py", "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/blender-operator.ts", "web/protocol/paint.ts", "web/protocol/scene-ir.ts", "web/protocol/sculpt.ts", "web/protocol/server-operator-job.ts", "web/protocol/web-engine.ts", "web/tests/e2e/native-operator-bridge.spec.ts", "web/tests/e2e/sculpt-authoring-ui-production.spec.ts", "web/tests/e2e/sculpt-remesh-native.spec.ts", "web/tests/fixtures/native-ui-workflow.ts", "web/tests/fixtures/operator-bridge-main.py", "web/tests/fixtures/sculpt-remesh-main-snapshots.py", "web/tsconfig.json" ], "artifacts": [ "build_web_blender6/bin/web_engine.wasm", "build_web_blender6/bin/web_engine.js", "build_blender_native/bin/blender", "web/app/public/vendor/blender/web_engine.wasm" ], "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", "protocol/paint.ts", "tests/e2e/sculpt-authoring-ui-production.spec.ts" ], "cwd": "web", "kinds": [ "lint" ], "timeoutSeconds": 90, "continueOnFailure": true }, { "id": "chromium-remesh", "argv": [ "env", "WEB_TEST_PORT=5392", "node", "node_modules/@playwright/test/cli.js", "test", "tests/e2e/sculpt-remesh-native.spec.ts", "--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": 180, "continueOnFailure": true }, { "id": "chromium-bridge", "argv": [ "env", "WEB_TEST_PORT=5394", "node", "node_modules/@playwright/test/cli.js", "test", "tests/e2e/native-operator-bridge.spec.ts", "--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": 180 } ], "cases": [ { "id": "sculpt-remesh-positive", "kind": "positive", "checkId": "chromium-remesh", "receipt": "unallocated/sculpt-remesh-positive.json", "unitIds": [ "operator:OBJECT_OT_voxel_remesh" ] }, { "id": "sculpt-remesh-negative", "kind": "negative", "checkId": "chromium-remesh", "receipt": "unallocated/sculpt-remesh-negative.json", "unitIds": [ "operator:OBJECT_OT_voxel_remesh" ] }, { "id": "sculpt-remesh-undo_redo", "kind": "undo_redo", "checkId": "chromium-remesh", "receipt": "unallocated/sculpt-remesh-undo_redo.json", "unitIds": [ "operator:OBJECT_OT_voxel_remesh" ] }, { "id": "sculpt-remesh-save_reopen", "kind": "save_reopen", "checkId": "chromium-remesh", "receipt": "unallocated/sculpt-remesh-save_reopen.json", "unitIds": [ "operator:OBJECT_OT_voxel_remesh" ] }, { "id": "sculpt-remesh-determinism", "kind": "determinism", "checkId": "chromium-remesh", "receipt": "unallocated/sculpt-remesh-determinism.json", "unitIds": [ "operator:OBJECT_OT_voxel_remesh" ] }, { "id": "native-operator-bridge-cube-positive", "kind": "positive", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-cube-positive.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-cube-negative", "kind": "negative", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-cube-negative.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-cube-undo_redo", "kind": "undo_redo", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-cube-undo_redo.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-cube-save_reopen", "kind": "save_reopen", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-cube-save_reopen.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-cube-determinism", "kind": "determinism", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-cube-determinism.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-plane-positive", "kind": "positive", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-plane-positive.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-plane-negative", "kind": "negative", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-plane-negative.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-plane-undo_redo", "kind": "undo_redo", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-plane-undo_redo.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-plane-save_reopen", "kind": "save_reopen", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-plane-save_reopen.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] }, { "id": "native-operator-bridge-plane-determinism", "kind": "determinism", "checkId": "chromium-bridge", "receipt": "unallocated/native-operator-bridge-plane-determinism.json", "unitIds": [ "web-command:createPrimitive", "operator:WM_OT_open_mainfile" ] } ] } }