Follow-up to #109 (which generated the 346-crate CARGO_CRATES block). Make that
list self-maintaining so it can't silently drift from the source deps:
- check-cargo-crates.sh: parses Cargo.lock (registry crates only; skips the 13
workspace-local crates and any git deps) and diffs against the Makefile's
CARGO_CRATES block. Reports MISSING / STALE, exits non-zero on drift. No
network, pure tomllib — runs on any host. Independently confirms #109's list
is complete and correct (346/346 in sync).
- ci.yml: new `port` job (python:3.12) runs the check on every push/PR, so a
dependency change that forgets `make cargo-crates` fails CI.
- Makefile: replace the stale "Empty in this draft" comment (CARGO_CRATES is now
populated) with accurate regenerate/verify guidance.
- README: CARGO_CRATES is committed now (only distinfo is build-host-generated);
document the checker and trim the build steps.
Verified: checker green at 346 crates; both drift directions (missing/stale)
detected in negative tests; ci.yml is valid YAML; port README prettier-clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>