Skip to content

fix(deps): clear the remaining 35 advisories, and unblind the scanner that missed them (#108) - #111

Merged
bdelanghe merged 3 commits into
mainfrom
claude/hooksmith-creation-dialog-scope-04umv3
Aug 6, 2026
Merged

fix(deps): clear the remaining 35 advisories, and unblind the scanner that missed them (#108)#111
bdelanghe merged 3 commits into
mainfrom
claude/hooksmith-creation-dialog-scope-04umv3

Conversation

@bdelanghe

@bdelanghe bdelanghe commented Aug 6, 2026

Copy link
Copy Markdown
Collaborator

Closes #108. Discharges #89, #91 and #109.

The osv check on this PR is RED, and that is the result, not a failure to fix. Before this PR the lane was green while scanning nothing. Now it scans 446 packages and reports 11 real vulnerabilities. A red honest lane is the deliverable; see §3.

1. Clear the advisories the scanner was missing

package advisories
rand 0.8.5 → 0.8.6 2 → CLEAN
wasmtime 18.0.4 → removed 28
wasmtime-wasi 18.0.4 → removed 5

#91 and #109 are discharged by deletion, not by bump, because nothing imports wasmtime. crates/xtask is the only workspace member declaring it, and its only references are Command::new("wasmtime") — shelling out to a binary — plus one string in a README template. The other use wasmtime:: sites are in crates/apps (not a workspace member) and crates/hooksmith-app (a member declaring no wasmtime dependency), so neither compiles. Dropping two .workspace = true lines removes 90 packages from the lockfile.

Bumping was the obvious move and is worse on every axis, because the version chase doesn't terminate anywhere useful:

18.0.4  (current)               28 advisories
24.0.7  (what #109 proposes)     7 advisories  — still not clean
47.0.3  (first clean release)   requires Rust 1.94; rust-toolchain.toml pins 1.88.0

Merging #109/#91 as proposed would have left 9 advisories behind, and reaching a clean version would have forced a repo-wide toolchain bump — to satisfy a dependency nothing calls.

2. Unblind the scanner (#108)

.gitignore listed Cargo.lock while the file is tracked. Git exempts tracked files, so the rule was inert and nothing looked wrong — but osv-scanner applies the pattern literally, skipped the repo's only lockfile, and --allow-no-lockfiles turned "scanned nothing" into a pass. Removed from both generator sites in crates/xtask/src/main.rs so the next gen-config doesn't put it back.

Measured, before → after:

before:  170 dirs, 1617 inodes, 0 Extract calls   No package sources found   No issues found
after:   171 dirs, 1616 inodes, 1 Extract calls   Scanned Cargo.lock, found 446 packages

3. What the honest scan found — and a prediction of mine that was wrong

This PR originally claimed the first real scan would come up green because §1 cleared everything. That was wrong, and the scan is what corrected it: I had only queried the five packages I already knew about, not the other 441.

run result
first honest scan 18 vulnerabilities / 16 packages, 11 fixable
after the third commit 11 vulnerabilities / 9 packages, 4 fixable

The third commit clears the seven reachable by cargo update alone — anyhow, bytes, crossbeam-epoch, event-listener, slab, time, tracing-subscriber, all verified CLEAN at the resolved versions. time needed an explicit --precise: a plain update stopped at 0.3.44, three short of the 0.3.47 carrying the fix.

The 11 that remain are not reachable from this PR, and they split into two kinds that deserve different treatment:

Fixable, but real work (4):

  • git2 0.18.3 → 0.21.0 — 3 advisories. 209 call sites across five members. A genuine migration.
  • lru 0.12.5 → 0.16.3 — 1 advisory. Transitive under ratatui, whose range does not admit the fix, so it needs a ratatui bump first.

No fixed version exists (7): backoff, derivative, instant, number_prefix, paste, rustls-pemfile (both 1.0.4 and 2.2.0). These are unmaintained-crate advisories — precisely the case deps.yml documents osv-scanner.toml [[IgnoredVulns]] for.

Deliberately not suppressed here. An ignore entry is a judgement about accepted risk and wants its own review rather than riding along in a PR about a scanner bug. And suppressing the four fixable ones would be wrong whatever the lane says — that would recreate exactly the green-over-real-findings state this PR exists to end.

Verification

  • cargo check --workspace --locked --all-targets passes. The 7 xtask warnings are pre-existing visibility lints in wasm_event_bus, untouched.
  • Version claims are from the OSV API against versions read out of the lockfile, not from release notes.
  • git check-ignore --no-index -v Cargo.lock now matches nothing; before, it returned .gitignore:7:Cargo.lock.
  • Note on counting: the third commit message says "thirteen remain" where the scanner says 11. Both are right — the scanner dedupes aliased GHSA/RUSTSEC pairs (git2 and lru each have one), I counted the aliases separately. 11 is the number to quote.

Two things deliberately left alone

The @checksum: e902a214 header is stale and I did not fake a fix. It doesn't match the file's contents for any header offset, and did not before this change. gen-config --validate exits 1 with Error: No such file or directory, and no workflow validates it. Rather than write an attestation I can't reproduce, the stale value stays and is reported. Worth its own issue — a generated-file checksum that nothing checks and that is already wrong is the same shape as the scanner this PR fixes.

strict_file_validator.rs also lists Cargo.lock, but that's xtask's own file-audit skip list, matches *.lock regardless, and has nothing to do with osv-scanner.

claude added 2 commits August 6, 2026 13:27
Clears 35 advisories live on main, and discharges #89, #91 and #109 — the
last two by deletion rather than by bump, for the reason below.

  rand           0.8.5 -> 0.8.6   2 advisories -> CLEAN
  wasmtime       18.0.4  REMOVED  28 advisories
  wasmtime-wasi  18.0.4  REMOVED   5 advisories

`crates/xtask` is the ONLY workspace member declaring wasmtime, and it never
calls the library: the sole references are `Command::new("wasmtime")` —
shelling out to a binary — plus one string in a README template. The other
`use wasmtime::` sites live in `crates/apps` (not a workspace member) and in
`crates/hooksmith-app` (a member that declares no wasmtime dependency), so
neither compiles. Dropping the two `.workspace = true` lines removes 90
packages from the lockfile and every one of those 33 advisories.

Bumping instead was considered and is worse on every axis, because the
version chase does not terminate anywhere useful:

  18.0.4  (current)              28 advisories
  24.0.7  (what #109 proposes)    7 advisories — still not clean
  47.0.3  (first clean release)  requires Rust 1.94; rust-toolchain.toml
                                 pins 1.88.0

So merging #109/#91 as proposed would have left 9 advisories behind, and
reaching a clean version would have forced a toolchain bump — all to satisfy
a dependency nothing imports.

`cargo check --workspace --locked --all-targets` passes. The 7 xtask
warnings are pre-existing visibility lints in wasm_event_bus, untouched.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019kJtPPYMW39vbkTFvEpexe
The deps lane has never scanned this repo's Rust dependencies. It reported
green because it found no lockfiles at all — the 2026-08-04 run on main
logged `0 Extract calls` and "No package sources found" with Cargo.lock at
the repo root.

`.gitignore` listed `Cargo.lock` while the file is tracked. Git exempts
tracked files, so the rule was inert and nothing looked wrong; osv-scanner
applies the pattern literally, skipped the only lockfile, and
`--allow-no-lockfiles` turned "scanned nothing" into a pass. Not a fault in
the shared lane: front-desk-scheduler runs the byte-identical workflow and
reports 3 Extract calls.

Removed from both generator sites so the next `gen-config` does not put it
back — the full template and the `ignorable_patterns` table — with a comment
at the second site recording why, since the entry looks like a sensible
default carried over from the library case where Cargo.lock is not committed.

The preceding commit clears the 35 advisories this was hiding, so the first
honest scan should come up green rather than red.

Two things left alone deliberately. The `@checksum: e902a214` header does not
match this file's contents for any header offset and did not before this
change; `gen-config --validate` exits 1 with "No such file or directory", and
no workflow validates it. Rather than fabricate an attestation I cannot
reproduce, the stale value stays and is reported. And
`strict_file_validator.rs` also lists Cargo.lock, but that is xtask's own
file-audit skip list, matches `*.lock` regardless, and has nothing to do with
osv-scanner.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019kJtPPYMW39vbkTFvEpexe
The first honest osv run (446 packages, 1 Extract call, where every previous
run on this repo scanned 0) reported 18 vulnerabilities across 16 packages —
so the prediction in the previous commit, that clearing 35 would leave the
lane green, was wrong. These are the ones reachable by `cargo update` alone:

  anyhow             1.0.98  -> 1.0.104   RUSTSEC-2026-0190
  bytes              1.10.1  -> 1.12.1    RUSTSEC-2026-0007 / GHSA-434x-w66g-qw3r
  crossbeam-epoch    0.9.18  -> 0.9.20    RUSTSEC-2026-0204
  event-listener     5.4.1   -> 5.4.2     RUSTSEC-2026-0221
  slab               0.4.10  -> 0.4.12    RUSTSEC-2025-0047 / GHSA-qx2v-8332-m4fv
  time               0.3.41  -> 0.3.47    RUSTSEC-2026-0009 / GHSA-r6v5-fh4h-64xc
  tracing-subscriber 0.3.19  -> 0.3.20    RUSTSEC-2025-0055 / GHSA-xwfj-jgwm-7wp5

All seven verified CLEAN against OSV at the resolved versions. `time` needed
an explicit --precise: a plain update stopped at 0.3.44, three short of the
0.3.47 that carries the fix.

`cargo check --workspace --locked --all-targets` passes.

Thirteen remain and none are reachable from here. Six are FIXABLE but not
cheaply — git2 0.18.3 (4 advisories) wants 0.21, which is 209 call sites
across five members, and lru 0.12.5 (2) is transitive under ratatui, whose
range does not admit the fixed 0.16.3. Seven have NO fixed version at all —
backoff, derivative, instant, number_prefix, paste and rustls-pemfile (both
1.0.4 and 2.2.0) are unmaintained-crate advisories, which is the case the
lane documents osv-scanner.toml [[IgnoredVulns]] for. Deliberately not
suppressed here: an ignore entry is a judgement about accepted risk and
wants its own review, and suppressing the six fixable ones would be wrong
whatever the lane says.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_019kJtPPYMW39vbkTFvEpexe
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

deps lane scans nothing: .gitignore hides the tracked Cargo.lock from osv-scanner

2 participants