rotateCW() actually
steps through. Shape-equivalent rotations are deduplicated, and within each
equivalence class the rotation whose visual centroid (axial r + q/2)
is closest to rot 0's is kept so rotating doesn't push the piece down a row.
The anchor is pinned at the grid's centre with ±2 rows of slack so
_adjustAnchorRow's downward clamp never has to fire.