After extensive testing, discovered that:
1. set_bone_pose_rotation() sets ABSOLUTE local rotation, not offset
2. Bones have complex non-identity rest poses (e.g. LeftUpperArm euler=(-0.161,-2.760,-2.760))
3. Setting local pose to identity collapses the model
4. Correct approach: use set_bone_global_pose_override() with rotation
applied around world X axis (forward/back swing) pre-multiplied on
the rest pose basis
Also cache rest pose local transforms (rotation + position) and use them
when resetting bones or applying position offsets.