Repository navigation
fix(deps): retire obsolete qs and follow-redirects overrides (+Claude) - #276
dhruv-parekh-cs wants to merge 1 commit into
Conversation
Remove the `qs ~6.16.2` and `follow-redirects ^1.16.2` npm overrides. A fresh resolution without them already yields qs >= 6.16.2 (express 4.22.3 declares qs ~6.16.0) and follow-redirects 1.16.2 (latest, via axios), so the overrides no longer constrain anything. package-lock.json is unchanged and installed versions are identical before and after. Validated: build, 139 jest tests, 31 integration tests and the mocha unit tests pass; snyk test --all-projects shows no qs or follow-redirects finding. Committed with --no-verify, approved by the operator: the pre-commit Snyk hook fails on four pre-existing findings with no upstream fix (picomatch, adm-zip, deepmerge, minimatch) that this change does not touch. #claude_code# 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude <noreply@anthropic.com>
✅ Snyk checks have passed. No issues have been found so far.
💻 Catch issues earlier using the plugins for VS Code, JetBrains IDEs, Visual Studio, and Eclipse. |
🔒 Security Scan Results
⏱️ SLA Breach Summary
ℹ️ Vulnerabilities Without Available Fixes (Informational Only)The following vulnerabilities were detected but do not have fixes available (no upgrade or patch). These are excluded from failure thresholds:
✅ BUILD PASSED - All security checks passed |
dhruv-parekh-cs
left a comment
There was a problem hiding this comment.
Reviewed the whole PR: no high or medium issues. Not approved: own PR.
Cross-repo (snyk-fix 02-Nov-2026 batch 4): independent dependency and image changes, any merge order.
— 🤖 launch-pr-review-agent (Claude)
Generated by Claude Code
dhruv-parekh-cs
left a comment
There was a problem hiding this comment.
Automated code review (snyk-fix 02-Nov-2026): 1 finding(s), High/Medium only.
| "prepare": "husky" | ||
| }, | ||
| "overrides": { | ||
| "qs": "~6.16.2", |
There was a problem hiding this comment.
[Medium] These two overrides aren't obsolete: they are the only manifest floor above the vulnerable versions.
In the resolved tree, express and body-parser declare qs ~6.16.0 (and @contentstack/management declares qs ^6.16.0), so 6.16.0 and 6.16.1 (SNYK-JS-QS-20943482 / SNYK-JS-QS-21755395) are still in range. axios declares follow-redirects ^1.16.0, so 1.16.1 (GHSA-mrwp-f3q8-3g9p) is also still in range. Today only package-lock.json keeps qs@6.16.2 / follow-redirects@1.16.2. A lockfile regeneration, a lockfile-conflict re-resolve, or an install from a mirror or cache that holds the older patch can silently put a vulnerable version back, with no override to stop it.
Suggested fix: keep both overrides. Retirement should wait until each parent's own declared range excludes the vulnerable versions, not just until the current resolution happens to land above them. That would make this PR a no-op, so closing it is reasonable.
Summary
Automated snyk-fix sweep (02-Nov-2026). Retires two npm
overridesentries that are no longer needed. No advisory is fixed by this PR and no dependency version changes:package-lock.jsonis untouched and the installedqs(6.16.2) andfollow-redirects(1.16.2) are identical before and after.Retired overrides (step 2.5)
"qs": "~6.16.2"express@4.22.3now declaresqs ~6.16.0andbody-parser/@contentstack/managementdedupe to it. A fresh resolution with no lockfile and no override yieldsqs6.16.2 / 6.17.1, both at or above the override floor."follow-redirects": "^1.16.2"follow-redirects1.16.2 (the latest release) viaaxios.Verification: after removal,
npm installkeeps the lock unchanged,npm run buildpasses,npm run test:unit(mocha + jest, 139 jest tests) passes,npm run test:integration(31 tests) passes,npm ci --dry-runaccepts the lockfile, and thesnyk test --all-projectsresult contains noqsorfollow-redirectsfinding. The remaining overrides (tty-table > csv,tmp,serialize-javascript,diff) were each tested for removal and are still needed (their advisories return without them), so they are left in place.Hooks bypassed (operator approved)
The commit and push were made with
--no-verify, with explicit operator approval for this repo and this change only. The pre-commit hook runssnyk test --all-projects --fail-on=all, which fails on the four pre-existing, unfixable findings listed below (picomatch, adm-zip, deepmerge, minimatch). This PR does not touch them. The secrets scan was not part of the bypass concern: the diff is two removed lines inpackage.json.Ecosystem-native audit (step 1.5)
npm audit: 61 (5 low, 56 moderate) before, 61 after.npm audit fix(non-force, run with the@contentstackscope pointed at npmjs.org, see below) rewrote about 370 lockfile lines but cleared no advisory (identical advisory set), so that churn was discarded. Everything remaining requires a breaking change (--force) and is dev-tooling (eslint, jest, mocha, nyc, oclif) or@oclif/core.Snyk (
--all-projects, 1 project:package-lock.json)Findings are the same before and after this PR (4 distinct ids), none fixable without a risky change. Needs human review, not resolved by this PR:
SNYK-JS-MINIMATCH-22111072(medium, CVE-2026-118764): fixed only inminimatch11.0.1, published 2026-11-01.@oclif/corepins^10.2.5andfilelistpins 5.x. Tested a global override"minimatch": "^11.0.1": build, jest and integration tests pass, but it silently breaksmocha's test discovery (npm run test:unitfails with "No test files found", because mocha's glob needs minimatch 5 and 9). Reverted. A scoped override under@oclif/corewas not attempted because it forces an untested major on a consumer that pins^10. Revisit when@oclif/coreships a release on minimatch 11.SNYK-JS-PICOMATCH-21248802(high, CVE-2026-112366, picomatch 4.0.5):fixedIn: [], vulnerable*, no upstream fix at any version (4.0.7 is latest).SNYK-JS-ADMZIP-21707815(medium, CVE-2026-116137, adm-zip 0.6.1):fixedIn: [], vulnerable*, no upstream fix.SNYK-JS-DEEPMERGE-19964053(medium, CVE-2026-93753, deepmerge 4.3.1 via@rollup/plugin-node-resolve):fixedIn: [], no upstream fix (stuck 3+ runs).Warnings
.npmrcmaps@contentstackto GitHub Packages, but@contentstack/cli-commandand@contentstack/cli-utilitieslive on npmjs.org, so a plainnpm audit fixfails withETARGET. The audit run used--@contentstack:registry=https://registry.npmjs.org/on the command line; no credential or config file was touched.npm testas a whole was not run as one command; its three parts (mocha unit, jest, integration) were run vianpm run test:unitandnpm run test:integration..github/workflowsfile needed a version sync (no runtime version changed).Self code review (step 7.5)
2 rounds. Round 1 found one High: the trial
minimatch ^11.0.1override broke mocha test discovery and rewrote the dev-tool dependency tree (eslint, mocha, nyc); fixed by reverting it and parking the finding above. Round 2 over the final 2-line diff, re-derived from the currentorigin/development, found no High or Medium issues (no comments added or left behind, no tombstone, lockfile unchanged, no behavior surface touched).#claude_code#
🤖 Generated with Claude Code