Revised 2026-09-04 against main @ e5c739b. The original framing — "most of these have no
upstream fix" — has since inverted: every open alert now names a patched version. The
superseded triage and a full before/after of what changed is preserved in
this comment.
GitHub shows 12 open Dependabot alerts: 8 high, 4 moderate. Six reach the production
dependency tree; the rest are dev-only.
Every one of them now has a patched version available. None of the patched versions requires
a major bump, and each falls inside a semver range its parent already declares — so this is
expected to be a lockfile refresh, not a set of overrides entries or written risk acceptances.
Open alerts
Production exposure
Reached through lighthouse and glob. Installed versions and the range each parent declares:
| Path |
Installed |
Needs |
Parent declares |
In range |
lighthouse → ws |
7.5.10 |
7.5.11 |
^7.0.0 |
yes |
lighthouse → lodash-es |
4.17.23 |
4.18.0 (4.18.1 published) |
^4.17.21 |
yes |
glob → minimatch → brace-expansion |
5.0.5 |
5.0.9 (current) |
^5.0.5 |
yes |
lodash-es is the one that deserves a real look rather than a reflexive bump: it sits in
Lighthouse's report rendering, and audited page content is attacker-controlled — auditing a
hostile site is this tool's normal job. The advisories are code injection via _.template and
prototype pollution via _.unset / _.omit.
For ws and brace-expansion, confirm the threat model rather than assuming it: the ws peer
is the headless Chrome this CLI launched itself, and brace-expansion input is the glob the
operator typed.
ws@8.21.3 also exists in the tree via puppeteer-core, but carries no open alert — only
the 7.5.10 instance on the Lighthouse path is flagged.
Dev-only exposure
js-yaml and qs, reached through eslint, @commitlint/*, cosmiconfig and the
@googleapis/* type packages, plus brace-expansion@1.1.13/1.1.14 via the minimatch@3 that
eslint 8 pulls in.
Direct dependency status
| Package |
Installed |
Latest |
Upgrade |
lighthouse |
13.4.1 |
13.4.1 |
none |
glob |
13.0.6 |
13.0.6 |
none |
@commitlint/cli |
21.2.2 |
21.2.2 |
none |
puppeteer-core |
25.9.0 |
25.10.0 |
in-range patch |
eslint |
8.57.1 |
10.9.1 |
two majors |
Unrelated aside worth knowing before anyone regenerates the lockfile from scratch: npm outdated
reports lighthouse Latest as 12.8.2 while 13.4.1 is installed, so the latest dist-tag is
behind the pinned version and a fresh npm install lighthouse would resolve to v12.
The one real upgrade
eslint 8.57.1 → 10.9.1 clears most of the dev-only findings, but eslint 8 is EOL and 9+
requires migrating .eslintrc to flat config (eslint.config.js). That also drags
@netcentric/eslint-config, eslint-plugin-import and eslint-plugin-unused-imports, which must
support flat config first. This should be split into its own issue rather than done here.
Approach
Per the repo's dependency discipline, and explicitly not a blanket npm audit fix:
- One package per change, so a break is attributable and the revert is clean.
- Read the changelog, not the version number.
- Green suite before and after, with the lockfile diff reviewed.
- Record an explicit verdict for any advisory that turns out to resist a fix.
Plan
- Refresh the lockfile and confirm which runtime alerts clear on their own. Review the diff.
- Bump
puppeteer-core to 25.10.0 as its own change.
- Handle whatever residue survives step 1 — and only then decide whether an
overrides entry or
a written risk acceptance is needed anywhere, and where such a record should live.
- Split the eslint 9/10 flat-config migration into its own issue.
Unverified
Whether the lockfile refresh in step 1 actually lands the patched versions is inference from
the semver ranges above, not a confirmed result. It could not be verified in the environment
where this was triaged: npm audit times out against
registry.npmjs.org/-/npm/v1/security/audits/quick, and both npm update --package-lock-only
and a clean npm install --package-lock-only fail with Cannot read properties of null (reading 'edgesOut') on npm 10.9.2 — reproducible from a bare package.json in an empty directory, so it
is environmental rather than a property of this tree. Confirm before writing any override.
Verification
Whatever lands: npm run lint, npm test, npm run generate-types, npm run check-types, plus
a reviewed lockfile diff and a re-run of npm audit showing the expected before/after delta.
GitHub shows 12 open Dependabot alerts: 8 high, 4 moderate. Six reach the production
dependency tree; the rest are dev-only.
Every one of them now has a patched version available. None of the patched versions requires
a major bump, and each falls inside a semver range its parent already declares — so this is
expected to be a lockfile refresh, not a set of
overridesentries or written risk acceptances.Open alerts
wslodash-eslodash-esbrace-expansionbrace-expansionbrace-expansionbrace-expansionbrace-expansionjs-yamljs-yamljs-yamlqsProduction exposure
Reached through
lighthouseandglob. Installed versions and the range each parent declares:lighthouse→ws^7.0.0lighthouse→lodash-es^4.17.21glob→minimatch→brace-expansion^5.0.5lodash-esis the one that deserves a real look rather than a reflexive bump: it sits inLighthouse's report rendering, and audited page content is attacker-controlled — auditing a
hostile site is this tool's normal job. The advisories are code injection via
_.templateandprototype pollution via
_.unset/_.omit.For
wsandbrace-expansion, confirm the threat model rather than assuming it: thewspeeris the headless Chrome this CLI launched itself, and
brace-expansioninput is the glob theoperator typed.
ws@8.21.3also exists in the tree viapuppeteer-core, but carries no open alert — onlythe 7.5.10 instance on the Lighthouse path is flagged.
Dev-only exposure
js-yamlandqs, reached througheslint,@commitlint/*,cosmiconfigand the@googleapis/*type packages, plusbrace-expansion@1.1.13/1.1.14via theminimatch@3thateslint 8 pulls in.
Direct dependency status
lighthouseglob@commitlint/clipuppeteer-coreeslintUnrelated aside worth knowing before anyone regenerates the lockfile from scratch:
npm outdatedreports
lighthouseLatest as 12.8.2 while 13.4.1 is installed, so thelatestdist-tag isbehind the pinned version and a fresh
npm install lighthousewould resolve to v12.The one real upgrade
eslint8.57.1 → 10.9.1 clears most of the dev-only findings, but eslint 8 is EOL and 9+requires migrating
.eslintrcto flat config (eslint.config.js). That also drags@netcentric/eslint-config,eslint-plugin-importandeslint-plugin-unused-imports, which mustsupport flat config first. This should be split into its own issue rather than done here.
Approach
Per the repo's dependency discipline, and explicitly not a blanket
npm audit fix:Plan
puppeteer-coreto 25.10.0 as its own change.overridesentry ora written risk acceptance is needed anywhere, and where such a record should live.
Unverified
Whether the lockfile refresh in step 1 actually lands the patched versions is inference from
the semver ranges above, not a confirmed result. It could not be verified in the environment
where this was triaged:
npm audittimes out againstregistry.npmjs.org/-/npm/v1/security/audits/quick, and bothnpm update --package-lock-onlyand a clean
npm install --package-lock-onlyfail withCannot read properties of null (reading 'edgesOut')on npm 10.9.2 — reproducible from a barepackage.jsonin an empty directory, so itis environmental rather than a property of this tree. Confirm before writing any override.
Verification
Whatever lands:
npm run lint,npm test,npm run generate-types,npm run check-types, plusa reviewed lockfile diff and a re-run of
npm auditshowing the expected before/after delta.