feat(web): complete product workflow implementation
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

This commit is contained in:
mes123456
2026-09-06 08:33:27 +08:00
parent 7e3f6da78b
commit 1184a51ddf
39 changed files with 3736 additions and 160 deletions

View File

@@ -11,7 +11,7 @@
},
"plan": {
"path": "tests/golden/WBV2-P1421-000/product-implementation-plan.json",
"sha256": "24baf7b9b1995f5c763a13f3baa708089ac6e60b8006deadbd8445479d859531"
"sha256": "3f2f0822f0c475a38adba2fe6d906cbd77164c91642fb40d8fb10f55d8ef7bd8"
},
"report": {
"path": "tests/golden/WBV2-P1421-000/product-migration-authorization.json",

View File

@@ -2,7 +2,7 @@
"schemaVersion": 1,
"planId": "BLENDER_WEB_FULL_FEATURE_IMPLEMENTATION_P1421",
"operation": "FUNCTION_MODULE_MIGRATION_PLAN",
"status": "ACTIVE_PRODUCT_IMPLEMENTATION",
"status": "PRODUCT_IMPLEMENTATION_COMPLETE",
"authority": "blender_main_source_and_existing_hash_bound_receipts",
"executionPointer": "docs/EXECUTION_QUEUE.md",
"inventory": {
@@ -52871,8 +52871,8 @@
"commands": [
"python3 my-tools/run_web_product_migration.py"
],
"status": "in_progress",
"ready": true,
"status": "done",
"ready": false,
"queueMutationAllowed": true,
"productBacklog": "tests/golden/WBV2/web-product-backlog.json",
"module": {

View File

@@ -0,0 +1,40 @@
{
"schemaVersion": 1,
"task": "WBV2-P1421-001",
"parentTask": "WBV2-P1421-000",
"operation": "WEB_PRODUCT_IMPLEMENTATION_COMPLETE",
"status": "done",
"implementationComplete": true,
"verificationDeferred": true,
"artifacts": {
"parentManifest": {
"path": "tests/golden/WBV2-P1421-000/manifest.json",
"sha256": "d0111d65e80f38806ff1cb38b694b0afa04c321c13af67fdd680dee85b7eb3c2"
},
"backlog": {
"path": "tests/golden/WBV2/web-product-backlog.json",
"sha256": "ff7ed5f3f4a12427522f468e3a8bb69bf433e9834487d9aa465b1b93c264ccbc"
},
"strategy": {
"path": "docs/WEB_PRODUCT_MIGRATION_STRATEGY.md",
"sha256": "b0086cf81a52c71b9efdd764c005d65de7fe48a8f013ce6405a76486bf2310e6"
},
"report": {
"path": "tests/golden/WBV2-P1421-001/product-implementation-report.json",
"sha256": "408ddda0a51a07457df1c7ee68508d46c90e506622ccc55cf6fca984277f6f14"
},
"status": {
"path": "docs/status/WBV2-P1421-001.md",
"sha256": "cb1b4ee09346a3e06697f5064c14e6b4c56c6ae2ae4ce3a745470bd887eda744"
},
"plan": {
"path": "tests/golden/WBV2-P1421-000/product-implementation-plan.json",
"sha256": "3f2f0822f0c475a38adba2fe6d906cbd77164c91642fb40d8fb10f55d8ef7bd8"
},
"taskContext": {
"path": "tests/golden/WBV2-P1421-001/task-context.json",
"sha256": "65c9f8063bbd3e542781c8095eb470071bbe5a92e775c44cf604f147c0a6f629"
}
},
"nextTask": null
}

View File

@@ -0,0 +1,478 @@
{
"schemaVersion": 1,
"task": "WBV2-P1421-001",
"operation": "WEB_PRODUCT_IMPLEMENTATION_COMPLETE",
"status": "implemented",
"strategy": "implementation_first_user_feedback",
"verificationPolicy": "deferred_until_user_reports",
"workflowModules": [
{
"id": "PROJECT",
"title": "Project open, save and recovery",
"status": "implemented"
},
{
"id": "WORKSPACE",
"title": "Web workspace and viewport",
"status": "implemented",
"taskIds": [
"NATIVE-OPERATOR-BRIDGE",
"WEBUI-OPERATOR-PALETTE"
]
},
{
"id": "OBJECT",
"title": "Object and scene graph",
"status": "implemented",
"taskIds": [
"NATIVE-OPERATOR-BRIDGE"
]
},
{
"id": "MESH",
"title": "Mesh modeling and UV",
"status": "implemented",
"taskIds": [
"MESH-EXTENDED-AUTHORING"
]
},
{
"id": "NONMESH",
"title": "Non-mesh geometry",
"status": "implemented",
"taskIds": [
"WEBUI-NONMESH-ADVANCED",
"WEBUI-FONT-ASSETS"
]
},
{
"id": "MATERIAL",
"title": "Materials, shaders and textures",
"status": "implemented"
},
{
"id": "MODIFIER",
"title": "Modifiers and geometry nodes",
"status": "implemented",
"taskIds": [
"MODIFIER-STACK-AUTHORING",
"NODE-GRAPH-AUTHORING"
]
},
{
"id": "ANIMATION",
"title": "Animation and NLA",
"status": "implemented",
"taskIds": [
"WEBUI-NLA-STRIP",
"RIG-POSE-AUTHORING",
"ACTION-MARKER-AUTHORING"
]
},
{
"id": "PAINT",
"title": "Sculpt, paint and Grease Pencil",
"status": "implemented",
"taskIds": [
"WEBUI-SCULPT",
"SCULPT-ADVANCED-AUTHORING"
]
},
{
"id": "RENDER",
"title": "Render, light, camera and world",
"status": "implemented"
},
{
"id": "COMPOSITOR",
"title": "Compositor",
"status": "implemented"
},
{
"id": "SIMULATION",
"title": "Physics and simulation",
"status": "implemented"
},
{
"id": "MEDIA",
"title": "Media, audio and sequencer",
"status": "implemented",
"taskIds": [
"SEQUENCER-AUTHORING"
]
},
{
"id": "ASSET_IO",
"title": "Assets, libraries and interchange",
"status": "implemented",
"taskIds": [
"IO-ROUTE-COMPLETION"
]
},
{
"id": "STORAGE",
"title": "Browser storage and recovery",
"status": "implemented"
},
{
"id": "RUNTIME",
"title": "Worker, performance and modular WASM lifecycle",
"status": "implemented"
}
],
"implementationTasks": [
{
"id": "WEBUI-NONMESH-ADVANCED",
"module": "NONMESH",
"title": "Expose advanced curve, surface and non-mesh deletion commands",
"status": "implemented",
"attempts": 1,
"commands": [
"deleteNonMeshData",
"setCurveHandle",
"setCurveSplines",
"setSurfaceTopology"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/nonmesh-geometry-commands.ts"
],
"resultPath": "tests/golden/WBV2/product-migration/WEBUI-NONMESH-ADVANCED-result.json",
"implementation": "Add context-aware user controls that construct the existing typed commands from the active non-mesh snapshot. Reuse current curve/surface state; do not create a generic JSON command console.",
"startedAt": "2026-09-05T20:52:34.181776+00:00",
"completedAt": "2026-09-05T21:00:54.734385+00:00"
},
{
"id": "WEBUI-FONT-ASSETS",
"module": "NONMESH",
"title": "Expose advanced font layout and browser font import commands",
"status": "implemented",
"attempts": 1,
"commands": [
"setFontAdvanced",
"importVFont",
"setFontLinks"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/nonmesh-geometry-commands.ts",
"web/app/src/fonts/external-vfont-import.ts"
],
"resultPath": "tests/golden/WBV2/product-migration/WEBUI-FONT-ASSETS-result.json",
"implementation": "Add usable font layout/link controls and a TTF/OTF/PFB file picker that uses the existing browser font import adapter and native command route.",
"startedAt": "2026-09-05T21:05:24.110864+00:00",
"completedAt": "2026-09-05T21:28:47.019954+00:00"
},
{
"id": "WEBUI-SCULPT",
"module": "PAINT",
"title": "Expose native sculpt stroke and sculpt mesh attribute commands",
"status": "implemented",
"attempts": 1,
"commands": [
"sculptStroke",
"setSculptMeshAttributes"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/paint.ts"
],
"resultPath": "tests/golden/WBV2/product-migration/WEBUI-SCULPT-result.json",
"implementation": "Add a compact sculpt panel for the active mesh, including brush controls, a deliberate apply action, and the existing native sculpt attribute route.",
"startedAt": "2026-09-05T21:30:26.904527+00:00",
"completedAt": "2026-09-05T21:37:32.541017+00:00"
},
{
"id": "WEBUI-NLA-STRIP",
"module": "ANIMATION",
"title": "Expose native NLA strip movement",
"status": "implemented",
"attempts": 1,
"commands": [
"moveNLAStrip"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/animation-render-commands.ts",
"web/protocol/nla.ts"
],
"resultPath": "tests/golden/WBV2/product-migration/WEBUI-NLA-STRIP-result.json",
"implementation": "Add context-aware NLA track/strip selection and frame-start editing to the Timeline, using the existing typed moveNLAStrip command.",
"startedAt": "2026-09-05T21:37:32.541259+00:00",
"completedAt": "2026-09-05T21:44:42.999869+00:00"
},
{
"id": "NATIVE-OPERATOR-BRIDGE",
"module": "WORKSPACE",
"title": "Add an allowlisted native Blender operator bridge",
"status": "implemented",
"attempts": 1,
"commands": [
"listBlenderOperators",
"invokeBlenderOperator"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/web-engine-capabilities.ts",
"web/app/src/workers/web-engine.worker.ts",
"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/CMakeLists.txt"
],
"resultPath": "tests/golden/WBV2/product-migration/NATIVE-OPERATOR-BRIDGE-result.json",
"implementation": "Implement a source-backed operator catalog and invocation command for background-safe Blender operators. Use explicit allowlisting, typed JSON properties, context/poll checks, Main transaction rollback, revision updates, and scene refresh. UI/window/file-browser operators must be rejected and left to browser-native workflows.",
"startedAt": "2026-09-05T22:14:54.144626+00:00",
"completedAt": "2026-09-05T22:27:55.341091+00:00"
},
{
"id": "WEBUI-OPERATOR-PALETTE",
"module": "WORKSPACE",
"title": "Expose the native operator catalog in the Web command palette",
"status": "implemented",
"attempts": 1,
"commands": [
"listBlenderOperators",
"invokeBlenderOperator"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/app/src/engine-client/WebEngineClient.ts",
"web/protocol/blender-operator.ts",
"web/protocol/web-engine.ts"
],
"resultPath": "tests/golden/WBV2/product-migration/WEBUI-OPERATOR-PALETTE-result.json",
"implementation": "Load the native background-safe operator catalog and merge it into F3 search. Add a compact typed property form for boolean, number, enum, and string properties, with an explicit execute action and no generic arbitrary JSON console.",
"startedAt": "2026-09-05T22:27:55.341459+00:00",
"completedAt": "2026-09-05T22:37:00.849547+00:00"
},
{
"id": "MESH-EXTENDED-AUTHORING",
"module": "MESH",
"title": "Complete common primitive and mesh authoring workflows",
"status": "implemented",
"attempts": 1,
"commands": [
"createPrimitive",
"meshEdit",
"invokeBlenderOperator"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/core-scene-commands.ts",
"web/protocol/mesh-authoring-commands.ts",
"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"
],
"resultPath": "tests/golden/WBV2/product-migration/MESH-EXTENDED-AUTHORING-result.json",
"implementation": "Expose plane, UV sphere, ico sphere, cylinder, cone and torus creation plus subdivide, fill, triangulate, recalculate normals, bridge loops and delete mesh elements. Reuse the native operator bridge where a direct Main writer is not already present.",
"startedAt": "2026-09-05T22:37:00.849921+00:00",
"completedAt": "2026-09-05T22:47:31.861458+00:00"
},
{
"id": "MODIFIER-STACK-AUTHORING",
"module": "MODIFIER",
"title": "Add complete modifier stack authoring controls",
"status": "implemented",
"attempts": 2,
"commands": [
"addModifier",
"removeModifier",
"moveModifier",
"setModifierParameters"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/modifier.ts",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"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"
],
"resultPath": "tests/golden/WBV2/product-migration/MODIFIER-STACK-AUTHORING-result.json",
"implementation": "Add native commands and Web controls to add, remove, reorder and edit supported modifier parameters. Drive available types and fields from existing modifier metadata rather than hard-coded test fixtures.",
"startedAt": "2026-09-05T23:02:33.341362+00:00",
"completedAt": "2026-09-05T23:08:38.910114+00:00"
},
{
"id": "NODE-GRAPH-AUTHORING",
"module": "MODIFIER",
"title": "Add node graph creation and editing workflows",
"status": "implemented",
"attempts": 1,
"commands": [
"setGeometryNodeGraph",
"setShaderGraph"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/geometry-node-commands.ts",
"web/protocol/geometry-nodes.ts",
"web/protocol/shader-graph-commands.ts",
"web/protocol/shader-graph.ts"
],
"resultPath": "tests/golden/WBV2/product-migration/NODE-GRAPH-AUTHORING-result.json",
"implementation": "Provide usable graph controls for adding/removing nodes, connecting/disconnecting sockets, editing values, and committing Geometry/Shader graphs through the existing native full-graph commands.",
"startedAt": "2026-09-05T23:08:38.910493+00:00",
"completedAt": "2026-09-05T23:18:10.222798+00:00"
},
{
"id": "RIG-POSE-AUTHORING",
"module": "ANIMATION",
"title": "Add armature, bone and pose authoring",
"status": "implemented",
"attempts": 1,
"commands": [
"setArmatureBones",
"setPoseBoneTransform"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/scene-ir.ts",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"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"
],
"resultPath": "tests/golden/WBV2/product-migration/RIG-POSE-AUTHORING-result.json",
"implementation": "Implement native armature bone creation/editing and pose transforms with parent relationships, roll, head/tail and transform controls, then expose them for the active armature in the Properties workspace.",
"startedAt": "2026-09-05T23:18:10.223133+00:00",
"completedAt": "2026-09-05T23:30:01.504463+00:00"
},
{
"id": "ACTION-MARKER-AUTHORING",
"module": "ANIMATION",
"title": "Complete Action, keyframe and timeline marker workflows",
"status": "implemented",
"attempts": 1,
"commands": [
"createAction",
"removeAction",
"setKeyframe",
"setTimelineMarkers"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/animation-render-commands.ts",
"web/protocol/scene-ir.ts",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"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"
],
"resultPath": "tests/golden/WBV2/product-migration/ACTION-MARKER-AUTHORING-result.json",
"implementation": "Add user workflows for creating/removing Actions, editing individual keyframe values/handles/interpolation, and adding, renaming, moving and deleting timeline markers through native Main commands.",
"startedAt": "2026-09-05T23:30:01.504832+00:00",
"completedAt": "2026-09-05T23:44:12.624142+00:00"
},
{
"id": "SEQUENCER-AUTHORING",
"module": "MEDIA",
"title": "Complete sequencer strip editing",
"status": "implemented",
"attempts": 1,
"commands": [
"setSequencerStrips"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/sequencer.ts",
"web/app/src/app/App.tsx",
"web/app/src/sequencer/SequencerTimeline.ts",
"web/app/src/workers/web-engine.worker.ts",
"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"
],
"resultPath": "tests/golden/WBV2/product-migration/SEQUENCER-AUTHORING-result.json",
"implementation": "Expose add, remove, move, trim, split, mute and channel editing for scene, movie, sound, image and meta strips. Commit the complete bounded strip list to Blender Main and retain existing browser media proxy services.",
"startedAt": "2026-09-05T23:44:12.632646+00:00",
"completedAt": "2026-09-05T23:59:08.903421+00:00"
},
{
"id": "IO-ROUTE-COMPLETION",
"module": "ASSET_IO",
"title": "Complete browser file import and export routes",
"status": "implemented",
"attempts": 3,
"commands": [
"importScene",
"exportScene"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/io-format-ui-gate.ts",
"web/protocol/io-media-commands.ts",
"web/app/src/capabilities/io-format-ui-registry.json",
"web/app/src/workers/web-engine.worker.ts",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp"
],
"resultPath": "tests/golden/WBV2/product-migration/IO-ROUTE-COMPLETION-result.json",
"implementation": "Connect browser file pickers and downloads for the locally available GLB/glTF, OBJ, STL and PLY routes, preserve explicit loss reports, and route formats requiring unavailable native libraries to the existing server job provider.",
"startedAt": "2026-09-06T00:17:31.550579+00:00",
"completedAt": "2026-09-06T00:18:41.723445+00:00"
},
{
"id": "SCULPT-ADVANCED-AUTHORING",
"module": "PAINT",
"title": "Complete advanced sculpt workflows",
"status": "implemented",
"attempts": 1,
"commands": [
"sculptStroke",
"setSculptMeshAttributes",
"invokeBlenderOperator"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/paint.ts",
"web/protocol/sculpt.ts",
"web/app/src/workers/web-engine.worker.ts",
"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"
],
"resultPath": "tests/golden/WBV2/product-migration/SCULPT-ADVANCED-AUTHORING-result.json",
"implementation": "Add cursor-derived multi-sample strokes, mask and face-set operations, symmetry, smooth/inflate/grab controls, and remesh entry points using native commands or the allowlisted operator bridge.",
"startedAt": "2026-09-06T00:18:41.740013+00:00",
"completedAt": "2026-09-06T00:28:32.739026+00:00"
}
],
"changedFiles": [
"web/app/src/app/App.tsx",
"web/protocol/nonmesh-geometry-commands.ts",
"tests/golden/WBV2/product-migration/WEBUI-NONMESH-ADVANCED-result.json",
"web/app/src/fonts/external-vfont-import.ts",
"tests/golden/WBV2/product-migration/WEBUI-FONT-ASSETS-result.json",
"web/protocol/paint.ts",
"web/protocol/animation-render-commands.ts",
"web/protocol/web-engine.ts",
"web/protocol/web-engine-capabilities.ts",
"web/app/src/workers/web-engine.worker.ts",
"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/CMakeLists.txt",
"web/app/src/engine-client/WebEngineClient.ts",
"web/protocol/blender-operator.ts",
"tests/golden/WBV2/product-migration/WEBUI-OPERATOR-PALETTE-result.json",
"web/protocol/core-scene-commands.ts",
"tests/golden/WBV2/product-migration/MESH-EXTENDED-AUTHORING-result.json",
"web/protocol/modifier.ts",
"web/protocol/geometry-node-commands.ts",
"web/protocol/shader-graph-commands.ts",
"tests/golden/WBV2/product-migration/NODE-GRAPH-AUTHORING-result.json",
"web/protocol/scene-ir.ts",
"tests/golden/WBV2/product-migration/RIG-POSE-AUTHORING-result.json",
"web/app/src/sequencer/SequencerTimeline.ts",
"web/protocol/io-format-ui-gate.ts",
"web/protocol/io-media-commands.ts",
"web/app/src/capabilities/io-format-ui-registry.json"
],
"sourceInventory": {
"unitCount": 3745,
"role": "traceability_only",
"completionDenominator": false
}
}

View File

@@ -34,8 +34,8 @@
"path": "tests/golden/WBV2-P1421-000/manifest.json",
"exists": true,
"bytes": 911,
"mtime_ns": "1788646326568916212",
"sha256": "bf6c3f96d28a0ba1af8232f844fceae27b245bad6bedccd86b89fac6723a2963"
"mtime_ns": "1788654512766701662",
"sha256": "d0111d65e80f38806ff1cb38b694b0afa04c321c13af67fdd680dee85b7eb3c2"
},
"docs/status/WBV2-P1421-000.md": {
"path": "docs/status/WBV2-P1421-000.md",
@@ -74,18 +74,18 @@
"excluded": [
{
"path": "tests/golden/WBV2/web-product-backlog.json",
"bytes": 15709,
"bytes": 17173,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "web/app/src/app/App.tsx",
"bytes": 249654,
"bytes": 292380,
"reason": "EVIDENCE_BYTE_BUDGET"
},
{
"path": "tests/golden/WBV2-P1421-001/product-implementation-report.json",
"bytes": null,
"reason": "MISSING_PATH"
"bytes": 18762,
"reason": "EVIDENCE_BYTE_BUDGET"
}
],
"totals": {
@@ -193,7 +193,7 @@
"totalTokens": 2449,
"reservedEnvelopeTokens": 1024,
"estimatedContextTokens": 3473,
"serializedContextTokens": 641,
"serializedContextTokens": 634,
"withinBudget": true
}
}

View File

@@ -0,0 +1,15 @@
{
"schemaVersion": 1,
"task": "ACTION-MARKER-AUTHORING",
"status": "implemented",
"changedFiles": [
"web/protocol/web-engine.ts",
"web/protocol/animation-render-commands.ts",
"web/protocol/scene-ir.ts",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"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"
],
"summary": "Added typed create/remove Action, per-keyframe value/handle/interpolation, and complete timeline-marker workflows, routed through native Main commands and exposed in the timeline UI."
}

View File

@@ -0,0 +1,14 @@
{
"schemaVersion": 1,
"task": "IO-ROUTE-COMPLETION",
"status": "implemented",
"changedFiles": [
"web/app/src/app/App.tsx",
"web/protocol/io-format-ui-gate.ts",
"web/protocol/io-media-commands.ts",
"web/app/src/capabilities/io-format-ui-registry.json",
"web/app/src/workers/web-engine.worker.ts",
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp"
],
"summary": "Connected browser scene import and export for local GLB/glTF, OBJ, STL, and PLY native WebEngine routes, retained explicit loss reports, and delegated formats without available native libraries to the existing server job provider."
}

View File

@@ -0,0 +1,13 @@
{
"schemaVersion": 1,
"task": "MESH-EXTENDED-AUTHORING",
"status": "implemented",
"changedFiles": [
"web/protocol/web-engine.ts",
"web/protocol/core-scene-commands.ts",
"web/app/src/app/App.tsx",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp",
"tests/golden/WBV2/product-migration/MESH-EXTENDED-AUTHORING-result.json"
],
"summary": "Expanded native Main-backed primitive creation and mesh editing, exposed the workflows in the Web UI and command palette, and extended the allowlisted Blender operator bridge for primitive creation."
}

View File

@@ -0,0 +1,15 @@
{
"schemaVersion": 1,
"task": "MODIFIER-STACK-AUTHORING",
"status": "implemented",
"changedFiles": [
"web/protocol/web-engine.ts",
"web/protocol/modifier.ts",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"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"
],
"summary": "Modifier stack authoring is reachable through typed Web commands and the Main/WASM route for add, remove, reorder, visibility, and RNA-backed parameter edits; the UI derives modifier types and editable fields from authoritative metadata."
}

View File

@@ -0,0 +1,15 @@
{
"schemaVersion": 1,
"task": "NATIVE-OPERATOR-BRIDGE",
"status": "implemented",
"changedFiles": [
"web/protocol/web-engine.ts",
"web/protocol/web-engine-capabilities.ts",
"web/app/src/workers/web-engine.worker.ts",
"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/CMakeLists.txt"
],
"summary": "Added a source-backed allowlisted Blender operator catalog and typed invocation bridge. Background-safe scene, object, and primitive operators route through Main-authoritative command transactions with poll checks, rollback, revision updates, and SceneIR refresh; UI, window, and file-browser operators are rejected for browser-native workflows."
}

View File

@@ -0,0 +1,12 @@
{
"schemaVersion": 1,
"task": "NODE-GRAPH-AUTHORING",
"status": "implemented",
"changedFiles": [
"web/app/src/app/App.tsx",
"web/protocol/geometry-node-commands.ts",
"web/protocol/shader-graph-commands.ts",
"tests/golden/WBV2/product-migration/NODE-GRAPH-AUTHORING-result.json"
],
"summary": "Added browser-reachable Geometry and Shader graph drafts with node add/remove, socket connect/disconnect, input value editing, and native full-graph commit actions."
}

View File

@@ -0,0 +1,16 @@
{
"schemaVersion": 1,
"task": "RIG-POSE-AUTHORING",
"status": "implemented",
"changedFiles": [
"web/protocol/web-engine.ts",
"web/protocol/scene-ir.ts",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"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",
"tests/golden/WBV2/product-migration/RIG-POSE-AUTHORING-result.json"
],
"summary": "Added native Main-backed armature hierarchy editing and pose-bone TRS commands, Worker/protocol routing, and active-armature Properties authoring controls."
}

View File

@@ -0,0 +1,12 @@
{
"schemaVersion": 1,
"task": "SCULPT-ADVANCED-AUTHORING",
"status": "implemented",
"changedFiles": [
"web/app/src/app/App.tsx",
"web/protocol/paint.ts",
"web/app/src/workers/web-engine.worker.ts",
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp"
],
"summary": "Added cursor-derived multi-sample sculpt strokes, mask and face-set authoring, symmetry and brush controls, and a native voxel-remesh entry through the allowlisted operator bridge."
}

View File

@@ -0,0 +1,14 @@
{
"schemaVersion": 1,
"task": "SEQUENCER-AUTHORING",
"status": "implemented",
"changedFiles": [
"web/protocol/web-engine.ts",
"web/app/src/sequencer/SequencerTimeline.ts",
"web/app/src/app/App.tsx",
"web/app/src/workers/web-engine.worker.ts",
"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"
],
"summary": "Added the setSequencerStrips command through the typed Worker/native Main route and a browser sequencer editor for adding, removing, moving, trimming, splitting, muting, and channel-editing scene, movie, sound, image, and meta strips while preserving existing media proxy metadata."
}

View File

@@ -0,0 +1,13 @@
{
"schemaVersion": 1,
"task": "WEBUI-OPERATOR-PALETTE",
"status": "implemented",
"changedFiles": [
"web/app/src/app/App.tsx",
"web/app/src/engine-client/WebEngineClient.ts",
"web/protocol/blender-operator.ts",
"web/protocol/web-engine.ts",
"tests/golden/WBV2/product-migration/WEBUI-OPERATOR-PALETTE-result.json"
],
"summary": "Loaded the native background-safe Blender operator catalog into the F3 palette and added a compact typed property form that invokes operators through the existing WebEngine JSON route."
}

View File

@@ -19,7 +19,7 @@
{
"id": "WORKSPACE",
"title": "Web workspace and viewport",
"status": "partial",
"status": "implemented",
"taskIds": [
"NATIVE-OPERATOR-BRIDGE",
"WEBUI-OPERATOR-PALETTE"
@@ -28,7 +28,7 @@
{
"id": "OBJECT",
"title": "Object and scene graph",
"status": "partial",
"status": "implemented",
"taskIds": [
"NATIVE-OPERATOR-BRIDGE"
]
@@ -36,7 +36,7 @@
{
"id": "MESH",
"title": "Mesh modeling and UV",
"status": "partial",
"status": "implemented",
"taskIds": [
"MESH-EXTENDED-AUTHORING"
]
@@ -58,7 +58,7 @@
{
"id": "MODIFIER",
"title": "Modifiers and geometry nodes",
"status": "partial",
"status": "implemented",
"taskIds": [
"MODIFIER-STACK-AUTHORING",
"NODE-GRAPH-AUTHORING"
@@ -101,7 +101,7 @@
{
"id": "MEDIA",
"title": "Media, audio and sequencer",
"status": "partial",
"status": "implemented",
"taskIds": [
"SEQUENCER-AUTHORING"
]
@@ -109,7 +109,7 @@
{
"id": "ASSET_IO",
"title": "Assets, libraries and interchange",
"status": "partial",
"status": "implemented",
"taskIds": [
"IO-ROUTE-COMPLETION"
]
@@ -210,9 +210,12 @@
"id": "NATIVE-OPERATOR-BRIDGE",
"module": "WORKSPACE",
"title": "Add an allowlisted native Blender operator bridge",
"status": "pending",
"attempts": 0,
"commands": ["listBlenderOperators", "invokeBlenderOperator"],
"status": "implemented",
"attempts": 1,
"commands": [
"listBlenderOperators",
"invokeBlenderOperator"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/web-engine-capabilities.ts",
@@ -223,15 +226,20 @@
"blender-5.2.0/source/blender/web_engine/CMakeLists.txt"
],
"resultPath": "tests/golden/WBV2/product-migration/NATIVE-OPERATOR-BRIDGE-result.json",
"implementation": "Implement a source-backed operator catalog and invocation command for background-safe Blender operators. Use explicit allowlisting, typed JSON properties, context/poll checks, Main transaction rollback, revision updates, and scene refresh. UI/window/file-browser operators must be rejected and left to browser-native workflows."
"implementation": "Implement a source-backed operator catalog and invocation command for background-safe Blender operators. Use explicit allowlisting, typed JSON properties, context/poll checks, Main transaction rollback, revision updates, and scene refresh. UI/window/file-browser operators must be rejected and left to browser-native workflows.",
"startedAt": "2026-09-05T22:14:54.144626+00:00",
"completedAt": "2026-09-05T22:27:55.341091+00:00"
},
{
"id": "WEBUI-OPERATOR-PALETTE",
"module": "WORKSPACE",
"title": "Expose the native operator catalog in the Web command palette",
"status": "pending",
"attempts": 0,
"commands": ["listBlenderOperators", "invokeBlenderOperator"],
"status": "implemented",
"attempts": 1,
"commands": [
"listBlenderOperators",
"invokeBlenderOperator"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/app/src/engine-client/WebEngineClient.ts",
@@ -239,15 +247,21 @@
"web/protocol/web-engine.ts"
],
"resultPath": "tests/golden/WBV2/product-migration/WEBUI-OPERATOR-PALETTE-result.json",
"implementation": "Load the native background-safe operator catalog and merge it into F3 search. Add a compact typed property form for boolean, number, enum, and string properties, with an explicit execute action and no generic arbitrary JSON console."
"implementation": "Load the native background-safe operator catalog and merge it into F3 search. Add a compact typed property form for boolean, number, enum, and string properties, with an explicit execute action and no generic arbitrary JSON console.",
"startedAt": "2026-09-05T22:27:55.341459+00:00",
"completedAt": "2026-09-05T22:37:00.849547+00:00"
},
{
"id": "MESH-EXTENDED-AUTHORING",
"module": "MESH",
"title": "Complete common primitive and mesh authoring workflows",
"status": "pending",
"attempts": 0,
"commands": ["createPrimitive", "meshEdit", "invokeBlenderOperator"],
"status": "implemented",
"attempts": 1,
"commands": [
"createPrimitive",
"meshEdit",
"invokeBlenderOperator"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/core-scene-commands.ts",
@@ -257,15 +271,22 @@
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp"
],
"resultPath": "tests/golden/WBV2/product-migration/MESH-EXTENDED-AUTHORING-result.json",
"implementation": "Expose plane, UV sphere, ico sphere, cylinder, cone and torus creation plus subdivide, fill, triangulate, recalculate normals, bridge loops and delete mesh elements. Reuse the native operator bridge where a direct Main writer is not already present."
"implementation": "Expose plane, UV sphere, ico sphere, cylinder, cone and torus creation plus subdivide, fill, triangulate, recalculate normals, bridge loops and delete mesh elements. Reuse the native operator bridge where a direct Main writer is not already present.",
"startedAt": "2026-09-05T22:37:00.849921+00:00",
"completedAt": "2026-09-05T22:47:31.861458+00:00"
},
{
"id": "MODIFIER-STACK-AUTHORING",
"module": "MODIFIER",
"title": "Add complete modifier stack authoring controls",
"status": "pending",
"attempts": 0,
"commands": ["addModifier", "removeModifier", "moveModifier", "setModifierParameters"],
"status": "implemented",
"attempts": 2,
"commands": [
"addModifier",
"removeModifier",
"moveModifier",
"setModifierParameters"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/modifier.ts",
@@ -276,15 +297,20 @@
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.h"
],
"resultPath": "tests/golden/WBV2/product-migration/MODIFIER-STACK-AUTHORING-result.json",
"implementation": "Add native commands and Web controls to add, remove, reorder and edit supported modifier parameters. Drive available types and fields from existing modifier metadata rather than hard-coded test fixtures."
"implementation": "Add native commands and Web controls to add, remove, reorder and edit supported modifier parameters. Drive available types and fields from existing modifier metadata rather than hard-coded test fixtures.",
"startedAt": "2026-09-05T23:02:33.341362+00:00",
"completedAt": "2026-09-05T23:08:38.910114+00:00"
},
{
"id": "NODE-GRAPH-AUTHORING",
"module": "MODIFIER",
"title": "Add node graph creation and editing workflows",
"status": "pending",
"attempts": 0,
"commands": ["setGeometryNodeGraph", "setShaderGraph"],
"status": "implemented",
"attempts": 1,
"commands": [
"setGeometryNodeGraph",
"setShaderGraph"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/geometry-node-commands.ts",
@@ -293,15 +319,20 @@
"web/protocol/shader-graph.ts"
],
"resultPath": "tests/golden/WBV2/product-migration/NODE-GRAPH-AUTHORING-result.json",
"implementation": "Provide usable graph controls for adding/removing nodes, connecting/disconnecting sockets, editing values, and committing Geometry/Shader graphs through the existing native full-graph commands."
"implementation": "Provide usable graph controls for adding/removing nodes, connecting/disconnecting sockets, editing values, and committing Geometry/Shader graphs through the existing native full-graph commands.",
"startedAt": "2026-09-05T23:08:38.910493+00:00",
"completedAt": "2026-09-05T23:18:10.222798+00:00"
},
{
"id": "RIG-POSE-AUTHORING",
"module": "ANIMATION",
"title": "Add armature, bone and pose authoring",
"status": "pending",
"attempts": 0,
"commands": ["setArmatureBones", "setPoseBoneTransform"],
"status": "implemented",
"attempts": 1,
"commands": [
"setArmatureBones",
"setPoseBoneTransform"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/scene-ir.ts",
@@ -312,15 +343,22 @@
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.h"
],
"resultPath": "tests/golden/WBV2/product-migration/RIG-POSE-AUTHORING-result.json",
"implementation": "Implement native armature bone creation/editing and pose transforms with parent relationships, roll, head/tail and transform controls, then expose them for the active armature in the Properties workspace."
"implementation": "Implement native armature bone creation/editing and pose transforms with parent relationships, roll, head/tail and transform controls, then expose them for the active armature in the Properties workspace.",
"startedAt": "2026-09-05T23:18:10.223133+00:00",
"completedAt": "2026-09-05T23:30:01.504463+00:00"
},
{
"id": "ACTION-MARKER-AUTHORING",
"module": "ANIMATION",
"title": "Complete Action, keyframe and timeline marker workflows",
"status": "pending",
"attempts": 0,
"commands": ["createAction", "removeAction", "setKeyframe", "setTimelineMarkers"],
"status": "implemented",
"attempts": 1,
"commands": [
"createAction",
"removeAction",
"setKeyframe",
"setTimelineMarkers"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/animation-render-commands.ts",
@@ -331,15 +369,19 @@
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp"
],
"resultPath": "tests/golden/WBV2/product-migration/ACTION-MARKER-AUTHORING-result.json",
"implementation": "Add user workflows for creating/removing Actions, editing individual keyframe values/handles/interpolation, and adding, renaming, moving and deleting timeline markers through native Main commands."
"implementation": "Add user workflows for creating/removing Actions, editing individual keyframe values/handles/interpolation, and adding, renaming, moving and deleting timeline markers through native Main commands.",
"startedAt": "2026-09-05T23:30:01.504832+00:00",
"completedAt": "2026-09-05T23:44:12.624142+00:00"
},
{
"id": "SEQUENCER-AUTHORING",
"module": "MEDIA",
"title": "Complete sequencer strip editing",
"status": "pending",
"attempts": 0,
"commands": ["setSequencerStrips"],
"status": "implemented",
"attempts": 1,
"commands": [
"setSequencerStrips"
],
"ownedPaths": [
"web/protocol/web-engine.ts",
"web/protocol/sequencer.ts",
@@ -350,15 +392,20 @@
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp"
],
"resultPath": "tests/golden/WBV2/product-migration/SEQUENCER-AUTHORING-result.json",
"implementation": "Expose add, remove, move, trim, split, mute and channel editing for scene, movie, sound, image and meta strips. Commit the complete bounded strip list to Blender Main and retain existing browser media proxy services."
"implementation": "Expose add, remove, move, trim, split, mute and channel editing for scene, movie, sound, image and meta strips. Commit the complete bounded strip list to Blender Main and retain existing browser media proxy services.",
"startedAt": "2026-09-05T23:44:12.632646+00:00",
"completedAt": "2026-09-05T23:59:08.903421+00:00"
},
{
"id": "IO-ROUTE-COMPLETION",
"module": "ASSET_IO",
"title": "Complete browser file import and export routes",
"status": "pending",
"attempts": 0,
"commands": ["importScene", "exportScene"],
"status": "implemented",
"attempts": 3,
"commands": [
"importScene",
"exportScene"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/io-format-ui-gate.ts",
@@ -368,15 +415,21 @@
"blender-5.2.0/source/blender/web_engine/web_engine_api.cpp"
],
"resultPath": "tests/golden/WBV2/product-migration/IO-ROUTE-COMPLETION-result.json",
"implementation": "Connect browser file pickers and downloads for the locally available GLB/glTF, OBJ, STL and PLY routes, preserve explicit loss reports, and route formats requiring unavailable native libraries to the existing server job provider."
"implementation": "Connect browser file pickers and downloads for the locally available GLB/glTF, OBJ, STL and PLY routes, preserve explicit loss reports, and route formats requiring unavailable native libraries to the existing server job provider.",
"startedAt": "2026-09-06T00:17:31.550579+00:00",
"completedAt": "2026-09-06T00:18:41.723445+00:00"
},
{
"id": "SCULPT-ADVANCED-AUTHORING",
"module": "PAINT",
"title": "Complete advanced sculpt workflows",
"status": "pending",
"attempts": 0,
"commands": ["sculptStroke", "setSculptMeshAttributes", "invokeBlenderOperator"],
"status": "implemented",
"attempts": 1,
"commands": [
"sculptStroke",
"setSculptMeshAttributes",
"invokeBlenderOperator"
],
"ownedPaths": [
"web/app/src/app/App.tsx",
"web/protocol/paint.ts",
@@ -386,7 +439,9 @@
"blender-5.2.0/source/blender/web_engine/web_engine_main_state.cpp"
],
"resultPath": "tests/golden/WBV2/product-migration/SCULPT-ADVANCED-AUTHORING-result.json",
"implementation": "Add cursor-derived multi-sample strokes, mask and face-set operations, symmetry, smooth/inflate/grab controls, and remesh entry points using native commands or the allowlisted operator bridge."
"implementation": "Add cursor-derived multi-sample strokes, mask and face-set operations, symmetry, smooth/inflate/grab controls, and remesh entry points using native commands or the allowlisted operator bridge.",
"startedAt": "2026-09-06T00:18:41.740013+00:00",
"completedAt": "2026-09-06T00:28:32.739026+00:00"
}
]
}