chore: enforce dependency license allowlist via cargo-deny#499
Conversation
|
/claude review |
|
Claude finished @avihut's task in 2m 2s —— View job PR Review:
|
Adds cargo-deny pinned through mise with a permissive license allowlist, RustSec advisory gating, and source-registry restriction. The same "small dedicated tool + CI gate + allowlist with `# why:` rationale" pattern as the existing cargo-cooldown / .dep-age-allowlist supply-chain gate. [bans] (duplicate-version detection) is deferred to a follow-up; the daft tree has natural duplicate transitive versions today (winnow, windows_*) that need curation before that gate can land cleanly. Initial baseline surfaced and curated three real findings: BSL-1.0 (Boost Software License) on clipboard-win/error-code transitive through arboard → edtui (added to allowlist — permissive, OSI-approved), and two `unmaintained` advisories on bincode (RUSTSEC-2025-0141) and yaml-rust (RUSTSEC-2024-0320) reaching us through syntect with no safe upgrade available (added to advisories.ignore with rationale; revisit when syntect drops these deps). Closes #477. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Two follow-ups from the cargo-deny rollout review (PR #499): - Move MPL-2.0 from the global allow list into per-crate exceptions. MPL-2.0 is file-level copyleft, materially different in posture from the permissive licenses in the global list. Two named entries today: nucleo-matcher (transitive through ratatui's fuzzy-matcher) and option-ext (transitive through `dirs`). Each carries a # why: rationale matching the project's .dep-age-allowlist discipline. - Document the all-features = false scope. daft has no [features] table today so the setting is a no-op, but a future feature flag could pull in optional deps that this check would silently skip. Inline comment spells out the trigger for revisiting. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
bf9810f to
3317a4d
Compare
Summary
cargo-denypinned through mise with a permissive license allowlist, RustSec advisory gating, and source-registry restriction. Enforced in CI on every PR that touchesCargo.toml,Cargo.lock, ordeny.toml.cargo-cooldown/.dep-age-allowlistsupply-chain pattern: small dedicated tool + CI gate + allowlist with# why:rationale.[bans](duplicate-version detection) deferred to a follow-up — daft has natural duplicate transitive versions today (winnow,windows_*) that need curation before that gate can land cleanly.Baseline curation
The initial run surfaced three real findings, all triaged in this PR:
BSL-1.0(Boost Software License 1.0) onclipboard-win/error-code, transitive througharboard→edtui. Added to the allowlist — permissive, OSI-approved, FSF Free.RUSTSEC-2025-0141(bincodeunmaintained) — transitive throughsyntect. No safe upgrade exists; added toadvisories.ignorewith rationale. Revisit when syntect drops bincode 1.x.RUSTSEC-2024-0320(yaml-rustunmaintained) — same dependency chain. Revisit when syntect migrates to yaml-rust2.Test plan
mise installfetchescargo-deny0.19.4 through the cargo backend (covered by the existing 7-dayminimum_release_agegate)mise run denypasses locally:advisories ok, bans ok, licenses ok, sources okmise run fmt:checkcleanmise run clippyzero warningsmise run test:unit1703 passed, 0 faileddep-license-checkjob appears and passes on this PRlockfilepath gateCloses #477.