# M16-GAP-00219 Status status: done task: armature.calculate_roll operator LOCAL_EXACT slice updated: 2026-08-22 America/New_York scope: - The minimal fixture contains one selected bone aligned along +Y with zero initial roll. - Desktop runs `ARMATURE_OT_calculate_roll(type='GLOBAL_POS_X', axis_flip=false, axis_only=false)` with `poll=true` and `FINISHED`, producing a roll of approximately `pi/2` and preserving the resulting matrix through save/reopen. - The existing Main reader exposes the same armature bone head/tail and rest matrix; no new reader field, data-block, editor, or browser behavior was added. evidence: - The generator, desktop checker, npm comparator, direct comparator, and task-context checks passed. Repeated checker runs recognize the persisted roll and remain idempotent. - WASM/Main observes the same calculated orientation, preserves it across save/reopen, and rejects malformed Blend input without Main mutation. - Chromium-only policy was preserved; no Firefox/WebKit run was made. nextTask: `M16-GAP-00220`