Repository navigation
Conversation
Add an `overrides` block to both package.json files for transitive dependencies whose parent asks for a vulnerable range even though a patched release exists. Root: `get-uri` (via release-it -> proxy-agent -> pac-proxy-agent) pins `basic-ftp` 5; override to 6.2.1+. Root audit is now clean. Docs: `docusaurus-plugin-llms` pins `minimatch` 9.0.3 and `yaml` 2.8.1 exactly (overridden to 9.0.7+ / 2.8.3+); `sockjs` gets `uuid` 11; `argparse` 2 drops the `sprintf-js` that js-yaml 3's CLI-only dependency pulled in; `postcss-selector-parser` 7.1.6+, `serialize-javascript` 7.0.5+ and `tinypool` 2.1.2+ replace the majors Docusaurus 3.10 still resolves. Docs audit goes from 52 findings to 29, all from the single `braces` advisory (GHSA-vfj7-8cjw-p6xm) that has no patched release. Verified: root typecheck/build/tests, release-it and get-uri still load, docs typecheck and production build.
There was a problem hiding this comment.
🟡 Changes recommended
The docs lockfile removes serve-handler’s required minimatch version, leaving an inconsistent dependency graph.
1 open finding
What changed in this PR
Adds temporary dependency overrides to address audit findings in development tooling and the docs site without changing published library code.
Changes:
- Adds overrides and refreshes both lockfiles.
- Records the audit improvements and remaining vulnerability.
- Documents override maintenance guidance.
| File | Description |
|---|---|
| package.json | Overrides get-uri’s basic-ftp dependency. |
| package-lock.json | Locks the updated FTP dependency. |
| docs/package.json | Adds docs dependency overrides. |
| docs/package-lock.json | Updates and deduplicates overridden dependencies. |
| CHANGELOG.md | Records audit remediation and remaining findings. |
| AGENTS.md | Documents override scope and removal guidance. |
Files not reviewed (1)
- docs/package-lock.json: Generated file
🧠 Review effort: Balanced
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| "version": "9.0.3", | ||
| "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", | ||
| "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", | ||
| "version": "9.0.9", |
There was a problem hiding this comment.
Good catch, and it was worse than a lockfile inconsistency: serve-handler calls require('minimatch') as a function, and minimatch 9's CJS entry exports an object, so docusaurus serve would have thrown on its rewrite path. The nested override leaked because once the overridden copy is hoisted, npm dedupes other dependents onto it too (reproducible with a fresh --package-lock-only resolve, not just the incremental install).
Fixed in 8ebea36 by keying every override on the range the dependent asks for ("minimatch@9": "^9.0.7", "yaml@2", "uuid@8", "basic-ftp@5") instead of nesting under a parent. A keyed rule only matches edges whose requested range intersects the key, so serve-handler/node_modules/minimatch@3.1.5 is back in the lockfile and npm ls minimatch shows serve-handler on 3.1.5 and docusaurus-plugin-llms on 9.0.9. Audit results are unchanged (root 0, docs 29 from braces).
Verified: clean npm ci from the lockfile in a scratch directory (lockfile byte-identical afterwards, no invalid/missing nodes), docs production build, and a docusaurus serve smoke test returning 200 for /, /docs/api and /llms.txt. AGENTS.md guidance updated to say the same.
… dependents
A parent-scoped override ("docusaurus-plugin-llms": { "minimatch": ... })
leaked past its parent: once the overridden copy was hoisted, npm deduped
serve-handler's minimatch@3.1.5 edge onto minimatch 9.0.9 and dropped the
nested copy from the lockfile. serve-handler calls require('minimatch') as
a function, which minimatch 9's CJS entry is not, so `docusaurus serve`
would have thrown on its rewrite path.
Keying each rule on the range the dependent asks for ("minimatch@9",
"yaml@2", "uuid@8", "basic-ftp@5") only matches edges requesting that
range, so serve-handler keeps its own 3.1.5 subtree. Audit results are
unchanged (root 0, docs 29 from the braces advisory). Verified with a
clean `npm ci` from the lockfile, the docs production build and a
`docusaurus serve` smoke test. AGENTS.md guidance corrected to match.
There was a problem hiding this comment.
🔵 Needs a closer look
Several overrides cross major versions and warrant human confirmation of tooling compatibility beyond the reported build and smoke checks.
1 open finding
Files not reviewed (1)
- docs/package-lock.json: Generated file
🧠 Review effort: Balanced

Summary
Clears the
npm auditfindings that upstream pins were holding open, in both the root package and the docs site, using npmoverrides. No changes to the published library.Root (
package.json)basic-ftp<=6.2.0 (GHSA-c475-qrg2-pj4r)get-uri(release-it → proxy-agent → pac-proxy-agent → get-uri) pinsbasic-ftp@^5basic-ftpto^6.2.1underget-urinpm audit→ 0 vulnerabilities (was 6 high). The only 6.0 breaking change is that separate FTP transfer hosts are off by default, whichget-urinever opts into.npm audit fix --forcewould have downgraded release-it to 15.10.3, which is not a real fix.Docs (
docs/package.json)minimatch9.0.0–9.0.6 (3 ReDoS advisories)docusaurus-plugin-llmspins9.0.3exactly^9.0.7scoped under the pluginyaml<2.8.3docusaurus-plugin-llmspins2.8.1exactly^2.8.3scoped under the pluginsprintf-js<=1.1.3 (no patched release)gray-matter→ js-yaml 3 →argparse@1→sprintf-jsargparse^2.0.1; js-yaml 3 only uses argparse in its CLI, and js-yaml 4 already wants^2.0.1, sosprintf-jsleaves the treeuuid<11.1.1sockjs(webpack-dev-server) wants^8.3.2^11.1.1scoped undersockjs; it only callsv4()postcss-selector-parser<7.1.6^6^7.1.6top-level (7.0.0's only change is safe insertion during iteration)serialize-javascript<=7.0.4 (RCE + DoS)^6^7.0.5top-level (7.0.0 only raised Node to 20+)tinypool<=2.1.1 (prototype pollution → RCE)@docusaurus/corewants^1.0.2^2.1.2top-level (2.0.0 only dropped Node 18; Docusaurus loads it via dynamicimport(), so ESM-only is fine)npm audit→ 29 high, all one advisory (was 52: 15 critical, 17 high, 20 moderate). Everything left traces back tobracesGHSA-vfj7-8cjw-p6xm, whose vulnerable range is<=3.0.3and whose latest release is 3.0.3, so there is nothing to override to yet.A nested
"gray-matter": { "argparse": ... }override did not apply to the grandchild under npm 11.19, so that one is top-level. This and the "overrides are temporary, drop them when upstream catches up" guidance are recorded in a newDependency overridessection ofAGENTS.md.Verification
npm run typecheck,npm run build,npm test(2361 passing),npx release-it --version, andget-uriimportsbasic-ftp6.2.3 cleanlynpm run typecheckandnpm run build(Docusaurus production build + CSP headers), withgray-matterloading js-yaml 3 withoutargparsenpm run format:checkandnpm run lintcleannpm run release:increment→Changed -> patch