Skip to content

chore(deps): drop the 82 pnpm.overrides in frontend/ that never applied - #182

Merged
acamarata merged 1 commit into
mainfrom
chore/drop-dead-frontend-overrides
Sep 14, 2026
Merged

acamarata merged 1 commit into
mainfrom
chore/drop-dead-frontend-overrides

Conversation

@acamarata

Copy link
Copy Markdown
Collaborator

This deletes 82 lines that look like CVE patches. They are not — pnpm says so on
every install, and I verified it rather than taking pnpm's word for it.

WARN  The field "pnpm.overrides" was found in frontend/package.json.
This will not take effect. You should configure "pnpm.overrides" at the root
of the workspace instead.

frontend is a workspace member with no lockfile of its own, and no workflow
installs it standalone — all 71 pnpm install invocations in this repo's
workflows run at the root. Those 82 entries have never resolved anything.

That is the reason to remove them, not a reason to hesitate. A block that
reads as 82 CVE patches and applies none answers "is this handled?" wrongly, which
is worse than not answering at all.

Every entry was checked before deletion

Against the lockfile, with real semver — for each selector, whether any installed
version matches it and fails to satisfy the target:

outcome count
redundant with root coverage, or targeting a version not installed 36 packages
asks for more than root provides 1
would change a resolution 2

The one that asks for more is preserved. `serialize-javascript@<7.0.5 ->

=7.0.5versus root's>=7.0.3. Root moves to >=7.0.5`. The installed version
is already 7.0.5, so nothing resolves differently — this keeps the intent, not a
behaviour change.

The two that would change something are deliberately not carried over:

  • @tootallnate/once@<3.0.1 -> >=3.0.1, installed 2.0.1. That is
    GHSA-vpq2-c234-7xj6, severity low, and Dependabot does not raise it on this
    repo. Worth its own decision, not a silent rider on a cleanup.
  • path-to-regexp -> 8.4.0, an unconditional pin. Installed are 0.1.13, 6.3.0
    and 8.4.2. Promoting this to root would drag the first two across two majors.
    It would break builds, not fix them — which is probably why it never mattered
    that this block was inert.

The lockfile does not move

The only lockfile line in this commit is the serialize-javascript override,
matching the root package.json change.

A regeneration on unmodified origin/main produces the same
third-party-web 0.29.2 -> 0.30.0 change from a floating range, so that drift is
pre-existing and is excluded here rather than bundled in.

Verification

Run on this commit in an isolated checkout with no ../packages sibling — the way
CI runs, since no nchat workflow clones that sibling:

pnpm install --frozen-lockfile
exit 0

and the pnpm.overrides WARN count drops from 1 to 0.

pnpm prints this on every install:

    WARN  The field "pnpm.overrides" was found in frontend/package.json.
    This will not take effect. You should configure "pnpm.overrides" at the
    root of the workspace instead.

It is right. `frontend` is a workspace member with no lockfile of its own, and no
workflow installs it standalone — all 71 `pnpm install` invocations in this repo's
workflows run at the root. So those 82 entries have never resolved anything. They
read as security posture and are inert.

That is the reason to remove them rather than leave them: a block that looks like
82 CVE patches but applies none is worse than no block, because it answers the
question "is this handled?" wrongly.

Checked every entry before deleting, against the lockfile with real semver rather
than by eye:

- 39 distinct packages. For each selector, whether any INSTALLED version matches
  it and fails to satisfy the target.
- Exactly one entry asks for more than the root overrides already provide —
  `serialize-javascript@<7.0.5 -> >=7.0.5` against root's `>=7.0.3`. That intent is
  preserved: root moves to `>=7.0.5`. The installed version is already 7.0.5, so
  nothing resolves differently.
- Two entries would have changed something and are deliberately NOT carried over.
  `@tootallnate/once@<3.0.1 -> >=3.0.1` (installed 2.0.1) is GHSA-vpq2-c234-7xj6,
  severity LOW, and Dependabot does not raise it on this repo. `path-to-regexp ->
  8.4.0` is an unconditional pin that would drag the installed 0.1.13 and 6.3.0
  consumers across two majors — moving it to root would break builds, not fix them.
- Everything else is redundant with root coverage or targets a version not
  installed here.

The lockfile does not move. A control regeneration on unmodified origin/main
produces the same `third-party-web 0.29.2 -> 0.30.0` drift from a floating range,
so that is pre-existing and is excluded here. The only lockfile line in this commit
is the serialize-javascript override, matching the root package.json change.
@github-actions

Copy link
Copy Markdown

⚠️ Deprecation Warning: The deny-licenses option is deprecated for possible removal in the next major release. For more information, see issue 997.

Dependency Review

✅ No vulnerabilities or license issues or OpenSSF Scorecard issues found.

Scanned Files

None

@github-actions

Copy link
Copy Markdown

Coverage after merging chore/drop-dead-frontend-overrides into main will be

30.09%

Coverage Report
FileStmtsBranchesFuncsLinesUncovered Lines
src
   middleware.ts0%0%0%0%100, 100, 108, 116–117, 117–118, 122–123, 123–124, 128–129, 129–130, 133, 141, 143–144, 144, 144, 144–145, 151–152, 152–154, 154, 154, 154–156, 156–157, 157, 157, 16, 162, 164, 172, 179–181, 196, 198, 198, 198, 200, 204, 204, 21, 210, 210, 210, 210, 210, 210, 217, 217, 220, 230, 233, 236–240, 246, 246–247, 254, 256, 26, 262–263, 266, 266–267, 272–273, 278, 282, 282, 282, 282, 282, 284, 288, 290, 290–292, 295, 295–296, 303, 306, 306, 306, 306, 306, 306, 312–313, 313, 313, 317–318, 318, 318–319, 322, 322, 324, 324–325, 325, 325, 325, 325, 331–332, 334–335, 339, 339, 341, 341–345, 349, 349, 349, 349–350, 350, 352–355, 360–361, 365–366, 372, 40, 45, 50, 55, 60, 66–67, 67–68, 70, 70, 70, 78, 85, 92, 99
src/app
   error.tsx0%100%0%0%16–17, 19, 3–5
   layout.tsx0%0%0%0%10, 107, 123, 147, 150, 2, 20, 20, 20, 22, 22, 22, 226, 226, 24, 3–5, 8
   loading.tsx0%100%0%0%1, 7
   not-found.tsx0%100%0%0%1, 7
   page.tsx0%0%0%0%3, 35–38, 4, 40, 40, 40, 42–43, 43, 46, 46–48, 5, 52, 52, 52, 52, 52, 54, 54–55, 57, 6, 60–61, 65, 7, 73
src/app/(authenticated)/bookmarks
   page.tsx0%100%0%0%10–12, 14, 9
src/app/activity
   page.tsx0%0%0%0%10, 113, 113, 134, 142, 142, 147, 16, 162, 162, 162, 167, 167, 167, 17, 171, 18, 184, 186, 186, 189, 191, 191, 191, 191–193, 198, 205, 205, 210, 210, 222, 229, 229, 58, 74, 77, 80, 80–81, 9, 91–92
src/app/admin
   loading.tsx0%0%0%0%1, 104, 2–3, 38, 42, 42, 77, 9, 91
   page.tsx0%0%0%0%100–101, 103–104, 104, 104, 104, 104–105, 109–111, 111, 111, 111, 111–112, 115, 115, 115, 115, 115–116, 17–19, 199, 20–21, 239, 248, 248, 251, 251, 257, 261, 261, 28–29, 3, 30–31, 36, 39, 4, 43, 5, 52, 6–7, 90, 97–99
src/app/admin/advanced
   page.tsx0%0%0%0%106–110, 112–113, 113, 113, 113, 113–114, 118, 118, 118, 118, 118–119, 14–15, 25–26, 33–38, 392, 394, 41–45, 48, 77
src/app/admin/analytics
   page.tsx0%0%0%0%100, 100, 100, 100, 100, 103–107, 117, 124–125, 125, 130, 133, 133, 133–135, 135–137, 141, 141, 141–143, 143–145, 15, 154–159, 16, 160, 160, 163, 167–168, 168, 168–169, 169, 169, 17, 171, 171, 171, 173, 177, 18, 181–182, 182–183, 191, 193, 196, 196, 196–197, 200, 200, 208–209, 209–210, 216, 219, 219, 224–226, 226, 226–228, 228, 228, 230, 25, 256–257, 259, 26, 263, 265–266, 269, 271–279, 282, 282, 3, 313, 33, 331, 331, 34–36, 4, 41, 44, 49, 5, 52, 57, 60, 65, 68, 73, 76, 81, 84, 88, 96–98
src/app/admin/audit
   page.tsx0%0%0%0%116–117, 119–120, 123, 123, 123, 123, 123, 123, 125, 127, 129–130, 132, 134, 136, 138, 140, 143–144, 147, 149, 149, 149, 151, 151, 155, 163, 163, 171, 171, 177, 177, 189, 19, 196–198, 206, 209, 21, 211–212, 215–216, 216, 216, 216, 216–217, 22, 222–223, 225–229, 23, 233–234, 236–240, 243–244, 247–250, 252–255, 258, 258, 258, 258, 258–259, 263–267, 28, 289, 289, 291, 291, 299, 30, 303, 305, 305, 307, 307, 31, 322, 322, 43, 50, 59–60, 67, 7, 73, 79, 8, 80, 88, 9
src/app/admin/audit/security
   page.tsx0%0%0%0%10, 114, 12, 122, 13, 136, 136, 136, 140, 148, 148, 148, 15,

@github-actions

Copy link
Copy Markdown

Security Scan Results: PASSED

Scanner Critical High
SAST 0 0
Dependencies 0 0

@acamarata

Copy link
Copy Markdown
Collaborator Author

Verified: dropping these loses no protection

Before merging I checked the obvious risk — that some of the 82 overrides were the only floor for a package, so removing them would silently drop a security bound.

By package name, 22 of the 39 distinct packages in frontend/package.json have no override at the root at all:

@appium/support @tootallnate/once ajv basic-ftp bn.js d3-color diff fast-xml-parser flatted glob got jspdf lodash lodash-es minimatch on-headers path-to-regexp picomatch qs tough-cookie yaml yauzl

That number is alarming and it is also misleading, which is the point of this comment.

What the check actually has to be

My first pass compared each package's resolved versions against the highest >= floor among its selectors and reported 7 packages "below floor". That method is wrong. glob@>=10.2.0 <10.5.0 → >=10.5.0 says nothing about glob 6, 7, 8 or 9, and the tree legitimately contains all of them. Same for minimatch, ajv and diff.

The correct test is per selector: a resolved version is only a miss if it satisfies the vulnerable range and fails the target range.

Run that way against the lockfile on main:

MISS path-to-regexp -> 8.4.0    resolved: 0.1.13, 6.3.0, 8.4.2
MISS axios          -> 1.16.0   resolved: 1.19.0
MISS next           -> 15.5.23  resolved: 15.5.24

3 of 82 selectors

And all three are benign. axios and next are bare-name selectors, i.e. exact pins, not floors — the resolved versions are newer than the pin, so "does not satisfy" here means ahead, not behind. path-to-regexp does carry older majors (0.1.13, 6.3.0), but both sit at or above the patched versions for the known ReDoS advisories (≥ 0.1.12 and ≥ 6.3.0 respectively).

Conclusion

Zero packages are exposed by this removal. Which is what you would expect, because pnpm was already telling us so on every install:

WARN The field "pnpm.overrides" was found in .../frontend/package.json.
     This will not take effect. You should configure "pnpm.overrides"
     at the root of the workspace instead.

These 82 entries were inert. Nothing was being floored by them, so nothing can be lost by deleting them. The one entry that mattered is moved to the root in this PR.

The 22 packages above are worth a separate look — not because this PR changes their exposure, but because the presence of a dead override made it look like they had a floor when they never did.

@github-actions

Copy link
Copy Markdown

PR Checks Summary

Check Status
Lint & Format ✅ success
Type Check ✅ success
Unit Tests ✅ success
Build ✅ success

All checks passed! Ready for review.

@acamarata
acamarata merged commit ea5a391 into main Sep 14, 2026
43 checks passed
@acamarata
acamarata deleted the chore/drop-dead-frontend-overrides branch September 14, 2026 22:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant