# M16-GAP-00186 Status status: done task: anim.keyframe_insert operator LOCAL_EXACT slice updated: 2026-08-22 America/New_York scope: - The minimal fixture contains one selected/active object with a custom `insert_target` property and a named active Keying Set. Its Action starts with keys at frames 1 and 5. A foreground `VIEW_3D` context invokes `ANIM_OT_keyframe_insert()` (`poll=true`, `FINISHED`) at frame 3, inserting the current key while preserving the existing keys. evidence: - Desktop evidence records the Action changing from `[1, 5]` to `[1, 3, 5]`; the inserted key is the only selected key (`[false, true, false]`), the custom property remains at 3.0, and save/reopen is exact. - WASM/Main reads the same Action as one `[\"insert_target\"][0]` channel with two keyframes before the operation fixture and three keyframes after it. WASM save/reopen is exact, and malformed Blend input is rejected without Main mutation. - Fixture generation, foreground `VIEW_3D` checker, npm comparator, direct idempotent comparator, and artifact hashing passed. No production reader or protocol change was required because the existing generic Action/F-Curve reader exposes this custom-property channel. nextTask: `M16-GAP-00187`