New `attach-bsdl <module> <part> <file.bsd>` command: parse via BsdlModel, apply_bsdl() onto the part, store the path on Part::bsdl_path, report bound/ unbound. Persist a `B\t<path>` line under the part; on restore, re-parse and re-apply each attached model (the .bsd path is persisted, not the derived pin specs). Round-trip covered by test_bsdl_apply. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>