Skip to content

fix(deps): resolve brace-expansion DoS advisory; scope audit to production deps - #20

Merged
steve-calvert-glean merged 1 commit into
mainfrom
fix/brace-expansion-audit-scope
Jul 27, 2026
Merged

fix(deps): resolve brace-expansion DoS advisory; scope audit to production deps#20
steve-calvert-glean merged 1 commit into
mainfrom
fix/brace-expansion-audit-scope

Conversation

@steve-calvert-glean

Copy link
Copy Markdown
Contributor

Summary

  • Resolves all 17 high-severity npm audit findings — they collapsed to one advisory (GHSA-mh99-v99m-4gvg, brace-expansion DoS), reachable only through dev tooling (eslint's internals, fixturify-project/bintastic's test fixtures), never through the published package's runtime dependencies.
  • npm audit fix reports "no fix available" because transitive dependents (minimatch, etc.) haven't bumped their own brace-expansion range to allow the fixed 5.0.8 yet. Verified empirically that forcing it via the existing overrides mechanism (already used here for esbuild/undici/tmp) is safe: 5.0.8 ships dual CJS/ESM builds, so old require("brace-expansion") call sites still resolve to a callable function. Nets -19 installed packages by deduping what were separate 1.x/2.x copies.
  • Adds npm run audit (npm audit --omit=dev) as the going-forward convention, wired into CI. Since devDependencies never ship to consumers, a vulnerability there isn't a real risk and shouldn't gate releases or prompt overrides the way a production one does — this scopes future scans accordingly instead of chasing dev-tooling noise.
  • Documents the convention in CLAUDE.md.

Test plan

  • npm audit → 0 vulnerabilities (was 17 high)
  • npm run audit (new, production-only) → 0 vulnerabilities
  • npm run typecheck
  • npm run lint
  • npm test (76/76)
  • npm run build
  • node dist/cli.js docs --check
  • npm pack --dry-run

…ction deps

All 17 high-severity npm audit findings collapsed to one advisory
(GHSA-mh99-v99m-4gvg, brace-expansion DoS via unbounded expansion),
reachable only through dev tooling (eslint's internals,
fixturify-project/bintastic's test fixtures) — never through the
published package's runtime dependencies.

`npm audit fix` reported no fix available because the transitive
dependents (minimatch, etc.) haven't bumped their own brace-expansion
range to allow the fixed 5.0.8. Verified empirically that forcing it
via the existing overrides mechanism (already used here for
esbuild/undici/tmp) is safe: 5.0.8 ships dual CJS/ESM builds, so old
`require("brace-expansion")` call sites still resolve to a callable
function. Full gate (typecheck/lint/test/build/docs/pack) stays green,
and it nets -19 installed packages by deduping what were separate
1.x/2.x copies.

Since devDependencies never ship to consumers, a vulnerability there
isn't a real risk and shouldn't gate releases or prompt overrides the
way a production one does. Adds `npm run audit` (`npm audit
--omit=dev`) as the going-forward convention, wired into CI, so
production dependencies stay audit-clean without dev-tooling noise.
@steve-calvert-glean steve-calvert-glean added the bug Something isn't working label Jul 26, 2026
Comment thread CLAUDE.md
@steve-calvert-glean
steve-calvert-glean merged commit 4671149 into main Jul 27, 2026
1 check passed
@steve-calvert-glean
steve-calvert-glean deleted the fix/brace-expansion-audit-scope branch July 27, 2026 00:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bug Something isn't working

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant