Reviewed on 2026-09-10 after updating direct dependencies. The full audit reported 27 advisory entries in development dependencies; the production-only audit was clean. These are package-version findings, not proof of exploitability in Diffsplain's configured product surfaces.
pnpm-workspace.yaml contains version-bounded overrides. They upgrade only the
installed affected major lines, preserving newer patched versions and other
major lines. Keep both js-yaml 3 and 4; do not force all consumers onto one major.
| Package | Override target | Advisories |
|---|---|---|
| brace-expansion | 2.1.4 / 5.0.9 | GHSA-rgw5-rvv9-x895 |
| dompurify | 3.4.13 | GHSA-55q2-fjhq-7xh7 |
| fast-uri | 3.1.6 | GHSA-5jgf-p345-68v8, GHSA-7p8r-x3mc-p8w7, GHSA-f65p-4m7j-42xc, GHSA-fph4-wmhf-6fwf, GHSA-jqff-g426-hqxp |
| hono | 4.13.5 | GHSA-54fx-42gc-7vw4, GHSA-79qm-7rj5-m7r9, GHSA-8j4g-w8fx-2239, GHSA-crvj-82cr-hjcx, GHSA-f23p-vx2j-j53r, GHSA-g6gw-c38x-mqfc, GHSA-gqvv-2mrq-wpjv |
| image-size | npm:image-size-next@2.1.1 | GHSA-5p2g-fcmc-qvqq, GHSA-w3rx-r6r6-pgpr |
| js-yaml | 3.15.2 / 4.3.2 | GHSA-2883-xcg3-v3hh, GHSA-5p4m-2wfm-xmqj |
| nanoid | 3.3.18 | GHSA-2v37-7h3g-55p8 |
| path-to-regexp | 6.3.0 | GHSA-9wv6-86v2-598j |
| qs | 6.16.0 | GHSA-4mjr-xmp4-gh2g, GHSA-x5fp-wj9c-mxmx |
| svgo | 4.1.0 | GHSA-4vpr-x523-8j87, GHSA-w27v-7q3p-w38r |
Upstream image-size is archived. The audit suggests 2.0.3, but that version
was not published at review time. The alias switches publisher to
image-size-next, pinned to
2.1.1. Its security fix
adds entry-length, bounds, and forward-progress checks to the affected parsers.
The lockfile pins the published tarball integrity.
The published package was tested with malformed ICNS, JXL, and HEIF inputs:
upstream 2.0.2 timed out, while the fork rejected them. Valid ICNS, JXL, HEIF,
PNG, and SVG headers retained their dimensions. Keep the bounded regressions
in tests/dependency-overrides.test.mjs when evaluating a replacement.
A clean npm audit alone is insufficient here because aliasing changes the
package identity used for advisory matching.
Re-evaluate the fork's maintenance and security status at the next dependency update. Prefer a maintained upstream patched release if one becomes available; otherwise verify any replacement against the same cases and the docs build.
Most targets satisfy the parent package's dependency range.
@vercel/routing-utils@6.5.0 pins path-to-regexp to 6.1.0, so its override
intentionally replaces that exact pin with 6.3.0. Check route compilation as
well as the static docs build when changing or removing it. Diffsplain currently
deploys static docs to GitHub Pages, without a Vercel server adapter.
The release-age exceptions elsewhere in pnpm-workspace.yaml are separate from
these security overrides. They allow the explicitly requested latest direct
releases and their associated dependencies through pnpm's release-age policy.
Re-evaluate after each direct dependency update, especially Blume updates, and at the next dependency maintenance review. For each override:
- Use
pnpm why <package>to identify every parent retaining the affected line. - Remove that override in a working branch and run
pnpm install. - Check every resolved copy in
pnpm-lock.yaml, then runpnpm auditandpnpm audit --prod. A clean audit with the override still present does not prove the override is unnecessary. - If vulnerable versions return, restore the override and update the parent dependency when possible. Record any newly required patched minimum here.
- Before merging removal, run
pnpm run lint,pnpm test,pnpm run docs:check, andpnpm run docs:build.
Do not remove these overrides simply because an advisory was dismissed or because a newer version exists in the registry. The unoverridden dependency graph must resolve patched versions for every affected copy.