# WBV2-P4-003 status - task: `WBV2-P4-003` - parent: `WBV2-P4-002` - parity: `SCULPT.NONMESH.PAINT_BOUNDED` - implementationClass: `LOCAL_BOUNDED` - status: `done` - fixture: `tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend` ## Evidence - Blender desktop and WASM/Main expose the same single-user Sculpt mesh with five vertices, five faces, `.sculpt_mask`, and `.sculpt_face_set`, plus an available three-point Bezier Curve and three-point Point Cloud. - `setSculptMeshAttributes` and a bounded `DRAW` Sculpt stroke commit atomically. The updated mask and face sets, stroke result, Curve, and Point Cloud survive save/reopen exactly. - Unsupported brush input and malformed attribute lengths are rejected without a revision change. The PBVH query returns the stable `PAINT_PBVH_UNAVAILABLE` gate for the current WASM build; stale PBVH requests return `REVISION_CONFLICT`. ## Commands - `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-003.py -- tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend` - `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p4-003-desktop.py -- tests/files/web/generated/WBV2-P4-003-SCULPT.NONMESH.PAINT_BOUNDED.blend tests/golden/WBV2-P4-003/sculpt-desktop-report.json` - `node --check tools/web/check-generated-gap.mjs` - `npm --prefix web run test:generated-gap -- --task WBV2-P4-003` - `node tools/web/check-generated-gap.mjs --task WBV2-P4-003` - `node tools/web/check-task-context.mjs --task WBV2-P4-003 --write` ## Handoff - nextTask: `WBV2-P4-004` - queue mutation: allowed after manifest and parent hash validation