fix(deps): brace-expansion 5.0.8 on top of #50 (5.0.7 is still vulnerable) - #65
fix(deps): brace-expansion 5.0.8 on top of #50 (5.0.7 is still vulnerable)#65yakimoto wants to merge 3 commits into
Conversation
Bumps [brace-expansion](https://github.com/juliangruber/brace-expansion) to 5.0.7 and updates ancestor dependency [eslint](https://github.com/eslint/eslint). These dependencies need to be updated together. Updates `brace-expansion` from 5.0.6 to 5.0.7 - [Release notes](https://github.com/juliangruber/brace-expansion/releases) - [Commits](juliangruber/brace-expansion@v5.0.6...v5.0.7) Updates `eslint` from 9.39.4 to 10.7.0 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v9.39.4...v10.7.0) --- updated-dependencies: - dependency-name: brace-expansion dependency-version: 5.0.7 dependency-type: indirect - dependency-name: eslint dependency-version: 10.7.0 dependency-type: direct:development ... Signed-off-by: dependabot[bot] <support@github.com>
|
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_a63ec7c5-d234-4f37-a039-c11cb5279763) |
|
Review the following changes in direct dependencies. Learn more about Socket for GitHub.
|
📝 WalkthroughWalkthroughThe ESLint development dependency in ChangesESLint Version Update
Estimated code review effort: 1 (Trivial) | ~2 minutes 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
✨ Simplify code
Warning Review ran into problems🔥 ProblemsThese MCP integrations need to be re-authenticated in the Integrations settings: Sentry Comment |
Builds on #50 and takes
brace-expansionone version further, to the one that actually clears the advisory.Four lines on top of #50. Merge this instead of #50 — it contains #50 in full.
#50 does the hard part, then stops one version short
brace-expansionhas two live advisories. #50 targets the older>= 3.0.0, < 5.0.7(fix5.0.7). The newer — GHSA-mh99-v99m-4gvg, range<= 5.0.7, patched in5.0.8— puts5.0.7inside the vulnerable range. So #50 lands on a version that is still flagged.Measured, dev scope included, on all three states:
brace-expansionmain@eb79119Why #50's approach is the right one, and worth saying out loud
I expected this repo to be unfixable. It was the worst case in the fleet survey (wave-av/claude-workstation#562):
maincarries two trees at once —minimatch@3.1.5doesconst expand = require('brace-expansion')and calls the result as a function, while every patchedbrace-expansionexports an object. Forcing a patched version onto that tree producesTypeError: expand is not a functionat runtime whilenpm auditreports clean — claude-workstation#554, where it also passed 195/195 tests. And the root tree's own alert (< 1.1.16) is a trap inside the trap:1.1.16is API-compatible, but it was published 2026-07-08, before the fix landed on 2026-07-23, and the v1 line never got the backport. API-compatible is not the same as patched.The conclusion I'd drawn from that was "dismiss it, no safe fix exists." That was wrong, and #50 is why. Rather than overriding
brace-expansionunder a consumer that can't take it, #50 upgrades the consumer: bumping eslint moves@eslint/config-arrayfromminimatch: ^3.1.5to^10.2.4and drops@eslint/eslintrcentirely — the two things that were pinningminimatch@3. The result is a single hoisted tree with nominimatch@3anywhere:Once
minimatch@3is gone,5.0.8is simply safe —minimatch@10uses named exports and expects the object shape. The general rule, the one worth keeping: when a transitive dependency can't be patched, upgrade the parent that pins it rather than overriding the child.It also incidentally clears the
js-yamlHIGH (alert #5), because@eslint/eslintrcwas what pulledjs-yaml@4.2.0in. That makes #53 redundant — see my comment there.Verification
CI can't run — Actions are refusing every job org-wide on an account-level billing lock (
plan=free,locked=yes, re-confirmed live today). All local, Node 22.14.0:npm run lintis the one that matters here, not a formality: eslint is the actual consumer ofminimatch/brace-expansion, and #50 upgrades eslint itself. A clean--max-warnings 0run oversrc/exercises the changed dependency end-to-end.This repo has no test suite, so I also drove the module directly —
npm auditonly compares version strings and never loads anything:That last line is precisely the shape that breaks
minimatch@3— and brace expansion resolves correctly throughminimatch@10.Measurement caveat: this workstation exports
NODE_ENV=production, which makesnpm auditinheritomit=devand hide dev-scope entries entirely — which is all of these. Every figure above was taken withNODE_ENV=developmentset explicitly.Unrelated thing I noticed
This repo has no
.gitignore, sonode_modules/shows up as untracked rather than ignored. On a public repo that's onegit add -Aaway from a very bad commit. Not fixing it in this PR; flagging it as worth its own.Note
Cursor Bugbot is generating a summary for commit b1d1b0f. Configure here.
Need help on this PR? Tag
@codesmith-botwith what you need. Autofix is enabled.Summary by cubic
Upgrades the linting stack to clear the remaining
brace-expansionadvisory by moving toeslint^10.7.0 and resolvingbrace-expansionto 5.0.8. This hoistsminimatch@10and removes legacy deps.Dependencies
eslintto^10.7.0(hoistsminimatch@10, removes@eslint/eslintrc).brace-expansionto5.0.8(fixes GHSA-mh99-v99m-4gvg) withbalanced-match^4; dropsjs-yaml,chalk/supports-color, and other old internals.Migration
eslinttooling.Written for commit ba923b1. Summary will update on new commits.