Spatial transform — must move masks, boxes, and keypoints.
Re-declaring the companion hooks as abstract turns "a geometric transform handles every target type" into a contract mypy enforces, preventing the silent bug where a new geometric transform forgets to move one of them.