[PD1-80] Refresh dependencies and drop the js-yaml/test-exclude resolutions - #35
Merged
Merged
Conversation
Clears GHSA-3jxr-9vmj-r5cp (high, brace-expansion 5.x) and refreshes the whole transitive tree within the existing direct-dependency ranges. The `resolutions` block is no longer needed. It was added in #10 to force semver-major overrides on two packages that Jest's coverage path pins to vulnerable ranges: babel-plugin-istanbul -> test-exclude ^6.0.0 babel-plugin-istanbul -> @istanbuljs/load-nyc-config -> js-yaml ^3.13.1 At the time neither range contained a patched version, so the only way out was to override across a major. Upstream has since fixed that in range: js-yaml backported the merge-key and prototype-pollution fixes to the 3.x line (3.15.2 is clean; 3.14.1 carries four advisories), and babel-plugin-istanbul moved to `test-exclude ^7.0.1`, which resolves to a clean 7.0.2. Re-resolving without the overrides now lands on patched versions on its own. Runtime impact is limited to axios 1.18.0 -> 1.20.0; every other package in the shipped dependency tree resolves to the same version as before. The rest of the diff is dev-scope. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
joshuanapoli
force-pushed
the
deps/clear-vulns
branch
from
September 6, 2026 12:49
6a016c4 to
537606f
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Clears the last open Dependabot alert on this repo and refreshes the transitive tree. The
resolutionsblock is removed — it is no longer load-bearing.Vulnerability cleared
GHSA-3jxr-9vmj-r5cp(high, dev scope) —brace-expansion5.0.4 → 5.0.9. The recently merged #32 only fixed the 2.x resolution; the 5.x path viaminimatch@10.2.4was untouched.minimatchasks for^5.0.2, so this is a plain in-range bump and never needed a resolution.Why the resolutions can now be removed
Both entries existed to work around the same root cause — Jest's coverage instrumentation:
babel-plugin-istanbulis a hard dependency of@jest/transform, so it cannot be dropped from the tree — not even by transforming with@swc/jest, which is what we do. When #10 added the overrides, neither pinned range contained a patched version, so forcing a semver-major (js-yaml ^4,test-exclude ^8) was the only option.That is no longer true. Upstream fixed both inside the pinned ranges:
3.14.1carries four advisories (GHSA-5p4m-2wfm-xmqj,GHSA-52cp-r559-cp3m,GHSA-h67p-54hq-rp68,GHSA-mh29-5h37-fv8m);3.15.2has none, and it satisfies^3.13.1.test-exclude ^7.0.1, which resolves to a clean7.0.2.So re-resolving with no overrides lands on patched versions unaided. I verified the result against the GitHub Advisory Database (
js-yaml@3.15.2,test-exclude@7.0.2,glob@10.5.0,brace-expansion@2.1.4,brace-expansion@5.0.9— all clean) and withyarn npm audit --all --recursive, whose only remaining output is a deprecation notice onglob@10.5.0, not a CVE.Removing them is also a correctness win, because both overrides were semver-major and therefore unsound in principle. They happened to be safe — I checked the actual call sites:
@istanbuljs/load-nyc-configonly callsrequire('js-yaml').load(), which exists in both 3.x and 4.x, andbabel-plugin-istanbulonly usesnew TestExclude()andshouldInstrument(), both unchanged and synchronous in 8.x. But nothing was enforcing that, and CI never exercised it (see below). Dropping the overrides removes a standing risk rather than adding one.Risks
Low, but this is a large diff, so worth being precise about what actually moves.
axios1.18.0 → 1.20.0. Every other package reachable fromdependencies(commander,follow-redirects,form-data,proxy-from-env,asynckit,combined-stream,mime-types) resolves to the identical version as onmain.src/uses onlyaxios.getwith headers/params and response generics;tscbuilds clean against the new types.ci.ymlrunsyarn testwithout--coverage, so the instrumentation code that consumestest-excludeandjs-yamlnever ran there — the old overrides were effectively unverified. I ranyarn test --coveragelocally against this branch: instrumentation works and reports 82.14% statements across 4 suites.Verification
Full CI suite locally, plus coverage:
yarn install --immutable— cleanyarn prettier --check .— cleanyarn eslint .— cleanyarn test— 25 passed, 4 suitesyarn test --coverage— 25 passed, instrumentation exercisedyarn build— cleanDeliberately not included
These are behind a major and unrelated to any advisory, so they do not belong in a security-cleanup PR:
commandertypescript@eslint/markdownglobals@types/nodeprettierWorth a separate look:
@types/nodeis pinned to^20while CI runs Node 24, so we type-check against an older stdlib than we execute on.