# M10-03 Status status: done task: Geometry Nodes allowlist 逐节点 Blender 5.2 desktop/WASM golden updated: 2026-08-16 America/New_York ## Scope The headless Web modifier evaluates the saved Blender Main graph only through the 16-node schema-1 allowlist. Eleven minimal Blender 5.2 fixtures make every allowlisted node affect a measured output. The same fixture is evaluated by the full-Main WASM in Node and by the production Chromium Worker before and after save/reopen. This is a bounded constant-scalar, topology, attribute, and same-file resource closure. It does not claim arbitrary Blender field/domain conversion, complete lazy-function semantics, Geometry Nodes graph writing, linked resources, or Simulation Zones. ## Coverage - Graph boundary: Group Input and Group Output. - Geometry: Transform, Set Position, Join/Separate Geometry, Realize Instances, and Store Named Attribute with a constant Float point-domain value. - Scalar/vector: Integer, Vector, Value, Compare, and Math nodes on the bounded operations accepted by the native evaluator. - Same-file resources: Object Info, Collection Info with separate children, and Image Info dimensions. Missing, recursive, linked, or otherwise unverified resources stay behind the M10-02 resource gate. ## Evidence - Fixture: `tests/files/web/geometry_node_allowlist_evaluator.blend`. - Golden: `tests/golden/M10-03/geometry-node-evaluator.json`. - Desktop generator: `tools/web/generate-geometry-node-evaluator-golden.py`; Blender 5.2.0 LTS emitted 11 cases, and a clean temporary regeneration matched every semantic golden field after excluding output-path-dependent fixture path/hash fields. - Node full-Main WASM: `node tools/web/check-geometry-node-evaluator-golden.mjs`; 16 nodes, 11 cases, maximum position error 0, RMS position error 0, and attributes passed. - Chromium: `WEB_TEST_PORT=5443 npm --prefix web run test:geometry-node-evaluator-golden`; unit 4/4, Node golden 1/1, and Worker open/evaluate/save/reopen 1/1 passed. - Tolerances: maximum position `1e-5`, RMS position `1e-6`, Float point attribute `1e-6`, and bounds `1e-5`. - M10-01 regression on port 5444 and M10-02 regression on port 5445 passed. - Full unit suite 131/131, typecheck, lint, production build (73 modules), local dependency checks, and `git diff --check` passed. ## Implementation Hashes - Native evaluator: `b896c5c52a611e7a309f80ca4bf8323ccded458584f65ab8f6841df24d70cc42`. - Desktop generator: `f42ba309e4935a4534eabcb8ab1978abc08d863e2d18d80a70607f31dd3a3066`. - WASM checker: `76a02d4aae70a597f0c26c12de3104d56e3f1cc9fded1d4824a05d7ddc59c1b5`. - Fixture: `0cb3e33df570b436e32d783eef0a6c2daad04ca5bb4ccb4f0286b3d723ff7978`. - Golden: `363ae47cfb50b8c95d0a55116e8663e41d27c7aa332cffe9b702bbe9b8cbfe1c`. - Chromium spec: `83b1c96518eb64bef2c8830c778a84eb13d8da0ea62c2488471ed5fefea975c8`. - Full-Main WASM: `432c5c9efb03b23a506c1b8f57f0d06ee683274bbdfe415f894f0d3c29db0b77`. ## Contract - Evaluation is demand-driven from the active Group Output and is capped at 4,096 node-output evaluations. Unsupported nodes, sockets, operations, cycles, or resource states return `GEOMETRY_NODES_EVALUATOR_UNSUPPORTED` without claiming evaluation. - The evaluator uses Blender `GeometrySet`, geometry join/realize/transform helpers, evaluated dependency graph resources, and Blender mesh attributes. Three.js does not execute or approximate Geometry Nodes semantics. - The fixture and golden inventory must cover every schema-1 allowlist entry before the check starts; missing coverage fails before numeric comparison. ## Rollback Remove the bounded evaluator expansion, M10-03 generator/fixture/golden/checker, Chromium spec, package script, and this status file together. Revert the M10 count to 2/15 and restore the previous Transform/Set Position-only modifier evaluator.