Skip to content

ci: fail when a deny.toml advisory ignore outlives its reason - #10194

Merged
westonpace merged 5 commits into
lance-format:mainfrom
twmb:twmb/advisory-ignore-guard
Oct 22, 2026
Merged

westonpace merged 5 commits into
lance-format:mainfrom
twmb:twmb/advisory-ignore-guard

Conversation

@twmb

@twmb twmb commented Oct 21, 2026 •

Copy link
Copy Markdown
Contributor

#9985 ignored four rustls advisories until the fix was 48 hours old. Nothing brought us back once the fix was old enough, and rustls stayed on the vulnerable 0.23.45 for a week, until #10193. This makes CI fail when an advisory ignore outlives its reason.

  • Every [advisories] ignore reason in deny.toml must start with expires YYYY-MM-DD: (an ignore we expect to drop, about a week out for a fix waiting on the 48 hour rule) or no fix: (nothing to upgrade to).
  • ci/check_advisory_ignores.py runs in the cargo-deny job. It fails on a missing marker, a malformed date, or an expires date (UTC) that has passed, and says to upgrade and remove the ignore or move the date with a reason.
  • unused-ignored-advisory = "deny" makes cargo-deny fail on an ignore that no longer matches any crate.
  • The existing reasons are rewritten from the advisories and Cargo.lock. The quick-xml one was stale: object_store and opendal now use 0.41, and the remaining copies come from lance-namespace-impls (0.40) and pprof's inferno (0.26).
  • fix: update trust-store pins for the eMudhra CA compromise #10215 moved to the fixed rustls-webpki 0.103.16 and webpki-roots 1.0.10, so the RUSTSEC-2026-0381 and 0382 ignores no longer match any crate and are removed. The webpki versions from fix: update trust-store pins for the eMudhra CA compromise #10215 are past the 48 hour rule now, so their ci/dependency-age-allowlist.toml entries are removed too.
  • While at it, this moves rust/examples to hf-hub 0.5.0 and tokenizers 0.22.2, because that drops the number_prefix ignore and the webpki-roots 0.26 shim. hf-hub now uses only its ureq feature, which also drops native-tls and openssl from Cargo.lock.
  • Also while at it, rust/examples enables parquet's snap feature, because llm_dataset_creation failed reading the snappy-compressed wikitext files with "Disabled feature at compile time: snap".

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Claude Code Review

This pull request is from a fork — automated review is disabled. A repository maintainer can comment @claude review to run a one-time review.

@github-actions github-actions Bot added A-deps Dependency updates A-ci CI / build workflows ci Github Action or Test issues labels Oct 21, 2026
lance-gatekeeper[bot]

This comment was marked as outdated.

@lance-gatekeeper lance-gatekeeper Bot added the K-approved Latest Gatekeeper recommendation permits acceptance. label Oct 21, 2026
twmb and others added 4 commits October 22, 2026 12:47
lance-format#9985 ignored four rustls advisories until the fix was 48 hours old, as
ci/check_dependency_age.py requires. Nothing brought us back once the
fix was old enough, and rustls stayed on the vulnerable 0.23.45 for a
week, until lance-format#10193.

Every advisory ignore's reason now starts with `expires YYYY-MM-DD:` or
`no fix:`. ci/check_advisory_ignores.py runs in the cargo-deny job and
fails on a reason without a marker, a malformed date, or an expires day
(UTC) that has passed. deny.toml also sets unused-ignored-advisory =
"deny", so cargo-deny fails on an ignore that no longer matches a crate.

The existing reasons are rewritten from the advisories and Cargo.lock.
The quick-xml one was stale: object_store and opendal are on 0.41 now,
and what remains is lance-namespace-impls asking for 0.40 and pprof's
inferno pulling in 0.26. The RUSTSEC-2026-0381 and 0382 ignores match
nothing now, so they are removed: lance-format#10215 moved rustls-webpki to the
fixed 0.103.16, and the advisory lists webpki-roots 0.26.11, which only
re-exports 1.x, as unaffected.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
hf-hub 0.4 and tokenizers 0.15 pull in indicatif 0.17, which depends on
the unmaintained number_prefix (RUSTSEC-2025-0119). hf-hub 0.4 also pulls
in ureq 2, which gets its roots through the webpki-roots 0.26 shim.
hf-hub 0.5.0 and tokenizers 0.22.2 are the smallest releases on
indicatif 0.18, and hf-hub 0.5 moves to ureq 3, which depends on
webpki-roots 1.x directly. Nothing matches the number_prefix ignore now,
so it is removed.

hf-hub's default features turn on native-tls for ureq and reqwest. The
example only uses the sync API, so hf-hub now gets just its ureq
feature. That drops native-tls and openssl from Cargo.lock.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The wikitext parquet files the example downloads are snappy compressed,
and the workspace builds parquet without codecs, so the example failed
reading them with "Disabled feature at compile time: snap". The
examples now enable parquet's snap feature.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
lance-format#10215 allowlisted rustls-webpki 0.103.16 and webpki-roots and
webpki-root-certs 1.0.10 so the eMudhra fixes could land before they
were 48 hours old. All three are past 48 hours now, rustls-webpki, the
youngest, since 2026-10-22 08:58 UTC, and each entry said to remove it
after that time. ci/check_dependency_age.py passes on all three
lockfiles without them.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@twmb
twmb force-pushed the twmb/advisory-ignore-guard branch 3 times, most recently from 9f2bb4d to 185bcc2 Compare October 22, 2026 19:13
@lance-gatekeeper lance-gatekeeper Bot removed the K-approved Latest Gatekeeper recommendation permits acceptance. label Oct 22, 2026

@lance-gatekeeper lance-gatekeeper Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

✅ Gate recommendation: approve.

The expiry and stale-ignore checks still close the temporary-exception gap. The merged TLS fixes in #10193 and #10215 make the removed ignores obsolete; the webpki releases have also passed the 48-hour minimum.

@lance-gatekeeper lance-gatekeeper Bot added the K-approved Latest Gatekeeper recommendation permits acceptance. label Oct 22, 2026

@westonpace westonpace left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Seems like a good idea. Just one suggestion.

Comment thread deny.toml Resolved
The commented examples at the top of the advisory ignore list still showed
a bare id and free-form reasons, which ci/check_advisory_ignores.py now
rejects. They now show an expires entry, a no fix entry and a yanked crate
entry in the form the check accepts, so the list stays a usable template
once the current expiring ignores are gone.

Co-authored-by: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@lance-gatekeeper lance-gatekeeper Bot removed the K-approved Latest Gatekeeper recommendation permits acceptance. label Oct 22, 2026
@westonpace
westonpace merged commit cd5bddf into lance-format:main Oct 22, 2026
41 checks passed
@twmb
twmb deleted the twmb/advisory-ignore-guard branch October 22, 2026 23:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

A-ci CI / build workflows A-deps Dependency updates ci Github Action or Test issues

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants