profile_assembly.py now checks each pocket's polyline against the plate boundary using Shapely contains(). Pockets extending outside are dropped. Sandbox 1: 1 pocket removed (was crossing corner near x=150, y=-20).