chore: checkpoint web Blender migration source, tools and docs
Some checks failed
M6 deployable RC / quick (push) Has been cancelled
M6 deployable RC / chromium (push) Has been cancelled
M6 deployable RC / release (push) Has been cancelled

Accumulated uncommitted work: GHOST Web backend, WebGL/GPU web layer,
web workflow engine and protocol, tooling, docs and task records.
Large generated evidence, user-testing archives, build snapshots and
imported test assets remain untracked.

Co-Authored-By: Claude Code <noreply@anthropic.com>
This commit is contained in:
mes123456
2026-11-10 11:18:01 +08:00
parent 122142c26c
commit f3e21c6b98
6887 changed files with 257154 additions and 12294 deletions

View File

@@ -0,0 +1,215 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "ACTION-MARKER-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Prepared local native authoring workflow; independent behavioral validation is mandatory",
"workflow": "Create and remove Actions, edit keyframes and their handles, and add, rename, move and delete timeline markers through native Main",
"sourceUnits": [
"web-command:createAction",
"web-command:removeAction",
"web-command:setKeyframe",
"web-command:setFCurveKeyframes",
"web-command:setTimelineMarkers"
],
"routeIds": [
"web-command:createAction",
"web-command:removeAction",
"web-command:setKeyframe",
"web-command:setFCurveKeyframes",
"web-command:setTimelineMarkers"
],
"sourceReferences": [
"blender-5.2.0/source/blender/makesrna/intern/rna_action.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_timeline.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_blend_reader.cpp"
],
"changedFiles": [
"web/tests/e2e/action-marker-ui-production.spec.ts",
"web/tests/fixtures/action-main-snapshots.py",
"web/tests/fixtures/native-ui-workflow.ts",
"web/app/src/app/App.tsx",
"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"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/makesrna/intern/rna_action.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_timeline.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/prepare_wbv2_authoring_batch.py",
"tests/files/web/animation_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"tools/web/web-build-fingerprint.mjs",
"web/app/src/app/App.tsx",
"web/app/src/capabilities/blender-feature-route-catalog.json",
"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/animation-render-commands.ts",
"web/protocol/nonmesh-geometry-commands.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/action-marker-ui-production.spec.ts",
"web/tests/fixtures/action-main-snapshots.py",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"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"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"BLENDER_BIN=/home/mes123456/workinf_Blender_Wasm/build_blender_native/bin/blender",
"WEB_TEST_PORT=5357",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/action-marker-ui-production.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium",
"positive",
"negative",
"undo_redo",
"save_reopen",
"determinism"
],
"dependsOn": [
"wasm-source-build",
"web-build"
],
"timeoutSeconds": 180,
"continueOnFailure": true
}
],
"cases": [
{
"id": "action-marker-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:createAction",
"web-command:removeAction",
"web-command:setKeyframe",
"web-command:setFCurveKeyframes",
"web-command:setTimelineMarkers"
]
},
{
"id": "action-marker-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:setTimelineMarkers"
]
},
{
"id": "action-marker-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:setTimelineMarkers"
]
},
{
"id": "action-marker-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:createAction",
"web-command:removeAction",
"web-command:setKeyframe",
"web-command:setFCurveKeyframes",
"web-command:setTimelineMarkers"
]
},
{
"id": "action-marker-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:createAction",
"web-command:removeAction",
"web-command:setKeyframe",
"web-command:setFCurveKeyframes",
"web-command:setTimelineMarkers"
]
}
]
}
}

View File

@@ -0,0 +1,262 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "ANIMATION-FCURVE-DRIVER-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Animation routes verified against evaluated desktop Main behavior",
"workflow": "Edit FCurve points, object drivers, layered Action groups and absolute Keying Sets, then bake evaluated object transforms with history and persistence",
"sourceUnits": [
"web-command:setFCurveKeyframes",
"web-command:setDriverExpression",
"web-command:setActionGroups",
"web-command:setKeyingSet",
"web-command:bakeAnimation"
],
"routeIds": [
"web-command:setFCurveKeyframes",
"web-command:setDriverExpression",
"web-command:setActionGroups",
"web-command:setKeyingSet",
"web-command:bakeAnimation"
],
"sourceReferences": [
"blender-5.2.0/source/blender/blenkernel/intern/anim_sys.cc",
"blender-5.2.0/source/blender/blenkernel/intern/fcurve_driver.cc",
"blender-5.2.0/source/blender/animrig/intern/action.cc",
"blender-5.2.0/source/blender/animrig/intern/evaluation.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_access.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_path.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_rna_fallback.cpp"
],
"changedFiles": [
"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_rna_fallback.cpp",
"web/app/src/app/App.tsx",
"web/tests/e2e/animation-authoring-ui-production.spec.ts",
"web/tests/fixtures/animation-authoring-main-snapshots.py",
"my-tools/diagnose_local_animation_authoring.mjs",
"my-tools/prepare_wbv2_animation_workflow.py",
"tools/web/inspect-workflow-controls.mjs"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/animrig/intern/action.cc",
"blender-5.2.0/source/blender/animrig/intern/evaluation.cc",
"blender-5.2.0/source/blender/blenkernel/intern/anim_sys.cc",
"blender-5.2.0/source/blender/blenkernel/intern/fcurve_driver.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_access.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_action.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_path.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_timeline.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",
"blender-5.2.0/source/blender/web_engine/web_rna_fallback.cpp",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/diagnose_local_animation_authoring.mjs",
"my-tools/local-workflows/ACTION-MARKER-AUTHORING.json",
"my-tools/prepare_wbv2_animation_workflow.py",
"my-tools/wbv2_runtime_contract.py",
"tests/files/web/animation_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/inspect-workflow-controls.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"tools/web/web-build-fingerprint.mjs",
"web/app/src/app/App.tsx",
"web/app/src/capabilities/blender-feature-route-catalog.json",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/three-adapter/viewport.ts",
"web/app/src/workers/web-engine.worker.ts",
"web/app/vite.config.ts",
"web/package.json",
"web/playwright.config.ts",
"web/protocol/animation-render-commands.ts",
"web/protocol/nonmesh-geometry-commands.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/animation-authoring-ui-production.spec.ts",
"web/tests/fixtures/animation-authoring-main-snapshots.py",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"checks": [
{
"id": "wasm-source-build",
"argv": [
"python3",
"my-tools/build_local_webengine.py"
],
"cwd": ".",
"kinds": [
"source_build"
],
"timeoutSeconds": 1200,
"continueOnFailure": true
},
{
"id": "native-animation",
"argv": [
"env",
"BLENDER_BIN=/home/mes123456/workinf_Blender_Wasm/build_blender_native/bin/blender",
"node",
"my-tools/diagnose_local_animation_authoring.mjs",
"--indexed-path"
],
"cwd": ".",
"kinds": [
"unit"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build",
"native-animation"
],
"timeoutSeconds": 300,
"continueOnFailure": true
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"BLENDER_BIN=/home/mes123456/workinf_Blender_Wasm/build_blender_native/bin/blender",
"WEB_TEST_PORT=5365",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/animation-authoring-ui-production.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium",
"positive",
"negative",
"undo_redo",
"save_reopen",
"determinism"
],
"dependsOn": [
"wasm-source-build",
"web-build"
],
"timeoutSeconds": 180,
"continueOnFailure": true
}
],
"cases": [
{
"id": "animation-authoring-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:setFCurveKeyframes",
"web-command:setDriverExpression",
"web-command:setActionGroups",
"web-command:setKeyingSet",
"web-command:bakeAnimation"
]
},
{
"id": "animation-authoring-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:setFCurveKeyframes",
"web-command:setDriverExpression",
"web-command:setActionGroups",
"web-command:setKeyingSet",
"web-command:bakeAnimation"
]
},
{
"id": "animation-authoring-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:setFCurveKeyframes",
"web-command:setDriverExpression",
"web-command:setActionGroups",
"web-command:setKeyingSet",
"web-command:bakeAnimation"
]
},
{
"id": "animation-authoring-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:setFCurveKeyframes",
"web-command:setDriverExpression",
"web-command:setActionGroups",
"web-command:setKeyingSet",
"web-command:bakeAnimation"
]
},
{
"id": "animation-authoring-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:setFCurveKeyframes",
"web-command:setDriverExpression",
"web-command:setActionGroups",
"web-command:setKeyingSet",
"web-command:bakeAnimation"
]
}
]
}
}

View File

@@ -0,0 +1,538 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "ARMATURE-EDITOR-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Selected-bone authoring with shared native transaction recovery",
"workflow": "Edit bones, roll, mirror state, parenting and targeted pose constraints; retain the selected armature and verify each route through desktop Main readback, rejection, history, persistence and replay",
"sourceUnits": [
"web-command:armatureEditOperations",
"web-command:setBoneRoll",
"web-command:setBoneSymmetry",
"web-command:setBoneParenting",
"web-command:setPoseConstraint"
],
"routeIds": [
"web-command:armatureEditOperations",
"web-command:setBoneRoll",
"web-command:setBoneSymmetry",
"web-command:setBoneParenting",
"web-command:setPoseConstraint"
],
"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/blenkernel/intern/armature.cc",
"blender-5.2.0/source/blender/blenkernel/BKE_armature.hh"
],
"changedFiles": [
"web/tests/e2e/armature-editor-coverage-ui-production.spec.ts",
"web/tests/fixtures/armature-authoring-main-snapshots.py",
"my-tools/prepare_wbv2_armature_workflow.py",
"web/app/src/app/App.tsx",
"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"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/BKE_armature.hh",
"blender-5.2.0/source/blender/blenkernel/intern/armature.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_armature_workflow.py",
"tests/files/web/pose_constraint_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/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/armature-editor-coverage-ui-production.spec.ts",
"web/tests/fixtures/armature-authoring-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/armature-editor-coverage-ui-production.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-panel",
"argv": [
"env",
"WEB_TEST_PORT=5378",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/armature-editor-coverage-ui-production.spec.ts",
"--grep",
"armature panel ",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"authoring-lint"
],
"timeoutSeconds": 75,
"continueOnFailure": true
},
{
"id": "chromium-edit",
"argv": [
"env",
"WEB_TEST_PORT=5378",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/armature-editor-coverage-ui-production.spec.ts",
"--grep",
"armature edit ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-roll",
"argv": [
"env",
"WEB_TEST_PORT=5378",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/armature-editor-coverage-ui-production.spec.ts",
"--grep",
"armature roll ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-symmetry",
"argv": [
"env",
"WEB_TEST_PORT=5378",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/armature-editor-coverage-ui-production.spec.ts",
"--grep",
"armature symmetry ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-parent",
"argv": [
"env",
"WEB_TEST_PORT=5378",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/armature-editor-coverage-ui-production.spec.ts",
"--grep",
"armature parent ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-constraint",
"argv": [
"env",
"WEB_TEST_PORT=5378",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/armature-editor-coverage-ui-production.spec.ts",
"--grep",
"armature constraint ",
"--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": 75,
"continueOnFailure": true
}
],
"cases": [
{
"id": "armature-edit-positive",
"kind": "positive",
"checkId": "chromium-edit",
"receipt": "unallocated/edit-positive.json",
"unitIds": [
"web-command:armatureEditOperations"
]
},
{
"id": "armature-edit-negative",
"kind": "negative",
"checkId": "chromium-edit",
"receipt": "unallocated/edit-negative.json",
"unitIds": [
"web-command:armatureEditOperations"
]
},
{
"id": "armature-edit-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-edit",
"receipt": "unallocated/edit-undo_redo.json",
"unitIds": [
"web-command:armatureEditOperations"
]
},
{
"id": "armature-edit-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-edit",
"receipt": "unallocated/edit-save_reopen.json",
"unitIds": [
"web-command:armatureEditOperations"
]
},
{
"id": "armature-edit-determinism",
"kind": "determinism",
"checkId": "chromium-edit",
"receipt": "unallocated/edit-determinism.json",
"unitIds": [
"web-command:armatureEditOperations"
]
},
{
"id": "armature-roll-positive",
"kind": "positive",
"checkId": "chromium-roll",
"receipt": "unallocated/roll-positive.json",
"unitIds": [
"web-command:setBoneRoll"
]
},
{
"id": "armature-roll-negative",
"kind": "negative",
"checkId": "chromium-roll",
"receipt": "unallocated/roll-negative.json",
"unitIds": [
"web-command:setBoneRoll"
]
},
{
"id": "armature-roll-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-roll",
"receipt": "unallocated/roll-undo_redo.json",
"unitIds": [
"web-command:setBoneRoll"
]
},
{
"id": "armature-roll-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-roll",
"receipt": "unallocated/roll-save_reopen.json",
"unitIds": [
"web-command:setBoneRoll"
]
},
{
"id": "armature-roll-determinism",
"kind": "determinism",
"checkId": "chromium-roll",
"receipt": "unallocated/roll-determinism.json",
"unitIds": [
"web-command:setBoneRoll"
]
},
{
"id": "armature-symmetry-positive",
"kind": "positive",
"checkId": "chromium-symmetry",
"receipt": "unallocated/symmetry-positive.json",
"unitIds": [
"web-command:setBoneSymmetry"
]
},
{
"id": "armature-symmetry-negative",
"kind": "negative",
"checkId": "chromium-symmetry",
"receipt": "unallocated/symmetry-negative.json",
"unitIds": [
"web-command:setBoneSymmetry"
]
},
{
"id": "armature-symmetry-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-symmetry",
"receipt": "unallocated/symmetry-undo_redo.json",
"unitIds": [
"web-command:setBoneSymmetry"
]
},
{
"id": "armature-symmetry-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-symmetry",
"receipt": "unallocated/symmetry-save_reopen.json",
"unitIds": [
"web-command:setBoneSymmetry"
]
},
{
"id": "armature-symmetry-determinism",
"kind": "determinism",
"checkId": "chromium-symmetry",
"receipt": "unallocated/symmetry-determinism.json",
"unitIds": [
"web-command:setBoneSymmetry"
]
},
{
"id": "armature-parent-positive",
"kind": "positive",
"checkId": "chromium-parent",
"receipt": "unallocated/parent-positive.json",
"unitIds": [
"web-command:setBoneParenting"
]
},
{
"id": "armature-parent-negative",
"kind": "negative",
"checkId": "chromium-parent",
"receipt": "unallocated/parent-negative.json",
"unitIds": [
"web-command:setBoneParenting"
]
},
{
"id": "armature-parent-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-parent",
"receipt": "unallocated/parent-undo_redo.json",
"unitIds": [
"web-command:setBoneParenting"
]
},
{
"id": "armature-parent-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-parent",
"receipt": "unallocated/parent-save_reopen.json",
"unitIds": [
"web-command:setBoneParenting"
]
},
{
"id": "armature-parent-determinism",
"kind": "determinism",
"checkId": "chromium-parent",
"receipt": "unallocated/parent-determinism.json",
"unitIds": [
"web-command:setBoneParenting"
]
},
{
"id": "armature-constraint-positive",
"kind": "positive",
"checkId": "chromium-constraint",
"receipt": "unallocated/constraint-positive.json",
"unitIds": [
"web-command:setPoseConstraint"
]
},
{
"id": "armature-constraint-negative",
"kind": "negative",
"checkId": "chromium-constraint",
"receipt": "unallocated/constraint-negative.json",
"unitIds": [
"web-command:setPoseConstraint"
]
},
{
"id": "armature-constraint-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-constraint",
"receipt": "unallocated/constraint-undo_redo.json",
"unitIds": [
"web-command:setPoseConstraint"
]
},
{
"id": "armature-constraint-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-constraint",
"receipt": "unallocated/constraint-save_reopen.json",
"unitIds": [
"web-command:setPoseConstraint"
]
},
{
"id": "armature-constraint-determinism",
"kind": "determinism",
"checkId": "chromium-constraint",
"receipt": "unallocated/constraint-determinism.json",
"unitIds": [
"web-command:setPoseConstraint"
]
}
]
}
}

View File

@@ -0,0 +1,92 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "ASSET-LIBRARY-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "deferred until user use; no behavioral acceptance claimed",
"result": {
"status": "ready",
"contractKind": "compilation_only",
"summary": "Native asset marking, catalog and library link/override/reload routes use Blender asset APIs; implementation phase only.",
"workflow": "Native asset marking, catalog and library link/override/reload routes use Blender asset APIs; implementation phase only.",
"sourceUnits": [
"operator:ASSET_OT_catalog_new",
"operator:ASSET_OT_library_reload_listing",
"operator:ASSET_OT_mark"
],
"routeIds": [
"operator:ASSET_OT_catalog_new",
"operator:ASSET_OT_library_reload_listing",
"operator:ASSET_OT_mark"
],
"sourceReferences": [
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/editors/asset/intern/asset_ops.cc",
"blender-5.2.0/source/blender/asset_system/intern/asset_library.cc"
],
"changedFiles": [
"my-tools/prepare_wbv2_asset_library_workflow.py",
"web/app/src/app/App.tsx",
"web/protocol/web-engine.ts"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/asset_system/intern/asset_library.cc",
"blender-5.2.0/source/blender/editors/asset/intern/asset_ops.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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_asset_library_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/asset-library-io.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
}
],
"cases": []
}
}

View File

@@ -0,0 +1,186 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "BROWSER-EQUIVALENT-RUNTIME",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Browser-equivalent feature route invocation reuses existing native WebEngine command paths; implementation phase only.",
"workflow": "Browser-equivalent feature route invocation reuses existing native WebEngine command paths; implementation phase only.",
"sourceUnits": [
"web-command:applyObjectTransform",
"web-command:createPrimitive",
"web-command:renderFrame"
],
"routeIds": [
"web-command:applyObjectTransform",
"web-command:createPrimitive",
"web-command:renderFrame"
],
"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"
],
"changedFiles": [
"my-tools/prepare_wbv2_browser_equivalent_workflow.py",
"web/app/src/app/App.tsx",
"web/protocol/web-engine.ts",
"web/tests/e2e/browser-equivalent-runtime-receipt.spec.ts"
],
"dependencies": [
".emscripten-web",
"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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_browser_equivalent_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tsconfig.json",
"web/tests/e2e/browser-equivalent-runtime-receipt.spec.ts"
],
"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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx",
"tests/e2e/receipt-producer-runtime.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/browser-equivalent-runtime-receipt.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
}
],
"cases": [
{
"id": "browser-equivalent-runtime-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/browser-equivalent-runtime-positive.json",
"unitIds": [
"web-command:applyObjectTransform",
"web-command:createPrimitive",
"web-command:renderFrame"
]
},
{
"id": "browser-equivalent-runtime-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/browser-equivalent-runtime-negative.json",
"unitIds": [
"web-command:applyObjectTransform",
"web-command:createPrimitive",
"web-command:renderFrame"
]
},
{
"id": "browser-equivalent-runtime-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/browser-equivalent-runtime-undo_redo.json",
"unitIds": [
"web-command:applyObjectTransform",
"web-command:createPrimitive",
"web-command:renderFrame"
]
},
{
"id": "browser-equivalent-runtime-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/browser-equivalent-runtime-save_reopen.json",
"unitIds": [
"web-command:applyObjectTransform",
"web-command:createPrimitive",
"web-command:renderFrame"
]
},
{
"id": "browser-equivalent-runtime-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/browser-equivalent-runtime-determinism.json",
"unitIds": [
"web-command:applyObjectTransform",
"web-command:createPrimitive",
"web-command:renderFrame"
]
}
]
}
}

View File

@@ -0,0 +1,188 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "CURVE-SURFACE-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Curve bevel/taper/conversion and surface resolution use native Main",
"workflow": "Mutate curve bevel and taper, convert curve to surface, set surface resolution, then verify rejection, undo/redo, save/reopen and deterministic replay",
"sourceUnits": [
"web-command:convertCurveType",
"web-command:setCurveBevel",
"web-command:setCurveTaper",
"web-command:setSurfaceResolution"
],
"routeIds": [
"web-command:convertCurveType",
"web-command:setCurveBevel",
"web-command:setCurveTaper",
"web-command:setSurfaceResolution"
],
"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/blenkernel/intern/curve.cc"
],
"changedFiles": [
"web/tests/e2e/wbv2-curve-surface-coverage-production.spec.ts",
"my-tools/prepare_wbv2_curve_surface_workflow.py"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/curve.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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_curve_surface_workflow.py",
"tests/files/web/nonmesh_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"web/package.json",
"web/playwright.config.ts",
"web/protocol/nonmesh-geometry-commands.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/wbv2-curve-surface-coverage-production.spec.ts",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"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"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"WEB_TEST_PORT=5373",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/wbv2-curve-surface-coverage-production.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
}
],
"cases": [
{
"id": "curve-surface-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:setCurveBevel",
"web-command:setCurveTaper",
"web-command:convertCurveType",
"web-command:setSurfaceResolution"
]
},
{
"id": "curve-surface-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:setCurveBevel"
]
},
{
"id": "curve-surface-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:setSurfaceResolution"
]
},
{
"id": "curve-surface-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:setSurfaceResolution"
]
},
{
"id": "curve-surface-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:setCurveBevel"
]
}
]
}
}

View File

@@ -0,0 +1,184 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "FEATURE-COVERAGE-DASHBOARD",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Feature route inventory and implementation gap dashboard consumes source-bound route metadata; implementation phase only.",
"workflow": "Feature route inventory and implementation gap dashboard consumes source-bound route metadata; implementation phase only.",
"sourceUnits": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:createPrimitive",
"web-command:renderFrame"
],
"routeIds": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:createPrimitive",
"web-command:renderFrame"
],
"sourceReferences": [
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp"
],
"changedFiles": [
"my-tools/prepare_wbv2_feature_dashboard_workflow.py",
"web/app/src/app/App.tsx",
"web/tests/e2e/feature-coverage-dashboard-receipt.spec.ts"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_feature_dashboard_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/blender-operator.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tsconfig.json",
"web/tests/e2e/feature-coverage-dashboard-receipt.spec.ts"
],
"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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx",
"tests/e2e/receipt-producer-runtime.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/feature-coverage-dashboard-receipt.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
}
],
"cases": [
{
"id": "feature-coverage-dashboard-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/feature-coverage-dashboard-positive.json",
"unitIds": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:createPrimitive",
"web-command:renderFrame"
]
},
{
"id": "feature-coverage-dashboard-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/feature-coverage-dashboard-negative.json",
"unitIds": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:createPrimitive",
"web-command:renderFrame"
]
},
{
"id": "feature-coverage-dashboard-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/feature-coverage-dashboard-undo_redo.json",
"unitIds": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:createPrimitive",
"web-command:renderFrame"
]
},
{
"id": "feature-coverage-dashboard-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/feature-coverage-dashboard-save_reopen.json",
"unitIds": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:createPrimitive",
"web-command:renderFrame"
]
},
{
"id": "feature-coverage-dashboard-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/feature-coverage-dashboard-determinism.json",
"unitIds": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:createPrimitive",
"web-command:renderFrame"
]
}
]
}
}

View File

@@ -0,0 +1,184 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "GREASE-PENCIL-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "deferred until user use; no behavioral acceptance claimed",
"result": {
"status": "ready",
"contractKind": "compilation_only",
"summary": "Grease Pencil drawing, material, selection and interpolation Main commands retain all 26 original GP/Lineart modifier types when saving. Original callbacks are compiled into WASM; user behavior verification is deferred.",
"workflow": "Grease Pencil drawing, material, selection and interpolation Main commands retain all 26 original GP/Lineart modifier types when saving. Original callbacks are compiled into WASM; user behavior verification is deferred.",
"sourceUnits": [
"web-command:setGreasePencilDrawing",
"web-command:setGreasePencilInterpolate",
"web-command:setGreasePencilMaterial",
"web-command:setGreasePencilSelection"
],
"routeIds": [
"web-command:setGreasePencilDrawing",
"web-command:setGreasePencilInterpolate",
"web-command:setGreasePencilMaterial",
"web-command:setGreasePencilSelection"
],
"sourceReferences": [
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_armature.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_build.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_color.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_dash.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_envelope.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_lattice.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_length.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_mirror.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_multiply.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_noise.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_offset.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_opacity.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_outline.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_shrinkwrap.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_simplify.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_smooth.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_subdiv.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_texture.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_thickness.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_time.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_tint.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_lineart.cc",
"blender-5.2.0/source/blender/editors/grease_pencil/intern/grease_pencil_geom.cc",
"blender-5.2.0/source/blender/editors/grease_pencil/intern/grease_pencil_lineart.cc",
"blender-5.2.0/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp"
],
"changedFiles": [
"my-tools/wbv2_compilation_recipe.py",
"blender-5.2.0/source/blender/modifiers/CMakeLists.txt",
"blender-5.2.0/source/blender/modifiers/intern/MOD_util.cc",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"web/app/src/app/App.tsx",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_armature.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_build.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_color.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_dash.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_envelope.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_lattice.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_length.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_mirror.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_multiply.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_noise.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_offset.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_opacity.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_outline.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_shrinkwrap.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_simplify.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_smooth.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_subdiv.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_texture.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_thickness.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_time.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_tint.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc",
"my-tools/prepare_wbv2_grease_pencil_workflow.py",
"blender-5.2.0/source/blender/modifiers/intern/MOD_lineart.cc"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/editors/grease_pencil/intern/grease_pencil_edit.cc",
"blender-5.2.0/source/blender/editors/grease_pencil/intern/grease_pencil_geom.cc",
"blender-5.2.0/source/blender/editors/grease_pencil/intern/grease_pencil_lineart.cc",
"blender-5.2.0/source/blender/modifiers/CMakeLists.txt",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_armature.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_array.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_build.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_color.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_dash.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_envelope.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_hook.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_lattice.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_length.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_mirror.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_multiply.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_noise.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_offset.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_opacity.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_outline.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_shrinkwrap.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_simplify.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_smooth.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_subdiv.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_texture.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_thickness.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_time.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_tint.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_util.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_angle.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_grease_pencil_weight_proximity.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_lineart.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_util.cc",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_grease_pencil_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tests/files/web/modifier_grease_pencil_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/scene-ir.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
}
],
"cases": []
}
}

View File

@@ -0,0 +1,202 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "IO-ROUTE-COMPLETION",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Native OBJ geometry import/export; external materials and other formats remain outside this bounded workflow.",
"workflow": "Import OBJ into Main, reject empty geometry without mutation, export OBJ, undo/redo, save/reopen and independently replay; compare browser blends and exported geometry with desktop Blender.",
"sourceUnits": [
"operator:WM_OT_obj_export",
"operator:WM_OT_obj_import",
"operator:WM_OT_open_mainfile"
],
"routeIds": [
"operator:WM_OT_obj_export",
"operator:WM_OT_obj_import",
"operator:WM_OT_open_mainfile"
],
"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/windowmanager/intern/wm_files.cc",
"blender-5.2.0/source/blender/io/wavefront_obj/exporter/obj_exporter.cc",
"blender-5.2.0/source/blender/io/wavefront_obj/importer/obj_importer.cc"
],
"changedFiles": [
"web/tests/e2e/io-format-operator-production.spec.ts",
"web/tests/fixtures/io-route-main-snapshots.py",
"my-tools/prepare_wbv2_io_route_workflow.py"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/io/CMakeLists.txt",
"blender-5.2.0/source/blender/io/wavefront_obj/exporter/obj_exporter.cc",
"blender-5.2.0/source/blender/io/wavefront_obj/importer/obj_importer.cc",
"blender-5.2.0/source/blender/nodes/shader/node_shader_util.cc",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_headless_fallback.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/web_engine/web_rna_fallback.cpp",
"blender-5.2.0/source/blender/windowmanager/intern/wm_files.cc",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_io_route_workflow.py",
"tests/files/web/basic_scene.blend",
"tests/files/web/m12_obj_multi_v1/multi-object.mtl",
"tests/files/web/m12_obj_multi_v1/multi-object.obj",
"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/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/io-format-operator-production.spec.ts",
"web/tests/fixtures/io-route-main-snapshots.py",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"checks": [
{
"id": "wasm-source-build",
"argv": [
"python3",
"my-tools/build_local_webengine.py"
],
"cwd": ".",
"kinds": [
"source_build"
],
"timeoutSeconds": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 300
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90
},
{
"id": "chromium-authoring",
"argv": [
"env",
"WEB_TEST_PORT=5391",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/io-format-operator-production.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": "io-route-completion-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/io-route-completion-positive.json",
"unitIds": [
"operator:WM_OT_obj_export",
"operator:WM_OT_obj_import",
"operator:WM_OT_open_mainfile"
]
},
{
"id": "io-route-completion-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/io-route-completion-negative.json",
"unitIds": [
"operator:WM_OT_obj_export",
"operator:WM_OT_obj_import",
"operator:WM_OT_open_mainfile"
]
},
{
"id": "io-route-completion-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/io-route-completion-undo_redo.json",
"unitIds": [
"operator:WM_OT_obj_export",
"operator:WM_OT_obj_import",
"operator:WM_OT_open_mainfile"
]
},
{
"id": "io-route-completion-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/io-route-completion-save_reopen.json",
"unitIds": [
"operator:WM_OT_obj_export",
"operator:WM_OT_obj_import",
"operator:WM_OT_open_mainfile"
]
},
{
"id": "io-route-completion-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/io-route-completion-determinism.json",
"unitIds": [
"operator:WM_OT_obj_export",
"operator:WM_OT_obj_import",
"operator:WM_OT_open_mainfile"
]
}
]
}
}

View File

@@ -0,0 +1,892 @@
{
"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"
]
}
]
}
}

View File

@@ -0,0 +1,184 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "MESH-EXTENDED-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Primitive creation and mesh editing use compiled native Main",
"workflow": "Create a cube, extrude one face through meshEdit, reject malformed primitive input, then verify undo/redo, save/reopen and deterministic replay",
"sourceUnits": [
"web-command:createPrimitive",
"web-command:meshEdit"
],
"routeIds": [
"web-command:createPrimitive",
"web-command:meshEdit"
],
"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/editors/object/object_ops.cc"
],
"changedFiles": [
"web/tests/e2e/wbv2-mesh-extended-authoring-production.spec.ts",
"my-tools/prepare_wbv2_mesh_extended_workflow.py"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/editors/object/object_ops.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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_mesh_extended_workflow.py",
"tests/files/web/basic_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"web/app/src/workers/web-engine.worker.ts",
"web/package.json",
"web/playwright.config.ts",
"web/protocol/core-scene-commands.ts",
"web/protocol/mesh-authoring-commands.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/wbv2-mesh-extended-authoring-production.spec.ts",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"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"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"WEB_TEST_PORT=5374",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/wbv2-mesh-extended-authoring-production.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
}
],
"cases": [
{
"id": "mesh-extended-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:createPrimitive",
"web-command:meshEdit"
]
},
{
"id": "mesh-extended-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:createPrimitive"
]
},
{
"id": "mesh-extended-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:meshEdit"
]
},
{
"id": "mesh-extended-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:createPrimitive",
"web-command:meshEdit"
]
},
{
"id": "mesh-extended-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:createPrimitive",
"web-command:meshEdit"
]
}
]
}
}

View File

@@ -0,0 +1,174 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "METABALL-ELEMENTS-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Metaball element edits persist in native Main",
"workflow": "Edit active Metaball element position and radius, reject malformed values, and verify undo/redo/save/reopen/determinism",
"sourceUnits": [
"web-command:setMetaballElements"
],
"routeIds": [
"web-command:setMetaballElements"
],
"sourceReferences": [
"blender-5.2.0/source/blender/blenkernel/intern/mball.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"
],
"changedFiles": [
"web/tests/e2e/wbv2-metaball-elements-production.spec.ts",
"my-tools/prepare_wbv2_metaball_workflow.py"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/mball.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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_metaball_workflow.py",
"tests/files/web/nonmesh_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"web/package.json",
"web/playwright.config.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/wbv2-metaball-elements-production.spec.ts",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js"
],
"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"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"WEB_TEST_PORT=5372",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/wbv2-metaball-elements-production.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium",
"positive",
"negative",
"undo_redo",
"save_reopen",
"determinism"
],
"dependsOn": [
"wasm-source-build",
"web-build"
],
"timeoutSeconds": 120,
"continueOnFailure": true
}
],
"cases": [
{
"id": "metaball-elements-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:setMetaballElements"
]
},
{
"id": "metaball-elements-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:setMetaballElements"
]
},
{
"id": "metaball-elements-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:setMetaballElements"
]
},
{
"id": "metaball-elements-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:setMetaballElements"
]
},
{
"id": "metaball-elements-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:setMetaballElements"
]
}
]
}
}

View File

@@ -0,0 +1,808 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "MODIFIER-STACK-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Modifier stack editing uses original Blender RNA accessors and retains the active data owner",
"workflow": "Add, remove and reorder modifiers; edit supported BEVEL, ARRAY, MIRROR, SOLIDIFY and SUBSURF parameters; validate native Main, invalid input rollback, history, save/reopen and deterministic replay",
"sourceUnits": [
"web-command:addModifier",
"web-command:removeModifier",
"web-command:moveModifier",
"web-command:setModifierParameters",
"web-command:setModifierParameters",
"web-command:setModifierParameters",
"web-command:setModifierParameters",
"web-command:setModifierParameters"
],
"routeIds": [
"web-command:addModifier",
"web-command:removeModifier",
"web-command:moveModifier",
"web-command:setModifierParameters",
"web-command:setModifierParameters",
"web-command:setModifierParameters",
"web-command:setModifierParameters",
"web-command:setModifierParameters"
],
"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/makesrna/intern/rna_modifier.cc",
"blender-5.2.0/source/blender/editors/object/object_modifier.cc",
"blender-5.2.0/source/blender/web_engine/extract_modifier_accessors.py",
"blender-5.2.0/source/blender/web_engine/extract_id_property_rna.py",
"blender-5.2.0/source/blender/web_engine/web_engine_modifier_properties.hh",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.h",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt"
],
"changedFiles": [
"web/tests/e2e/modifier-stack-ui-production.spec.ts",
"web/tests/fixtures/modifier-stack-main-snapshots.py",
"my-tools/prepare_wbv2_modifier_stack_workflow.py",
"web/app/src/app/App.tsx",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"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/makesrna/intern/rna_modifier.cc",
"blender-5.2.0/source/blender/editors/object/object_modifier.cc",
"blender-5.2.0/source/blender/web_engine/extract_modifier_accessors.py",
"blender-5.2.0/source/blender/web_engine/extract_id_property_rna.py",
"blender-5.2.0/source/blender/web_engine/web_engine_modifier_properties.hh",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.h",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"web/app/src/app/ModifierParameterField.tsx",
"web/app/src/app/ModifierParameterField.css",
"web/app/src/app/app-shell.css",
"web/protocol/modifier.ts",
"web/protocol/scene-ir.ts",
"web/tests/fixtures/create-modifier-stack-input.py",
"my-tools/test_wbv2_modifier_accessors.py"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/editors/object/object_modifier.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_modifier.cc",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"blender-5.2.0/source/blender/web_engine/extract_id_property_rna.py",
"blender-5.2.0/source/blender/web_engine/extract_modifier_accessors.py",
"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/web_engine/web_engine_modifier_properties.hh",
"build_web_blender6/CMakeCache.txt",
"build_web_blender6/source/blender/makesrna/intern/rna_modifier_gen.cc",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_modifier_stack_workflow.py",
"my-tools/test_wbv2_modifier_accessors.py",
"tests/files/web/modifier_stack_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"web/app/src/app/App.tsx",
"web/app/src/app/ModifierParameterField.css",
"web/app/src/app/ModifierParameterField.tsx",
"web/app/src/app/app-shell.css",
"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/modifier.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/modifier-stack-ui-production.spec.ts",
"web/tests/fixtures/create-modifier-stack-input.py",
"web/tests/fixtures/modifier-stack-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/modifier-stack-ui-production.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-panel",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack panel ",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"authoring-lint"
],
"timeoutSeconds": 75,
"continueOnFailure": true
},
{
"id": "chromium-add",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack add ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-remove",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack remove ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-move",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack move ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-parameters-bevel",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack parameters bevel ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-parameters-array",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack parameters array ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-parameters-mirror",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack parameters mirror ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-parameters-solidify",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack parameters solidify ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-parameters-subsurf",
"argv": [
"env",
"WEB_TEST_PORT=5382",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/modifier-stack-ui-production.spec.ts",
"--grep",
"modifier stack parameters subsurf ",
"--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": 75,
"continueOnFailure": true
}
],
"cases": [
{
"id": "modifier-add-positive",
"kind": "positive",
"checkId": "chromium-add",
"receipt": "unallocated/add-positive.json",
"unitIds": [
"web-command:addModifier"
]
},
{
"id": "modifier-add-negative",
"kind": "negative",
"checkId": "chromium-add",
"receipt": "unallocated/add-negative.json",
"unitIds": [
"web-command:addModifier"
]
},
{
"id": "modifier-add-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-add",
"receipt": "unallocated/add-undo_redo.json",
"unitIds": [
"web-command:addModifier"
]
},
{
"id": "modifier-add-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-add",
"receipt": "unallocated/add-save_reopen.json",
"unitIds": [
"web-command:addModifier"
]
},
{
"id": "modifier-add-determinism",
"kind": "determinism",
"checkId": "chromium-add",
"receipt": "unallocated/add-determinism.json",
"unitIds": [
"web-command:addModifier"
]
},
{
"id": "modifier-remove-positive",
"kind": "positive",
"checkId": "chromium-remove",
"receipt": "unallocated/remove-positive.json",
"unitIds": [
"web-command:removeModifier"
]
},
{
"id": "modifier-remove-negative",
"kind": "negative",
"checkId": "chromium-remove",
"receipt": "unallocated/remove-negative.json",
"unitIds": [
"web-command:removeModifier"
]
},
{
"id": "modifier-remove-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-remove",
"receipt": "unallocated/remove-undo_redo.json",
"unitIds": [
"web-command:removeModifier"
]
},
{
"id": "modifier-remove-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-remove",
"receipt": "unallocated/remove-save_reopen.json",
"unitIds": [
"web-command:removeModifier"
]
},
{
"id": "modifier-remove-determinism",
"kind": "determinism",
"checkId": "chromium-remove",
"receipt": "unallocated/remove-determinism.json",
"unitIds": [
"web-command:removeModifier"
]
},
{
"id": "modifier-move-positive",
"kind": "positive",
"checkId": "chromium-move",
"receipt": "unallocated/move-positive.json",
"unitIds": [
"web-command:moveModifier"
]
},
{
"id": "modifier-move-negative",
"kind": "negative",
"checkId": "chromium-move",
"receipt": "unallocated/move-negative.json",
"unitIds": [
"web-command:moveModifier"
]
},
{
"id": "modifier-move-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-move",
"receipt": "unallocated/move-undo_redo.json",
"unitIds": [
"web-command:moveModifier"
]
},
{
"id": "modifier-move-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-move",
"receipt": "unallocated/move-save_reopen.json",
"unitIds": [
"web-command:moveModifier"
]
},
{
"id": "modifier-move-determinism",
"kind": "determinism",
"checkId": "chromium-move",
"receipt": "unallocated/move-determinism.json",
"unitIds": [
"web-command:moveModifier"
]
},
{
"id": "modifier-parameters-bevel-positive",
"kind": "positive",
"checkId": "chromium-parameters-bevel",
"receipt": "unallocated/parameters-bevel-positive.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-bevel-negative",
"kind": "negative",
"checkId": "chromium-parameters-bevel",
"receipt": "unallocated/parameters-bevel-negative.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-bevel-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-parameters-bevel",
"receipt": "unallocated/parameters-bevel-undo_redo.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-bevel-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-parameters-bevel",
"receipt": "unallocated/parameters-bevel-save_reopen.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-bevel-determinism",
"kind": "determinism",
"checkId": "chromium-parameters-bevel",
"receipt": "unallocated/parameters-bevel-determinism.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-array-positive",
"kind": "positive",
"checkId": "chromium-parameters-array",
"receipt": "unallocated/parameters-array-positive.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-array-negative",
"kind": "negative",
"checkId": "chromium-parameters-array",
"receipt": "unallocated/parameters-array-negative.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-array-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-parameters-array",
"receipt": "unallocated/parameters-array-undo_redo.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-array-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-parameters-array",
"receipt": "unallocated/parameters-array-save_reopen.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-array-determinism",
"kind": "determinism",
"checkId": "chromium-parameters-array",
"receipt": "unallocated/parameters-array-determinism.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-mirror-positive",
"kind": "positive",
"checkId": "chromium-parameters-mirror",
"receipt": "unallocated/parameters-mirror-positive.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-mirror-negative",
"kind": "negative",
"checkId": "chromium-parameters-mirror",
"receipt": "unallocated/parameters-mirror-negative.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-mirror-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-parameters-mirror",
"receipt": "unallocated/parameters-mirror-undo_redo.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-mirror-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-parameters-mirror",
"receipt": "unallocated/parameters-mirror-save_reopen.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-mirror-determinism",
"kind": "determinism",
"checkId": "chromium-parameters-mirror",
"receipt": "unallocated/parameters-mirror-determinism.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-solidify-positive",
"kind": "positive",
"checkId": "chromium-parameters-solidify",
"receipt": "unallocated/parameters-solidify-positive.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-solidify-negative",
"kind": "negative",
"checkId": "chromium-parameters-solidify",
"receipt": "unallocated/parameters-solidify-negative.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-solidify-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-parameters-solidify",
"receipt": "unallocated/parameters-solidify-undo_redo.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-solidify-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-parameters-solidify",
"receipt": "unallocated/parameters-solidify-save_reopen.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-solidify-determinism",
"kind": "determinism",
"checkId": "chromium-parameters-solidify",
"receipt": "unallocated/parameters-solidify-determinism.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-subsurf-positive",
"kind": "positive",
"checkId": "chromium-parameters-subsurf",
"receipt": "unallocated/parameters-subsurf-positive.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-subsurf-negative",
"kind": "negative",
"checkId": "chromium-parameters-subsurf",
"receipt": "unallocated/parameters-subsurf-negative.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-subsurf-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-parameters-subsurf",
"receipt": "unallocated/parameters-subsurf-undo_redo.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-subsurf-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-parameters-subsurf",
"receipt": "unallocated/parameters-subsurf-save_reopen.json",
"unitIds": [
"web-command:setModifierParameters"
]
},
{
"id": "modifier-parameters-subsurf-determinism",
"kind": "determinism",
"checkId": "chromium-parameters-subsurf",
"receipt": "unallocated/parameters-subsurf-determinism.json",
"unitIds": [
"web-command:setModifierParameters"
]
}
]
}
}

View File

@@ -0,0 +1,332 @@
{
"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"
]
}
]
}
}

View File

@@ -0,0 +1,325 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "NODE-GRAPH-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Independent native writes required for both node graph routes",
"workflow": "Author Geometry Nodes and Shader graphs; each route must independently mutate Main and pass rejection, history, persistence and replay",
"sourceUnits": [
"web-command:setGeometryNodeGraph",
"web-command:setShaderGraph"
],
"routeIds": [
"web-command:setGeometryNodeGraph",
"web-command:setShaderGraph"
],
"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_headless_fallback.cpp",
"blender-5.2.0/source/blender/web_engine/web_rna_fallback.cpp",
"blender-5.2.0/source/blender/nodes/intern/node_common.cc",
"blender-5.2.0/source/blender/nodes/intern/node_socket.cc",
"blender-5.2.0/source/blender/nodes/intern/node_geometry_exec.cc",
"blender-5.2.0/source/blender/nodes/intern/socket_usage_inference.cc",
"blender-5.2.0/source/blender/nodes/intern/socket_value_inference.cc",
"blender-5.2.0/source/blender/nodes/geometry/node_geometry_util.cc",
"blender-5.2.0/source/blender/nodes/geometry/nodes/node_geo_transform_geometry.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_ID.cc"
],
"changedFiles": [
"web/tests/e2e/wbv2-node-graph-authoring-production.spec.ts",
"my-tools/prepare_wbv2_node_graph_workflow.py",
"web/protocol/geometry-node-commands.ts",
"web/tests/fixtures/node-graph-main-snapshots.py",
"blender-5.2.0/source/blender/web_engine/extract_id_property_rna.py",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"blender-5.2.0/source/blender/nodes/CMakeLists.txt",
"blender-5.2.0/source/blender/makesrna/intern/CMakeLists.txt"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/makesrna/intern/CMakeLists.txt",
"blender-5.2.0/source/blender/makesrna/intern/rna_ID.cc",
"blender-5.2.0/source/blender/nodes/CMakeLists.txt",
"blender-5.2.0/source/blender/nodes/geometry/node_geometry_util.cc",
"blender-5.2.0/source/blender/nodes/geometry/nodes/node_geo_transform_geometry.cc",
"blender-5.2.0/source/blender/nodes/intern/node_common.cc",
"blender-5.2.0/source/blender/nodes/intern/node_geometry_exec.cc",
"blender-5.2.0/source/blender/nodes/intern/node_socket.cc",
"blender-5.2.0/source/blender/nodes/intern/socket_usage_inference.cc",
"blender-5.2.0/source/blender/nodes/intern/socket_value_inference.cc",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"blender-5.2.0/source/blender/web_engine/extract_id_property_rna.py",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_headless_fallback.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"blender-5.2.0/source/blender/web_engine/web_rna_fallback.cpp",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_node_graph_workflow.py",
"tests/files/web/basic_scene.blend",
"tests/files/web/m12_glb_main_v1/pbr.blend",
"tests/files/web/modifier_geometry_nodes_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/geometry-node-commands.ts",
"web/protocol/geometry-nodes.ts",
"web/protocol/scene-ir.ts",
"web/protocol/shader-graph-commands.ts",
"web/protocol/shader-graph.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/wbv2-node-graph-authoring-production.spec.ts",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tests/fixtures/node-graph-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"
],
"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/geometry-node-commands.ts",
"tests/e2e/wbv2-node-graph-authoring-production.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-panel",
"argv": [
"env",
"WEB_TEST_PORT=5375",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/wbv2-node-graph-authoring-production.spec.ts",
"--grep",
"node graph panel",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"authoring-lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-geometry",
"argv": [
"env",
"WEB_TEST_PORT=5375",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/wbv2-node-graph-authoring-production.spec.ts",
"--grep",
"node graph geometry",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-shader",
"argv": [
"env",
"WEB_TEST_PORT=5375",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/wbv2-node-graph-authoring-production.spec.ts",
"--grep",
"node graph shader",
"--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": 75,
"continueOnFailure": true
}
],
"cases": [
{
"id": "node-graph-geometry-positive",
"kind": "positive",
"checkId": "chromium-geometry",
"receipt": "unallocated/geometry-positive.json",
"unitIds": [
"web-command:setGeometryNodeGraph"
]
},
{
"id": "node-graph-geometry-negative",
"kind": "negative",
"checkId": "chromium-geometry",
"receipt": "unallocated/geometry-negative.json",
"unitIds": [
"web-command:setGeometryNodeGraph"
]
},
{
"id": "node-graph-geometry-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-geometry",
"receipt": "unallocated/geometry-undo_redo.json",
"unitIds": [
"web-command:setGeometryNodeGraph"
]
},
{
"id": "node-graph-geometry-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-geometry",
"receipt": "unallocated/geometry-save_reopen.json",
"unitIds": [
"web-command:setGeometryNodeGraph"
]
},
{
"id": "node-graph-geometry-determinism",
"kind": "determinism",
"checkId": "chromium-geometry",
"receipt": "unallocated/geometry-determinism.json",
"unitIds": [
"web-command:setGeometryNodeGraph"
]
},
{
"id": "node-graph-shader-positive",
"kind": "positive",
"checkId": "chromium-shader",
"receipt": "unallocated/shader-positive.json",
"unitIds": [
"web-command:setShaderGraph"
]
},
{
"id": "node-graph-shader-negative",
"kind": "negative",
"checkId": "chromium-shader",
"receipt": "unallocated/shader-negative.json",
"unitIds": [
"web-command:setShaderGraph"
]
},
{
"id": "node-graph-shader-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-shader",
"receipt": "unallocated/shader-undo_redo.json",
"unitIds": [
"web-command:setShaderGraph"
]
},
{
"id": "node-graph-shader-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-shader",
"receipt": "unallocated/shader-save_reopen.json",
"unitIds": [
"web-command:setShaderGraph"
]
},
{
"id": "node-graph-shader-determinism",
"kind": "determinism",
"checkId": "chromium-shader",
"receipt": "unallocated/shader-determinism.json",
"unitIds": [
"web-command:setShaderGraph"
]
}
]
}
}

View File

@@ -0,0 +1,319 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "OBJECT-EDITOR-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Object editor controls with native Main readback and inherited collection visibility",
"workflow": "Clear object location, rotation and scale; create camera, light, empty and armature data; change object selection and collection viewport/render visibility with persistence and history",
"sourceUnits": [
"web-command:clearObjectTransform",
"web-command:createObjectData",
"web-command:setObjectSelection",
"web-command:setCollectionVisibility"
],
"routeIds": [
"web-command:clearObjectTransform",
"web-command:createObjectData",
"web-command:setObjectSelection",
"web-command:setCollectionVisibility"
],
"sourceReferences": [
"blender-5.2.0/source/blender/blenkernel/intern/object.cc",
"blender-5.2.0/source/blender/blenkernel/intern/collection.cc",
"blender-5.2.0/source/blender/blenkernel/intern/layer.cc",
"blender-5.2.0/source/blender/blenkernel/intern/idtype.cc",
"blender-5.2.0/source/blender/makesdna/DNA_collection_types.h",
"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"
],
"changedFiles": [
"blender-5.2.0/source/blender/web_engine/web_engine_blend_reader.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"my-tools/diagnose_local_object_editor.mjs",
"my-tools/diagnose_local_save_stability.mjs",
"my-tools/prepare_wbv2_object_editor_workflow.py",
"my-tools/wbv2_runtime_contract.py",
"my-tools/test_wbv2_runtime_contract.py",
"web/app/src/three-adapter/viewport.ts",
"web/tests/e2e/object-editor-ui-production.spec.ts",
"web/tests/e2e/viewport-render-budget.spec.ts",
"web/tests/fixtures/create-object-editor-input.py",
"web/tests/fixtures/object-editor-main-snapshots.py",
"tests/files/web/object_editor_scene.blend",
"tests/files/web/object_editor_visibility_scene.blend"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/collection.cc",
"blender-5.2.0/source/blender/blenkernel/intern/idtype.cc",
"blender-5.2.0/source/blender/blenkernel/intern/layer.cc",
"blender-5.2.0/source/blender/blenkernel/intern/object.cc",
"blender-5.2.0/source/blender/makesdna/DNA_collection_types.h",
"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/diagnose_local_object_editor.mjs",
"my-tools/diagnose_local_save_stability.mjs",
"my-tools/prepare_wbv2_object_editor_workflow.py",
"my-tools/test_wbv2_runtime_contract.py",
"my-tools/wbv2_runtime_contract.py",
"tests/files/web/basic_scene.blend",
"tests/files/web/nonmesh_scene.blend",
"tests/files/web/object_editor_scene.blend",
"tests/files/web/object_editor_visibility_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"tools/web/web-build-fingerprint.mjs",
"web/app/src/app/App.tsx",
"web/app/src/capabilities/blender-feature-route-catalog.json",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/three-adapter/viewport.ts",
"web/app/src/workers/web-engine.worker.ts",
"web/app/vite.config.ts",
"web/package.json",
"web/playwright.config.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/object-editor-ui-production.spec.ts",
"web/tests/e2e/viewport-render-budget.spec.ts",
"web/tests/fixtures/create-object-editor-input.py",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tests/fixtures/object-editor-main-snapshots.py",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"checks": [
{
"id": "wasm-source-build",
"argv": [
"python3",
"my-tools/build_local_webengine.py"
],
"cwd": ".",
"kinds": [
"source_build"
],
"timeoutSeconds": 1200,
"continueOnFailure": true
},
{
"id": "native-minimal",
"argv": [
"node",
"my-tools/diagnose_local_object_editor.mjs"
],
"cwd": ".",
"kinds": [
"unit"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 30,
"continueOnFailure": true
},
{
"id": "native-collection-paths",
"argv": [
"node",
"my-tools/diagnose_local_object_editor.mjs",
"--hierarchy"
],
"cwd": ".",
"kinds": [
"unit"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 30,
"continueOnFailure": true
},
{
"id": "native-save-stability",
"argv": [
"node",
"my-tools/diagnose_local_save_stability.mjs"
],
"cwd": ".",
"kinds": [
"unit"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 30,
"continueOnFailure": true
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build",
"native-minimal",
"native-collection-paths",
"native-save-stability"
],
"timeoutSeconds": 300,
"continueOnFailure": true
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-viewport",
"argv": [
"env",
"WEB_TEST_PORT=5361",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/viewport-render-budget.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium",
"unit"
],
"dependsOn": [
"wasm-source-build",
"web-build"
],
"timeoutSeconds": 100,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"BLENDER_BIN=/home/mes123456/workinf_Blender_Wasm/build_blender_native/bin/blender",
"WEB_TEST_PORT=5360",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/object-editor-ui-production.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium",
"positive",
"negative",
"undo_redo",
"save_reopen",
"determinism"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"native-minimal",
"native-collection-paths",
"chromium-viewport"
],
"timeoutSeconds": 180,
"continueOnFailure": true
}
],
"cases": [
{
"id": "object-editor-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:clearObjectTransform",
"web-command:createObjectData",
"web-command:setObjectSelection",
"web-command:setCollectionVisibility"
]
},
{
"id": "object-editor-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:clearObjectTransform",
"web-command:createObjectData",
"web-command:setObjectSelection",
"web-command:setCollectionVisibility"
]
},
{
"id": "object-editor-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:clearObjectTransform",
"web-command:createObjectData",
"web-command:setObjectSelection",
"web-command:setCollectionVisibility"
]
},
{
"id": "object-editor-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:clearObjectTransform",
"web-command:createObjectData",
"web-command:setObjectSelection",
"web-command:setCollectionVisibility"
]
},
{
"id": "object-editor-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:clearObjectTransform",
"web-command:createObjectData",
"web-command:setObjectSelection",
"web-command:setCollectionVisibility"
]
}
]
}
}

View File

@@ -0,0 +1,86 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "OPERATOR-MACRO-COMPOSER",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "deferred until user use; no behavioral acceptance claimed",
"result": {
"status": "ready",
"contractKind": "compilation_only",
"summary": "Native operator macro catalog and invocation dispatch; implementation phase only.",
"workflow": "Native operator macro catalog and invocation dispatch; implementation phase only.",
"sourceUnits": [
"operator-macro:ARMATURE_OT_extrude_move",
"operator-macro:MESH_OT_duplicate_move"
],
"routeIds": [
"operator-macro:ARMATURE_OT_extrude_move",
"operator-macro:MESH_OT_duplicate_move"
],
"sourceReferences": [
"blender-5.2.0/source/blender/windowmanager/intern/wm_operator_type.cc",
"blender-5.2.0/source/blender/windowmanager/intern/wm_operators.cc"
],
"changedFiles": [
"my-tools/prepare_wbv2_operator_macro_workflow.py",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/app/App.tsx"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/windowmanager/intern/wm_operator_type.cc",
"blender-5.2.0/source/blender/windowmanager/intern/wm_operators.cc",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_operator_macro_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/blender-operator.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
}
],
"cases": []
}
}

View File

@@ -0,0 +1,88 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "OPERATOR-ROUTE-PALETTE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "deferred until user use; no behavioral acceptance claimed",
"result": {
"status": "ready",
"contractKind": "compilation_only",
"summary": "Feature route catalog and operator palette dispatch through the existing WebEngine client; implementation phase only.",
"workflow": "Feature route catalog and operator palette dispatch through the existing WebEngine client; implementation phase only.",
"sourceUnits": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:renderFrame",
"web-command:setCameraView"
],
"routeIds": [
"operator:OBJECT_OT_voxel_remesh",
"web-command:renderFrame",
"web-command:setCameraView"
],
"sourceReferences": [
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/windowmanager/intern/wm_operators.cc"
],
"changedFiles": [
"my-tools/prepare_wbv2_operator_palette_workflow.py",
"web/app/src/app/App.tsx",
"web/protocol/blender-operator.ts"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/windowmanager/intern/wm_operators.cc",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_operator_palette_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/blender-operator.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
}
],
"cases": []
}
}

View File

@@ -0,0 +1,139 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "PHYSICS-SIMULATION-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "deferred until user use; no behavioral acceptance claimed",
"result": {
"status": "ready",
"contractKind": "compilation_only",
"summary": "Edit rigid body, Cloth and Fluid native settings; configure existing particle caches from the Physics panel and retain real Main data when saving. Reuse native data creation and serialization callbacks. Browser Bullet simulation is not enabled; solver execution and runtime acceptance remain separate unfinished work.",
"workflow": "Edit rigid body, Cloth and Fluid native settings; configure existing particle caches from the Physics panel and retain real Main data when saving. Reuse native data creation and serialization callbacks. Browser Bullet simulation is not enabled; solver execution and runtime acceptance remain separate unfinished work.",
"sourceUnits": [
"web-command:setClothSettings",
"web-command:setFluidSettings",
"web-command:setParticleCache",
"web-command:setRigidBodySettings",
"web-command:setSimulationPlayback"
],
"routeIds": [
"web-command:setClothSettings",
"web-command:setFluidSettings",
"web-command:setParticleCache",
"web-command:setRigidBodySettings",
"web-command:setSimulationPlayback"
],
"sourceReferences": [
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_physics_authoring.cpp",
"blender-5.2.0/source/blender/modifiers/intern/MOD_cloth.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_fluid.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_util.cc",
"blender-5.2.0/source/blender/blenkernel/intern/rigidbody.cc",
"blender-5.2.0/source/blender/blenkernel/intern/fluid.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_cloth.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_fluid.cc",
"blender-5.2.0/source/blender/makesdna/DNA_pointcache_types.h"
],
"changedFiles": [
"my-tools/wbv2_compilation_recipe.py",
"blender-5.2.0/source/blender/web_engine/web_engine_physics_authoring.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_physics_authoring.hh",
"web/app/src/app/PhysicsSettingsEditor.tsx",
"web/app/src/app/PhysicsSettingsEditor.css",
"web/protocol/physics-simulation.ts",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_physics_authoring.cpp",
"blender-5.2.0/source/blender/modifiers/intern/MOD_cloth.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_fluid.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_util.cc",
"blender-5.2.0/source/blender/blenkernel/intern/rigidbody.cc",
"blender-5.2.0/source/blender/blenkernel/intern/fluid.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_cloth.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_fluid.cc",
"blender-5.2.0/source/blender/makesdna/DNA_pointcache_types.h",
"my-tools/prepare_wbv2_physics_workflow.py",
"web/app/src/app/App.tsx",
"web/app/src/app/app-shell.css",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"blender-5.2.0/source/blender/modifiers/CMakeLists.txt"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/fluid.cc",
"blender-5.2.0/source/blender/blenkernel/intern/rigidbody.cc",
"blender-5.2.0/source/blender/makesdna/DNA_pointcache_types.h",
"blender-5.2.0/source/blender/makesrna/intern/rna_cloth.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_fluid.cc",
"blender-5.2.0/source/blender/modifiers/CMakeLists.txt",
"blender-5.2.0/source/blender/modifiers/intern/MOD_cloth.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_fluid.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_particlesystem.cc",
"blender-5.2.0/source/blender/modifiers/intern/MOD_util.cc",
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt",
"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_physics_authoring.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_physics_authoring.hh",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_physics_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"web/app/src/app/App.tsx",
"web/app/src/app/PhysicsSettingsEditor.css",
"web/app/src/app/PhysicsSettingsEditor.tsx",
"web/app/src/app/app-shell.css",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/workers/web-engine.worker.ts",
"web/app/vite.config.ts",
"web/package.json",
"web/protocol/physics-commands.ts",
"web/protocol/physics-simulation.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
}
],
"cases": []
}
}

View File

@@ -0,0 +1,96 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "RENDER-CAMERA-LIGHT-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "deferred until user use; no behavioral acceptance claimed",
"result": {
"status": "ready",
"contractKind": "compilation_only",
"summary": "Render frame and animation dispatch with native camera, render pass and light linking settings; implementation phase only.",
"workflow": "Render frame and animation dispatch with native camera, render pass and light linking settings; implementation phase only.",
"sourceUnits": [
"web-command:renderAnimation",
"web-command:renderFrame",
"web-command:setCameraView",
"web-command:setLightLinking",
"web-command:setRenderPasses"
],
"routeIds": [
"web-command:renderAnimation",
"web-command:renderFrame",
"web-command:setCameraView",
"web-command:setLightLinking",
"web-command:setRenderPasses"
],
"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/render/intern/render_result.cc",
"blender-5.2.0/source/blender/render/intern/engine.cc"
],
"changedFiles": [
"my-tools/prepare_wbv2_render_workflow.py",
"web/app/src/app/App.tsx",
"web/protocol/web-engine.ts"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/render/intern/engine.cc",
"blender-5.2.0/source/blender/render/intern/render_result.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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_render_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/render-compositor-commands.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
}
],
"cases": []
}
}

View File

@@ -0,0 +1,227 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "RIG-POSE-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending fresh validation",
"result": {
"status": "ready",
"summary": "Native bone replacement and pose TRS with independent desktop state",
"workflow": "Replace a bone hierarchy and edit pose TRS independently; reject missing parents/bones, undo/redo, save/reopen and replay; compare with desktop Blender edits",
"routeIds": [
"web-command:setArmatureBones",
"web-command:setPoseBoneTransform"
],
"sourceUnits": [
"web-command:setArmatureBones",
"web-command:setPoseBoneTransform"
],
"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_rna_fallback.cpp",
"blender-5.2.0/source/blender/makesrna/intern/rna_pose.cc",
"blender-5.2.0/source/blender/blenkernel/intern/armature.cc",
"blender-5.2.0/source/blender/editors/armature/armature_edit.cc"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/armature.cc",
"blender-5.2.0/source/blender/editors/armature/armature_edit.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_pose.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_rna_fallback.cpp",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_rig_pose_workflow.py",
"tests/files/web/pose_constraint_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/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/rig-pose-authoring-native.spec.ts",
"web/tests/fixtures/rig-pose-authoring-main.py",
"web/tsconfig.json"
],
"changedFiles": [
"web/tests/e2e/rig-pose-authoring-native.spec.ts",
"web/tests/fixtures/rig-pose-authoring-main.py",
"my-tools/prepare_wbv2_rig_pose_workflow.py"
],
"artifacts": [
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"build_blender_native/bin/blender"
],
"checks": [
{
"id": "wasm-source-build",
"argv": [
"python3",
"my-tools/build_local_webengine.py"
],
"cwd": ".",
"kinds": [
"source_build"
],
"timeoutSeconds": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"timeoutSeconds": 300,
"dependsOn": [
"wasm-source-build"
]
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"tests/e2e/rig-pose-authoring-native.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90
},
{
"id": "chromium-rig",
"argv": [
"env",
"WEB_TEST_PORT=5393",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/rig-pose-authoring-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
}
],
"cases": [
{
"id": "rig-bones-positive",
"kind": "positive",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-bones-positive.json",
"unitIds": [
"web-command:setArmatureBones"
]
},
{
"id": "rig-bones-negative",
"kind": "negative",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-bones-negative.json",
"unitIds": [
"web-command:setArmatureBones"
]
},
{
"id": "rig-bones-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-bones-undo_redo.json",
"unitIds": [
"web-command:setArmatureBones"
]
},
{
"id": "rig-bones-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-bones-save_reopen.json",
"unitIds": [
"web-command:setArmatureBones"
]
},
{
"id": "rig-bones-determinism",
"kind": "determinism",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-bones-determinism.json",
"unitIds": [
"web-command:setArmatureBones"
]
},
{
"id": "rig-pose-positive",
"kind": "positive",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-pose-positive.json",
"unitIds": [
"web-command:setPoseBoneTransform"
]
},
{
"id": "rig-pose-negative",
"kind": "negative",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-pose-negative.json",
"unitIds": [
"web-command:setPoseBoneTransform"
]
},
{
"id": "rig-pose-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-pose-undo_redo.json",
"unitIds": [
"web-command:setPoseBoneTransform"
]
},
{
"id": "rig-pose-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-pose-save_reopen.json",
"unitIds": [
"web-command:setPoseBoneTransform"
]
},
{
"id": "rig-pose-determinism",
"kind": "determinism",
"checkId": "chromium-rig",
"receipt": "unallocated/rig-pose-determinism.json",
"unitIds": [
"web-command:setPoseBoneTransform"
]
}
]
}
}

View File

@@ -0,0 +1,188 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "RNA-DATABLOCK-REFLECTION",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Native RNA data-block and property reflection uses Blender RNA metadata; implementation phase only.",
"workflow": "Native RNA data-block and property reflection uses Blender RNA metadata; implementation phase only.",
"sourceUnits": [
"rna-struct:Action",
"rna-struct:BlenderRNA",
"rna-struct:Object"
],
"routeIds": [
"rna-struct:Action",
"rna-struct:BlenderRNA",
"rna-struct:Object"
],
"sourceReferences": [
"blender-5.2.0/source/blender/makesrna/intern/rna_access.cc",
"blender-5.2.0/source/blender/makesrna/intern/makesrna.cc",
"blender-5.2.0/source/blender/web_engine/web_rna_fallback.cpp"
],
"changedFiles": [
"my-tools/prepare_wbv2_rna_reflection_workflow.py",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/app/App.tsx",
"web/tests/e2e/rna-datablock-reflection-native.spec.ts"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/makesrna/intern/makesrna.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_access.cc",
"blender-5.2.0/source/blender/web_engine/web_rna_fallback.cpp",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_rna_reflection_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tsconfig.json",
"web/tests/e2e/rna-datablock-reflection-native.spec.ts"
],
"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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx",
"tests/e2e/rna-datablock-reflection-native.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/rna-datablock-reflection-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
}
],
"cases": [
{
"id": "rna-datablock-reflection-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-datablock-reflection-positive.json",
"unitIds": [
"rna-struct:Action",
"rna-struct:BlenderRNA",
"rna-struct:Object"
]
},
{
"id": "rna-datablock-reflection-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-datablock-reflection-negative.json",
"unitIds": [
"rna-struct:Action",
"rna-struct:BlenderRNA",
"rna-struct:Object"
]
},
{
"id": "rna-datablock-reflection-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-datablock-reflection-undo_redo.json",
"unitIds": [
"rna-struct:Action",
"rna-struct:BlenderRNA",
"rna-struct:Object"
]
},
{
"id": "rna-datablock-reflection-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-datablock-reflection-save_reopen.json",
"unitIds": [
"rna-struct:Action",
"rna-struct:BlenderRNA",
"rna-struct:Object"
]
},
{
"id": "rna-datablock-reflection-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-datablock-reflection-determinism.json",
"unitIds": [
"rna-struct:Action",
"rna-struct:BlenderRNA",
"rna-struct:Object"
]
}
]
}
}

View File

@@ -0,0 +1,188 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "RNA-REFLECTION-EXTENDED",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Native RNA array, enum and collection access uses Blender RNA metadata; implementation phase only.",
"workflow": "Native RNA array, enum and collection access uses Blender RNA metadata; implementation phase only.",
"sourceUnits": [
"rna-struct:BlenderRNA",
"rna-struct:Mesh",
"rna-struct:Object"
],
"routeIds": [
"rna-struct:BlenderRNA",
"rna-struct:Mesh",
"rna-struct:Object"
],
"sourceReferences": [
"blender-5.2.0/source/blender/makesrna/intern/rna_access.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_define.cc",
"blender-5.2.0/source/blender/web_engine/web_rna_fallback.cpp"
],
"changedFiles": [
"my-tools/prepare_wbv2_rna_extended_workflow.py",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/app/App.tsx",
"web/tests/e2e/rna-reflection-extended-native.spec.ts"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/makesrna/intern/rna_access.cc",
"blender-5.2.0/source/blender/makesrna/intern/rna_define.cc",
"blender-5.2.0/source/blender/web_engine/web_rna_fallback.cpp",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_rna_extended_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tsconfig.json",
"web/tests/e2e/rna-reflection-extended-native.spec.ts"
],
"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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx",
"tests/e2e/rna-reflection-extended-native.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/rna-reflection-extended-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
}
],
"cases": [
{
"id": "rna-reflection-extended-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-reflection-extended-positive.json",
"unitIds": [
"rna-struct:BlenderRNA",
"rna-struct:Mesh",
"rna-struct:Object"
]
},
{
"id": "rna-reflection-extended-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-reflection-extended-negative.json",
"unitIds": [
"rna-struct:BlenderRNA",
"rna-struct:Mesh",
"rna-struct:Object"
]
},
{
"id": "rna-reflection-extended-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-reflection-extended-undo_redo.json",
"unitIds": [
"rna-struct:BlenderRNA",
"rna-struct:Mesh",
"rna-struct:Object"
]
},
{
"id": "rna-reflection-extended-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-reflection-extended-save_reopen.json",
"unitIds": [
"rna-struct:BlenderRNA",
"rna-struct:Mesh",
"rna-struct:Object"
]
},
{
"id": "rna-reflection-extended-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/rna-reflection-extended-determinism.json",
"unitIds": [
"rna-struct:BlenderRNA",
"rna-struct:Mesh",
"rna-struct:Object"
]
}
]
}
}

View File

@@ -0,0 +1,384 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "SCULPT-ADVANCED-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending fresh validation",
"result": {
"status": "ready",
"summary": "Stroke, mesh attributes and original desktop voxel remesh with fresh per-route evidence",
"workflow": "Apply DRAW, masks and face sets; remesh the active mesh through bounded HTTP Blender; verify each route independently with rejection, undo/redo, persistence and replay",
"sourceUnits": [
"web-command:sculptStroke",
"web-command:setSculptMeshAttributes",
"operator:OBJECT_OT_voxel_remesh"
],
"routeIds": [
"web-command:sculptStroke",
"web-command:setSculptMeshAttributes",
"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": [
"my-tools/prepare_wbv2_sculpt_advanced_workflow.py",
"web/tests/e2e/sculpt-remesh-native.spec.ts",
"web/tests/fixtures/sculpt-remesh-main-snapshots.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/WEBUI-SCULPT.json",
"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/sculpt-authoring-ui-production.spec.ts",
"web/tests/e2e/sculpt-remesh-native.spec.ts",
"web/tests/fixtures/native-ui-workflow.ts",
"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-panel",
"argv": [
"env",
"WEB_TEST_PORT=5376",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/sculpt-authoring-ui-production.spec.ts",
"--grep",
"sculpt panel",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"authoring-lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-stroke",
"argv": [
"env",
"WEB_TEST_PORT=5376",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/sculpt-authoring-ui-production.spec.ts",
"--grep",
"sculpt stroke",
"--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": 60,
"continueOnFailure": true
},
{
"id": "chromium-attributes",
"argv": [
"env",
"WEB_TEST_PORT=5376",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/sculpt-authoring-ui-production.spec.ts",
"--grep",
"sculpt attributes",
"--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": 60,
"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
}
],
"cases": [
{
"id": "sculpt-stroke-positive",
"kind": "positive",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-positive.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-stroke-negative",
"kind": "negative",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-negative.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-stroke-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-undo_redo.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-stroke-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-save_reopen.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-stroke-determinism",
"kind": "determinism",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-determinism.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-attributes-positive",
"kind": "positive",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-positive.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"id": "sculpt-attributes-negative",
"kind": "negative",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-negative.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"id": "sculpt-attributes-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-undo_redo.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"id": "sculpt-attributes-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-save_reopen.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"id": "sculpt-attributes-determinism",
"kind": "determinism",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-determinism.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"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"
]
}
]
}
}

View File

@@ -0,0 +1,183 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "SEQUENCER-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Move, rename, mute, lock and change channels of existing flat image, movie, sound and scene strips without reopening their media or replacing native strip data. Blender's native translation keeps strip animation aligned. Structural and source changes retain the existing construction path; behavior verification is deferred until all features are implemented.",
"workflow": "Move, rename, mute, lock and change channels of existing flat image, movie, sound and scene strips without reopening their media or replacing native strip data. Blender's native translation keeps strip animation aligned. Structural and source changes retain the existing construction path; behavior verification is deferred until all features are implemented.",
"sourceUnits": [
"web-command:setSequencerStrips"
],
"routeIds": [
"web-command:setSequencerStrips"
],
"sourceReferences": [
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/sequencer/intern/strip_transform.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_relations.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_edit.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_add.cc",
"blender-5.2.0/source/blender/sequencer/intern/animation.cc",
"blender-5.2.0/source/blender/web_engine/web_engine_sequencer_animation.cpp"
],
"changedFiles": [
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"my-tools/prepare_wbv2_sequencer_full_workflow.py"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/sequencer/SEQ_animation.hh",
"blender-5.2.0/source/blender/sequencer/SEQ_relations.hh",
"blender-5.2.0/source/blender/sequencer/intern/animation.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_add.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_edit.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_relations.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_transform.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_sequencer_animation.cpp",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_sequencer_full_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tests/files/web/sequencer_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/workers/web-engine.worker.ts",
"web/app/vite.config.ts",
"web/package.json",
"web/protocol/scene-ir.ts",
"web/protocol/sequencer.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/sequencer-authoring-ui-production.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
}
],
"cases": [
{
"id": "sequencer-authoring-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/sequencer-authoring-positive.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "sequencer-authoring-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/sequencer-authoring-negative.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "sequencer-authoring-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/sequencer-authoring-undo_redo.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "sequencer-authoring-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/sequencer-authoring-save_reopen.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "sequencer-authoring-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/sequencer-authoring-determinism.json",
"unitIds": [
"web-command:setSequencerStrips"
]
}
]
}
}

View File

@@ -0,0 +1,97 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "SEQUENCER-COMPOSITOR-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "deferred until user use; no behavioral acceptance claimed",
"result": {
"status": "ready",
"contractKind": "compilation_only",
"summary": "Native sequencer strip modifier, transition, color balance and compositor graph authoring; implementation phase only.",
"workflow": "Native sequencer strip modifier, transition, color balance and compositor graph authoring; implementation phase only.",
"sourceUnits": [
"web-command:setCompositorNodeGraph",
"web-command:setSequencerColorBalance",
"web-command:setSequencerStripModifiers",
"web-command:setSequencerTransitions"
],
"routeIds": [
"web-command:setCompositorNodeGraph",
"web-command:setSequencerColorBalance",
"web-command:setSequencerStripModifiers",
"web-command:setSequencerTransitions"
],
"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/sequencer/intern/modifiers/modifier.cc",
"blender-5.2.0/source/blender/compositor/cached_resources/intern/cached_mask.cc"
],
"changedFiles": [
"my-tools/prepare_wbv2_sequencer_compositor_workflow.py",
"web/app/src/app/App.tsx",
"web/protocol/sequencer.ts",
"web/protocol/compositor-commands.ts"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/compositor/cached_resources/intern/cached_mask.cc",
"blender-5.2.0/source/blender/sequencer/intern/modifiers/modifier.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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_sequencer_compositor_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/compositor-commands.ts",
"web/protocol/render-compositor-commands.ts",
"web/protocol/scene-ir.ts",
"web/protocol/sequencer.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
}
],
"cases": []
}
}

View File

@@ -0,0 +1,233 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "SEQUENCER-SCENE-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Source scene selection with native View Layer initialization and preserved effect ranges",
"workflow": "Select another scene, create a scene strip, move, mute and remove it while preserving source-scene and existing media references through undo, redo and save/reopen",
"sourceUnits": [
"web-command:setSequencerStrips"
],
"routeIds": [
"web-command:setSequencerStrips"
],
"sourceReferences": [
"blender-5.2.0/source/blender/blenkernel/intern/idtype.cc",
"blender-5.2.0/source/blender/blenkernel/intern/sound.cc",
"blender-5.2.0/source/blender/editors/space_sequencer/sequencer_add_menu_scene.cc",
"blender-5.2.0/source/blender/sequencer/intern/sequencer.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_add.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_edit.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_time.cc",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_headless_fallback.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp"
],
"changedFiles": [
"blender-5.2.0/source/blender/blenkernel/intern/idtype.cc",
"blender-5.2.0/source/blender/web_engine/web_engine_headless_fallback.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"my-tools/diagnose_local_scene_strips.mjs",
"my-tools/prepare_wbv2_scene_strip_workflow.py",
"tests/files/web/sequencer_scene_source.blend",
"web/app/src/app/App.tsx",
"web/tests/e2e/scene-strip-ui-production.spec.ts",
"web/tests/fixtures/create-sequencer-scene-input.py",
"web/tests/fixtures/scene-strip-main-snapshots.py"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/idtype.cc",
"blender-5.2.0/source/blender/blenkernel/intern/sound.cc",
"blender-5.2.0/source/blender/editors/space_sequencer/sequencer_add_menu_scene.cc",
"blender-5.2.0/source/blender/sequencer/intern/sequencer.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_add.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_edit.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_time.cc",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_headless_fallback.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/diagnose_local_scene_strips.mjs",
"my-tools/local-workflows/SEQUENCER-STILL-AUTHORING.json",
"my-tools/prepare_wbv2_scene_strip_workflow.py",
"my-tools/wbv2_runtime_contract.py",
"tests/files/web/sequencer_scene.blend",
"tests/files/web/sequencer_scene_source.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"tools/web/web-build-fingerprint.mjs",
"web/app/src/app/App.tsx",
"web/app/src/capabilities/blender-feature-route-catalog.json",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/sequencer/SequencerTimeline.ts",
"web/app/src/three-adapter/viewport.ts",
"web/app/src/workers/web-engine.worker.ts",
"web/app/vite.config.ts",
"web/package.json",
"web/playwright.config.ts",
"web/protocol/scene-ir.ts",
"web/protocol/sequencer.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/scene-strip-ui-production.spec.ts",
"web/tests/fixtures/create-sequencer-scene-input.py",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tests/fixtures/scene-strip-main-snapshots.py",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"checks": [
{
"id": "wasm-source-build",
"argv": [
"python3",
"my-tools/build_local_webengine.py"
],
"cwd": ".",
"kinds": [
"source_build"
],
"timeoutSeconds": 1200,
"continueOnFailure": true
},
{
"id": "native-minimal",
"argv": [
"node",
"my-tools/diagnose_local_scene_strips.mjs"
],
"cwd": ".",
"kinds": [
"unit"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 30,
"continueOnFailure": true
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build",
"native-minimal"
],
"timeoutSeconds": 300,
"continueOnFailure": true
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"BLENDER_BIN=/home/mes123456/workinf_Blender_Wasm/build_blender_native/bin/blender",
"WEB_TEST_PORT=5364",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/scene-strip-ui-production.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium",
"positive",
"negative",
"undo_redo",
"save_reopen",
"determinism"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"native-minimal"
],
"timeoutSeconds": 180,
"continueOnFailure": true
}
],
"cases": [
{
"id": "scene-strip-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "scene-strip-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "scene-strip-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "scene-strip-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "scene-strip-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:setSequencerStrips"
]
}
]
}
}

View File

@@ -0,0 +1,222 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "SEQUENCER-STILL-AUTHORING",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Native sequencer authoring requires independent behavioral validation",
"workflow": "Move, trim, split, mute and remove a still-image strip; preserve sound and effect resources; create and remove a META strip in native Main",
"sourceUnits": [
"web-command:setSequencerStrips"
],
"routeIds": [
"web-command:setSequencerStrips"
],
"sourceReferences": [
"blender-5.2.0/source/blender/sequencer/intern/sequencer.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_add.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_edit.cc",
"blender-5.2.0/source/blender/blenkernel/intern/idtype.cc",
"blender-5.2.0/source/blender/blenkernel/intern/sound.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_headless_fallback.cpp"
],
"changedFiles": [
"web/app/src/app/App.tsx",
"web/tests/e2e/sequencer-authoring-ui-production.spec.ts",
"web/tests/fixtures/sequencer-main-snapshots.py",
"my-tools/diagnose_local_sequencer.mjs",
"my-tools/prepare_wbv2_sequencer_workflow.py",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"blender-5.2.0/source/blender/blenkernel/intern/idtype.cc",
"blender-5.2.0/source/blender/web_engine/web_engine_headless_fallback.cpp"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/idtype.cc",
"blender-5.2.0/source/blender/blenkernel/intern/sound.cc",
"blender-5.2.0/source/blender/sequencer/intern/sequencer.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_add.cc",
"blender-5.2.0/source/blender/sequencer/intern/strip_edit.cc",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp",
"blender-5.2.0/source/blender/web_engine/web_engine_headless_fallback.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/diagnose_local_sequencer.mjs",
"my-tools/prepare_wbv2_sequencer_workflow.py",
"tests/files/web/sequencer_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"tools/web/web-build-fingerprint.mjs",
"web/app/src/app/App.tsx",
"web/app/src/capabilities/blender-feature-route-catalog.json",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/sequencer/SequencerTimeline.ts",
"web/app/src/workers/web-engine.worker.ts",
"web/app/vite.config.ts",
"web/package.json",
"web/playwright.config.ts",
"web/protocol/scene-ir.ts",
"web/protocol/sequencer.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/sequencer-authoring-ui-production.spec.ts",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tests/fixtures/sequencer-main-snapshots.py",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"checks": [
{
"id": "wasm-source-build",
"argv": [
"python3",
"my-tools/build_local_webengine.py"
],
"cwd": ".",
"kinds": [
"source_build"
],
"timeoutSeconds": 1200,
"continueOnFailure": true
},
{
"id": "native-minimal",
"argv": [
"node",
"my-tools/diagnose_local_sequencer.mjs"
],
"cwd": ".",
"kinds": [
"unit"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 30,
"continueOnFailure": true
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build",
"native-minimal"
],
"timeoutSeconds": 300,
"continueOnFailure": true
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"BLENDER_BIN=/home/mes123456/workinf_Blender_Wasm/build_blender_native/bin/blender",
"WEB_TEST_PORT=5358",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/sequencer-authoring-ui-production.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium",
"positive",
"negative",
"undo_redo",
"save_reopen",
"determinism"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"native-minimal"
],
"timeoutSeconds": 180,
"continueOnFailure": true
}
],
"cases": [
{
"id": "sequencer-authoring-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "sequencer-authoring-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "sequencer-authoring-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "sequencer-authoring-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:setSequencerStrips"
]
},
{
"id": "sequencer-authoring-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:setSequencerStrips"
]
}
]
}
}

View File

@@ -0,0 +1,228 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "SERVER-OPERATOR-JOB",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending fresh validation",
"result": {
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.js",
"build_web_blender6/bin/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.wasm"
],
"cases": [
{
"id": "server-http-positive",
"kind": "positive",
"checkId": "chromium-server-job",
"receipt": "unallocated/server-http-positive.json",
"unitIds": [
"operator:OBJECT_OT_add",
"operator:WM_OT_open_mainfile",
"operator:WM_OT_save_as_mainfile"
]
},
{
"id": "server-http-negative",
"kind": "negative",
"checkId": "chromium-server-job",
"receipt": "unallocated/server-http-negative.json",
"unitIds": [
"operator:OBJECT_OT_add",
"operator:WM_OT_open_mainfile",
"operator:WM_OT_save_as_mainfile"
]
},
{
"id": "server-http-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-server-job",
"receipt": "unallocated/server-http-undo_redo.json",
"unitIds": [
"operator:OBJECT_OT_add",
"operator:WM_OT_open_mainfile",
"operator:WM_OT_save_as_mainfile"
]
},
{
"id": "server-http-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-server-job",
"receipt": "unallocated/server-http-save_reopen.json",
"unitIds": [
"operator:OBJECT_OT_add",
"operator:WM_OT_open_mainfile",
"operator:WM_OT_save_as_mainfile"
]
},
{
"id": "server-http-determinism",
"kind": "determinism",
"checkId": "chromium-server-job",
"receipt": "unallocated/server-http-determinism.json",
"unitIds": [
"operator:OBJECT_OT_add",
"operator:WM_OT_open_mainfile",
"operator:WM_OT_save_as_mainfile"
]
}
],
"changedFiles": [
"web/tests/e2e/server-operator-native.spec.ts",
"my-tools/prepare_wbv2_server_operator_job_workflow.py"
],
"checks": [
{
"argv": [
"env",
"EM_CONFIG=/home/mes123456/workinf_Blender_Wasm/.emscripten-web",
"EM_LLVM_ROOT=/home/mes123456/workinf_Blender_Wasm/.emsdk/upstream/bin",
"EM_BINARYEN_ROOT=/home/mes123456/workinf_Blender_Wasm/.emsdk/upstream",
"EM_NODE_JS=/home/mes123456/workinf_Blender_Wasm/.emsdk/node/24.19.0_64bit/bin/node",
"EM_LLVM_ADD_VERSION=",
"EM_CLANG_ADD_VERSION=",
"cmake",
"--build",
"build_web_blender6",
"--target",
"web_engine",
"--parallel",
"4"
],
"cwd": ".",
"id": "wasm-source-build",
"kinds": [
"source_build"
],
"timeoutSeconds": 1200,
"continueOnFailure": true
},
{
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"id": "web-build",
"kinds": [
"typecheck"
],
"timeoutSeconds": 300,
"continueOnFailure": true,
"dependsOn": [
"wasm-source-build"
]
},
{
"id": "authoring-lint",
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx",
"tests/e2e/server-operator-native.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-server-job",
"argv": [
"env",
"WEB_TEST_PORT=5407",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/server-operator-native.spec.ts",
"--grep",
"catalog Add Object",
"--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
}
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/editors/object/object_ops.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/windowmanager/intern/wm_operators.cc",
"build_web_blender6/CMakeCache.txt",
"docs/web/deployment-contract.json",
"my-tools/prepare_wbv2_server_operator_job_workflow.py",
"tests/files/web/generated/WBV2-P2-003-MESH.EDIT_CORE.blend",
"tests/files/web/generated/WBV2-P24-001-OBJECT_OPERATIONS.MOVE_COLLECTION.blend",
"tests/files/web/generated/WBV2-P4-001-MODIFIER.DECLARED_SLICES.blend",
"tests/files/web/generated/WBV2P3005Library.blend",
"tools/web/check-deployment-http.mjs",
"tools/web/deployment-http-server.mjs",
"tools/web/emscripten-env.sh",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/server-job-isolation.mjs",
"tools/web/server-job-process.mjs",
"tools/web/server-job-resource-budget.mjs",
"tools/web/server-operator-job-server.mjs",
"tools/web/server-operator-job.py",
"tools/web/web-build-fingerprint.mjs",
"web/app/src/app/App.tsx",
"web/app/src/capabilities/blender-feature-route-catalog.json",
"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/scene-ir.ts",
"web/protocol/server-operator-job.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/server-blend-cross-abi.spec.ts",
"web/tests/e2e/server-operator-native.spec.ts",
"web/tests/e2e/server-operator-polling.spec.ts",
"web/tests/fixtures/server-main-snapshots.py",
"web/tests/fixtures/server-operator-runner.py",
"web/tests/unit/server-job-process.test.mjs",
"web/tests/unit/server-job-resource-budget.test.mjs",
"web/tests/unit/server-operator-http.test.mjs",
"web/tsconfig.json"
],
"routeIds": [
"operator:OBJECT_OT_add",
"operator:WM_OT_open_mainfile",
"operator:WM_OT_save_as_mainfile"
],
"sourceReferences": [
"blender-5.2.0/source/blender/editors/object/object_ops.cc",
"blender-5.2.0/source/blender/windowmanager/intern/wm_operators.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"
],
"sourceUnits": [
"operator:OBJECT_OT_add",
"operator:WM_OT_open_mainfile",
"operator:WM_OT_save_as_mainfile"
],
"status": "ready",
"summary": "Disposable HTTP Blender operator job mutates Main and writes fresh server receipts",
"workflow": "Submit catalog Add Object through a disposable deployment, poll native Blender, reject malformed properties, verify Main history, save/reopen and deterministic replay"
}
}

View File

@@ -0,0 +1,94 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "TRACKING-MASK-COVERAGE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "deferred until user use; no behavioral acceptance claimed",
"result": {
"status": "ready",
"contractKind": "compilation_only",
"summary": "Native tracking marker, solve and mask spline/point authoring through WebEngine Main; implementation phase only.",
"workflow": "Native tracking marker, solve and mask spline/point authoring through WebEngine Main; implementation phase only.",
"sourceUnits": [
"web-command:setMaskPoint",
"web-command:setMaskSpline",
"web-command:setTrackingMarkers",
"web-command:setTrackingSolve"
],
"routeIds": [
"web-command:setMaskPoint",
"web-command:setMaskSpline",
"web-command:setTrackingMarkers",
"web-command:setTrackingSolve"
],
"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/blenkernel/intern/movieclip.cc",
"blender-5.2.0/source/blender/editors/mask/mask_ops.cc"
],
"changedFiles": [
"my-tools/prepare_wbv2_tracking_mask_workflow.py",
"web/app/src/app/App.tsx",
"web/protocol/web-engine.ts"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/movieclip.cc",
"blender-5.2.0/source/blender/editors/mask/mask_ops.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",
"build_web_blender6/CMakeCache.txt",
"my-tools/build_local_webengine.py",
"my-tools/prepare_wbv2_tracking_mask_workflow.py",
"my-tools/wbv2_compilation_recipe.py",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.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/protocol/scene-ir.ts",
"web/protocol/tracking-mask.ts",
"web/protocol/web-engine.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": 1800
},
{
"id": "web-build",
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"kinds": [
"typecheck"
],
"dependsOn": [
"wasm-source-build"
],
"timeoutSeconds": 180
}
],
"cases": []
}
}

View File

@@ -0,0 +1,203 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "WEBUI-FONT-ASSETS",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Prepared local native authoring workflow; independent behavioral validation is mandatory",
"workflow": "Edit font layout, import a packed browser font and link it to text; reject missing links and preserve native Main through history and reopening",
"sourceUnits": [
"web-command:setFontAdvanced",
"web-command:importVFont",
"web-command:setFontLinks"
],
"routeIds": [
"web-command:setFontAdvanced",
"web-command:importVFont",
"web-command:setFontLinks"
],
"sourceReferences": [
"blender-5.2.0/source/blender/makesrna/intern/rna_curve.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_blend_reader.cpp"
],
"changedFiles": [
"web/tests/e2e/font-assets-ui-production.spec.ts",
"web/tests/fixtures/font-main-snapshots.py",
"web/tests/fixtures/native-ui-workflow.ts",
"web/app/src/app/App.tsx"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/release/datafiles/bfont.pfb",
"blender-5.2.0/source/blender/makesrna/intern/rna_curve.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/prepare_wbv2_authoring_batch.py",
"tests/files/web/nonmesh_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/sync-web-engine-runtime.mjs",
"tools/web/web-build-fingerprint.mjs",
"web/app/src/app/App.tsx",
"web/app/src/capabilities/blender-feature-route-catalog.json",
"web/app/src/engine-client/WebEngineClient.ts",
"web/app/src/fonts/external-vfont-import.ts",
"web/app/src/workers/web-engine.worker.ts",
"web/app/vite.config.ts",
"web/package.json",
"web/playwright.config.ts",
"web/protocol/animation-render-commands.ts",
"web/protocol/nonmesh-geometry-commands.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/font-assets-ui-production.spec.ts",
"web/tests/fixtures/font-main-snapshots.py",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm",
"web/app/public/vendor/blender/web_engine.js",
"web/app/public/wasm-module-manifest.json"
],
"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"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-authoring",
"argv": [
"env",
"BLENDER_BIN=/home/mes123456/workinf_Blender_Wasm/build_blender_native/bin/blender",
"WEB_TEST_PORT=5357",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/font-assets-ui-production.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium",
"positive",
"negative",
"undo_redo",
"save_reopen",
"determinism"
],
"dependsOn": [
"wasm-source-build",
"web-build"
],
"timeoutSeconds": 180,
"continueOnFailure": true
}
],
"cases": [
{
"id": "font-assets-positive",
"kind": "positive",
"checkId": "chromium-authoring",
"receipt": "unallocated/positive.json",
"unitIds": [
"web-command:setFontAdvanced",
"web-command:importVFont",
"web-command:setFontLinks"
]
},
{
"id": "font-assets-negative",
"kind": "negative",
"checkId": "chromium-authoring",
"receipt": "unallocated/negative.json",
"unitIds": [
"web-command:setFontLinks"
]
},
{
"id": "font-assets-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-authoring",
"receipt": "unallocated/undo_redo.json",
"unitIds": [
"web-command:setFontLinks"
]
},
{
"id": "font-assets-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-authoring",
"receipt": "unallocated/save_reopen.json",
"unitIds": [
"web-command:setFontAdvanced",
"web-command:importVFont",
"web-command:setFontLinks"
]
},
{
"id": "font-assets-determinism",
"kind": "determinism",
"checkId": "chromium-authoring",
"receipt": "unallocated/determinism.json",
"unitIds": [
"web-command:setFontAdvanced",
"web-command:importVFont",
"web-command:setFontLinks"
]
}
]
}
}

View File

@@ -0,0 +1,194 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "WEBUI-NLA-STRIP",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending native Main and Chromium validation",
"result": {
"status": "ready",
"summary": "Existing native NLA strip movement with Timeline UI and fresh native Main acceptance receipts",
"workflow": "Select an NLA track and strip, edit frame start, reject overlapping strips, undo/redo and save/reopen the native Main",
"sourceUnits": [
"rna-struct:NlaStrip"
],
"routeIds": [
"rna-struct:NlaStrip"
],
"sourceReferences": [
"blender-5.2.0/source/blender/makesrna/intern/rna_nla.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"
],
"changedFiles": [
"web/tests/e2e/nla-strip-ui-production.spec.ts",
"web/tests/fixtures/nla-main-snapshots.py"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/makesrna/intern/rna_nla.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",
"build_web_blender6/CMakeCache.txt",
"my-tools/prepare_wbv2_nla_workflow.py",
"tests/files/web/nla_time_mapping_scene.blend",
"tools/web/incremental-web-build.mjs",
"tools/web/run-incremental-typecheck.mjs",
"tools/web/web-build-fingerprint.mjs",
"web/app/src/app/App.tsx",
"web/app/src/capabilities/blender-feature-route-catalog.json",
"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/animation-render-commands.ts",
"web/protocol/nla.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/nla-strip-ui-production.spec.ts",
"web/tests/fixtures/nla-main-snapshots.py",
"web/tsconfig.json"
],
"artifacts": [
"build_blender_native/bin/blender",
"build_web_blender6/bin/web_engine.wasm",
"build_web_blender6/bin/web_engine.js",
"web/app/public/vendor/blender/web_engine.wasm"
],
"checks": [
{
"argv": [
"env",
"EM_CONFIG=/home/mes123456/workinf_Blender_Wasm/.emscripten-web",
"EM_LLVM_ROOT=/home/mes123456/workinf_Blender_Wasm/.emsdk/upstream/bin",
"EM_BINARYEN_ROOT=/home/mes123456/workinf_Blender_Wasm/.emsdk/upstream",
"EM_NODE_JS=/home/mes123456/workinf_Blender_Wasm/.emsdk/node/24.19.0_64bit/bin/node",
"EM_LLVM_ADD_VERSION=",
"EM_CLANG_ADD_VERSION=",
"cmake",
"--build",
"build_web_blender6",
"--target",
"web_engine",
"--parallel",
"4"
],
"cwd": ".",
"id": "wasm-source-build",
"kinds": [
"source_build"
],
"timeoutSeconds": 1200,
"continueOnFailure": true
},
{
"argv": [
"node",
"tools/web/incremental-web-build.mjs"
],
"cwd": ".",
"id": "web-build",
"kinds": [
"typecheck"
],
"timeoutSeconds": 300,
"continueOnFailure": true,
"dependsOn": [
"wasm-source-build"
]
},
{
"id": "nla-ui-lint",
"kinds": [
"lint"
],
"argv": [
"node",
"node_modules/eslint/bin/eslint.js",
"app/src/app/App.tsx"
],
"cwd": "web",
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-nla-ui",
"kinds": [
"chromium",
"positive",
"negative",
"undo_redo",
"save_reopen",
"determinism"
],
"argv": [
"env",
"BLENDER_BIN=/home/mes123456/workinf_Blender_Wasm/build_blender_native/bin/blender",
"WEB_TEST_PORT=5337",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/nla-strip-ui-production.spec.ts",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"dependsOn": [
"wasm-source-build",
"web-build"
],
"timeoutSeconds": 120,
"continueOnFailure": true
}
],
"cases": [
{
"id": "nla-strip-positive",
"kind": "positive",
"checkId": "chromium-nla-ui",
"receipt": "unallocated/nla-strip-positive.json",
"unitIds": [
"rna-struct:NlaStrip"
]
},
{
"id": "nla-strip-negative",
"kind": "negative",
"checkId": "chromium-nla-ui",
"receipt": "unallocated/nla-strip-negative.json",
"unitIds": [
"rna-struct:NlaStrip"
]
},
{
"id": "nla-strip-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-nla-ui",
"receipt": "unallocated/nla-strip-undo_redo.json",
"unitIds": [
"rna-struct:NlaStrip"
]
},
{
"id": "nla-strip-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-nla-ui",
"receipt": "unallocated/nla-strip-save_reopen.json",
"unitIds": [
"rna-struct:NlaStrip"
]
},
{
"id": "nla-strip-determinism",
"kind": "determinism",
"checkId": "chromium-nla-ui",
"receipt": "unallocated/nla-strip-determinism.json",
"unitIds": [
"rna-struct:NlaStrip"
]
}
]
}
}

View File

@@ -0,0 +1,457 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "WEBUI-NONMESH-ADVANCED",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Non-mesh panel edits use native geometry and retain the active data owner",
"workflow": "Edit Bezier handles, replace Curve splines, toggle Surface topology and delete non-mesh data; validate each route through desktop Main readback, rejection, history, persistence and replay",
"sourceUnits": [
"web-command:setCurveHandle",
"web-command:setCurveSplines",
"web-command:setSurfaceTopology",
"web-command:deleteNonMeshData"
],
"routeIds": [
"web-command:setCurveHandle",
"web-command:setCurveSplines",
"web-command:setSurfaceTopology",
"web-command:deleteNonMeshData"
],
"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/blenkernel/intern/curve.cc"
],
"changedFiles": [
"web/tests/e2e/nonmesh-advanced-ui-production.spec.ts",
"web/tests/fixtures/nonmesh-advanced-main-snapshots.py",
"my-tools/prepare_wbv2_nonmesh_workflow.py",
"web/app/src/app/App.tsx",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp"
],
"dependencies": [
".emscripten-web",
"blender-5.2.0/source/blender/blenkernel/intern/curve.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/prepare_wbv2_nonmesh_workflow.py",
"tests/files/web/nonmesh_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/nonmesh-binary.ts",
"web/protocol/nonmesh-geometry-commands.ts",
"web/protocol/scene-ir.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/nonmesh-advanced-ui-production.spec.ts",
"web/tests/fixtures/native-ui-workflow.ts",
"web/tests/fixtures/nonmesh-advanced-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"
],
"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/nonmesh-advanced-ui-production.spec.ts"
],
"cwd": "web",
"kinds": [
"lint"
],
"timeoutSeconds": 90,
"continueOnFailure": true
},
{
"id": "chromium-panel",
"argv": [
"env",
"WEB_TEST_PORT=5379",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/nonmesh-advanced-ui-production.spec.ts",
"--grep",
"nonmesh panel ",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"authoring-lint"
],
"timeoutSeconds": 75,
"continueOnFailure": true
},
{
"id": "chromium-handle",
"argv": [
"env",
"WEB_TEST_PORT=5379",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/nonmesh-advanced-ui-production.spec.ts",
"--grep",
"nonmesh handle ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-splines",
"argv": [
"env",
"WEB_TEST_PORT=5379",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/nonmesh-advanced-ui-production.spec.ts",
"--grep",
"nonmesh splines ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-surface",
"argv": [
"env",
"WEB_TEST_PORT=5379",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/nonmesh-advanced-ui-production.spec.ts",
"--grep",
"nonmesh surface ",
"--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": 75,
"continueOnFailure": true
},
{
"id": "chromium-delete",
"argv": [
"env",
"WEB_TEST_PORT=5379",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/nonmesh-advanced-ui-production.spec.ts",
"--grep",
"nonmesh 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": 75,
"continueOnFailure": true
}
],
"cases": [
{
"id": "nonmesh-handle-positive",
"kind": "positive",
"checkId": "chromium-handle",
"receipt": "unallocated/handle-positive.json",
"unitIds": [
"web-command:setCurveHandle"
]
},
{
"id": "nonmesh-handle-negative",
"kind": "negative",
"checkId": "chromium-handle",
"receipt": "unallocated/handle-negative.json",
"unitIds": [
"web-command:setCurveHandle"
]
},
{
"id": "nonmesh-handle-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-handle",
"receipt": "unallocated/handle-undo_redo.json",
"unitIds": [
"web-command:setCurveHandle"
]
},
{
"id": "nonmesh-handle-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-handle",
"receipt": "unallocated/handle-save_reopen.json",
"unitIds": [
"web-command:setCurveHandle"
]
},
{
"id": "nonmesh-handle-determinism",
"kind": "determinism",
"checkId": "chromium-handle",
"receipt": "unallocated/handle-determinism.json",
"unitIds": [
"web-command:setCurveHandle"
]
},
{
"id": "nonmesh-splines-positive",
"kind": "positive",
"checkId": "chromium-splines",
"receipt": "unallocated/splines-positive.json",
"unitIds": [
"web-command:setCurveSplines"
]
},
{
"id": "nonmesh-splines-negative",
"kind": "negative",
"checkId": "chromium-splines",
"receipt": "unallocated/splines-negative.json",
"unitIds": [
"web-command:setCurveSplines"
]
},
{
"id": "nonmesh-splines-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-splines",
"receipt": "unallocated/splines-undo_redo.json",
"unitIds": [
"web-command:setCurveSplines"
]
},
{
"id": "nonmesh-splines-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-splines",
"receipt": "unallocated/splines-save_reopen.json",
"unitIds": [
"web-command:setCurveSplines"
]
},
{
"id": "nonmesh-splines-determinism",
"kind": "determinism",
"checkId": "chromium-splines",
"receipt": "unallocated/splines-determinism.json",
"unitIds": [
"web-command:setCurveSplines"
]
},
{
"id": "nonmesh-surface-positive",
"kind": "positive",
"checkId": "chromium-surface",
"receipt": "unallocated/surface-positive.json",
"unitIds": [
"web-command:setSurfaceTopology"
]
},
{
"id": "nonmesh-surface-negative",
"kind": "negative",
"checkId": "chromium-surface",
"receipt": "unallocated/surface-negative.json",
"unitIds": [
"web-command:setSurfaceTopology"
]
},
{
"id": "nonmesh-surface-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-surface",
"receipt": "unallocated/surface-undo_redo.json",
"unitIds": [
"web-command:setSurfaceTopology"
]
},
{
"id": "nonmesh-surface-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-surface",
"receipt": "unallocated/surface-save_reopen.json",
"unitIds": [
"web-command:setSurfaceTopology"
]
},
{
"id": "nonmesh-surface-determinism",
"kind": "determinism",
"checkId": "chromium-surface",
"receipt": "unallocated/surface-determinism.json",
"unitIds": [
"web-command:setSurfaceTopology"
]
},
{
"id": "nonmesh-delete-positive",
"kind": "positive",
"checkId": "chromium-delete",
"receipt": "unallocated/delete-positive.json",
"unitIds": [
"web-command:deleteNonMeshData"
]
},
{
"id": "nonmesh-delete-negative",
"kind": "negative",
"checkId": "chromium-delete",
"receipt": "unallocated/delete-negative.json",
"unitIds": [
"web-command:deleteNonMeshData"
]
},
{
"id": "nonmesh-delete-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-delete",
"receipt": "unallocated/delete-undo_redo.json",
"unitIds": [
"web-command:deleteNonMeshData"
]
},
{
"id": "nonmesh-delete-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-delete",
"receipt": "unallocated/delete-save_reopen.json",
"unitIds": [
"web-command:deleteNonMeshData"
]
},
{
"id": "nonmesh-delete-determinism",
"kind": "determinism",
"checkId": "chromium-delete",
"receipt": "unallocated/delete-determinism.json",
"unitIds": [
"web-command:deleteNonMeshData"
]
}
]
}
}

View File

@@ -0,0 +1,285 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "WEBUI-OPERATOR-PALETTE",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending fresh validation",
"result": {
"status": "ready",
"summary": "F3 search, native property editing and persistence with same-file reopen",
"workflow": "Search a native cube operator through F3, reject an oversized name, create geometry, undo/redo, reopen and replay after reloading the app; retain the separate server remesh behavior checks",
"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/operator-palette-native.spec.ts",
"my-tools/prepare_wbv2_webui_operator_palette_workflow.py",
"web/app/src/app/App.tsx"
],
"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/NATIVE-OPERATOR-BRIDGE.json",
"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",
"my-tools/prepare_wbv2_webui_operator_palette_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/operator-palette-native.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-palette",
"argv": [
"env",
"WEB_TEST_PORT=5395",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"tests/e2e/operator-palette-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
}
],
"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": "operator-palette-positive",
"kind": "positive",
"checkId": "chromium-palette",
"receipt": "unallocated/operator-palette-positive.json",
"unitIds": [
"web-command:createPrimitive",
"operator:WM_OT_open_mainfile"
]
},
{
"id": "operator-palette-negative",
"kind": "negative",
"checkId": "chromium-palette",
"receipt": "unallocated/operator-palette-negative.json",
"unitIds": [
"web-command:createPrimitive",
"operator:WM_OT_open_mainfile"
]
},
{
"id": "operator-palette-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-palette",
"receipt": "unallocated/operator-palette-undo_redo.json",
"unitIds": [
"web-command:createPrimitive",
"operator:WM_OT_open_mainfile"
]
},
{
"id": "operator-palette-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-palette",
"receipt": "unallocated/operator-palette-save_reopen.json",
"unitIds": [
"web-command:createPrimitive",
"operator:WM_OT_open_mainfile"
]
},
{
"id": "operator-palette-determinism",
"kind": "determinism",
"checkId": "chromium-palette",
"receipt": "unallocated/operator-palette-determinism.json",
"unitIds": [
"web-command:createPrimitive",
"operator:WM_OT_open_mainfile"
]
}
]
}
}

View File

@@ -0,0 +1,292 @@
{
"schemaVersion": 1,
"task": "WBV2-P1424-001",
"job": "WEBUI-SCULPT",
"parentSha256": "46a3ce65d56747da8684af422a1a94540612c767a6dcc42da7939930731399d5",
"acceptance": "pending independent local validation",
"result": {
"status": "ready",
"summary": "Sculpt panel separates persisted face sets from transient active-face state",
"workflow": "Apply a DRAW stroke; edit mask and face sets in the panel; independently verify each native route through rejection, history, save/reopen and replay",
"sourceUnits": [
"web-command:sculptStroke",
"web-command:setSculptMeshAttributes"
],
"routeIds": [
"web-command:sculptStroke",
"web-command:setSculptMeshAttributes"
],
"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"
],
"changedFiles": [
"web/tests/e2e/sculpt-authoring-ui-production.spec.ts",
"web/protocol/paint.ts",
"my-tools/prepare_wbv2_sculpt_workflow.py"
],
"dependencies": [
".emscripten-web",
"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/prepare_wbv2_sculpt_workflow.py",
"tests/files/web/basic_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/paint.ts",
"web/protocol/scene-ir.ts",
"web/protocol/sculpt.ts",
"web/protocol/web-engine.ts",
"web/tests/e2e/sculpt-authoring-ui-production.spec.ts",
"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"
],
"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-panel",
"argv": [
"env",
"WEB_TEST_PORT=5376",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/sculpt-authoring-ui-production.spec.ts",
"--grep",
"sculpt panel",
"--workers=1",
"--max-failures=1"
],
"cwd": "web",
"kinds": [
"chromium"
],
"dependsOn": [
"wasm-source-build",
"web-build",
"authoring-lint"
],
"timeoutSeconds": 60,
"continueOnFailure": true
},
{
"id": "chromium-stroke",
"argv": [
"env",
"WEB_TEST_PORT=5376",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/sculpt-authoring-ui-production.spec.ts",
"--grep",
"sculpt stroke",
"--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": 60,
"continueOnFailure": true
},
{
"id": "chromium-attributes",
"argv": [
"env",
"WEB_TEST_PORT=5376",
"node",
"node_modules/@playwright/test/cli.js",
"test",
"--config",
"playwright.config.ts",
"tests/e2e/sculpt-authoring-ui-production.spec.ts",
"--grep",
"sculpt attributes",
"--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": 60,
"continueOnFailure": true
}
],
"cases": [
{
"id": "sculpt-stroke-positive",
"kind": "positive",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-positive.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-stroke-negative",
"kind": "negative",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-negative.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-stroke-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-undo_redo.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-stroke-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-save_reopen.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-stroke-determinism",
"kind": "determinism",
"checkId": "chromium-stroke",
"receipt": "unallocated/stroke-determinism.json",
"unitIds": [
"web-command:sculptStroke"
]
},
{
"id": "sculpt-attributes-positive",
"kind": "positive",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-positive.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"id": "sculpt-attributes-negative",
"kind": "negative",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-negative.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"id": "sculpt-attributes-undo_redo",
"kind": "undo_redo",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-undo_redo.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"id": "sculpt-attributes-save_reopen",
"kind": "save_reopen",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-save_reopen.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
},
{
"id": "sculpt-attributes-determinism",
"kind": "determinism",
"checkId": "chromium-attributes",
"receipt": "unallocated/attributes-determinism.json",
"unitIds": [
"web-command:setSculptMeshAttributes"
]
}
]
}
}