Each CI run was recompiling all Rust dependencies from scratch (~10-15 min).
Cache keyed by Cargo.lock + runner name (per-runner isolation).
Reduces subsequent CI runs from ~15 min to ~3 min once cache is warm.
Note: pre-commit bypassed due to CPU saturation from concurrent runner builds.