# WBV2-P4-002 status - task: `WBV2-P4-002` - parent: `WBV2-P4-001` - parity: `NODES.ALLOWLIST` - implementationClass: `LOCAL_BOUNDED` - status: `done` - fixture: `tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend` ## Evidence - Blender desktop and WASM/Main expose the same two Geometry Node graphs. The supported graph contains the declared Transform slice with stable interface sockets, links, and defaults; the graph containing `GeometryNodeDistributePointsOnFaces` is retained and blocked by the Geometry Node allowlist. - The declared Shader graph compiles through the bounded `WEBGL2_THREE_PHYSICAL` compiler with a deterministic compile key. A valid `setShaderGraph` commit advances Main once and survives save/reopen with the same graph hash. - Unknown Geometry/Shader nodes and an over-budget Geometry graph are rejected before commit. A malformed native Shader graph and compile failure leave Main revision unchanged; malformed blend input leaves the opened snapshot unchanged. ## Commands - `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/generated/WBV2-P4-002.py -- tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend` - `build_blender_5.2.0/bin/blender -b --factory-startup --python tools/web/check-wbv2-p4-002-desktop.py -- tests/files/web/generated/WBV2-P4-002-NODES.ALLOWLIST.blend tests/golden/WBV2-P4-002/nodes-desktop-report.json` - `node --check tools/web/check-generated-gap.mjs` - `npm --prefix web run test:generated-gap -- --task WBV2-P4-002` - `node tools/web/check-generated-gap.mjs --task WBV2-P4-002` - `node tools/web/check-task-context.mjs --task WBV2-P4-002 --write` ## Handoff - nextTask: `WBV2-P4-003` - queue mutation: allowed after manifest and parent hash validation