Skip to content

chore(deps): dependency audit 2026-08 — in-range updates, remove unused openai, dev majors - #69

Merged
chriskehayias merged 4 commits into
mainfrom
chore/deps-audit-2026-08
Aug 21, 2026
Merged

chore(deps): dependency audit 2026-08 — in-range updates, remove unused openai, dev majors#69
chriskehayias merged 4 commits into
mainfrom
chore/deps-audit-2026-08

Conversation

@chriskehayias

Copy link
Copy Markdown
Contributor

Full dependency audit for August 2026. Report at .claude/reports/deps-audit-2026-08-21.md.

Security outcome

No exploitable vulnerabilities. npm audit reports 0 findings across 585 packages, and OSV returns no advisories for any installed version of the 17 packages queried individually, including every runtime-critical one (next, react/react-dom, better-auth, zod, dotenv).

Two prior known-issues entries cleared on re-verification:

  • postcss bundled inside next — the 2 moderate findings are gone as of next@16.3.1. The npm audit fix --force ban stands regardless; it still resolves such findings by downgrading next to 9.3.3.
  • better-auth 2026 CVE cluster (CVE-2026-53513 SSRF/CVSS 9.6 in @better-auth/sso, CVE-2026-53516 OAuth auto-link ATO, CVE-2026-45337 deviceAuthorization, CVE-2026-67336 oidcProvider/mcp crypto defaults) — not applicable for two independent reasons: all are fixed in 1.6.11+ and we run 1.7.1, and src/lib/auth.ts registers only genericOAuth, customSession, nextCookies.

⚠️ Pending upstream — no action available in this PR

Next.js pre-announced a critical severity vulnerability on 2026-08-20, with patches 16.3.2 / 15.5.24 scheduled for 2026-08-26. This branch is on 16.3.1, the current latest — there is nothing to upgrade to yet. Re-run /audit-deps on or after Aug 26.

Changes

Commit What
1c0b7b0 32 direct deps updated within existing ^ ranges (no package.json edits)
e5c9aa0 Remove openai — declared runtime dep with zero usage anywhere
61d158d jsdom 30, chalk 6, jest-dom 7; realign @types/node to ^24
09aa3c9 Audit report + updated known-issues state

Notable in the in-range pass

  • eslint-config-next 16.2.6 → 16.3.1, closing a minor-line mismatch with next@16.3.1 and pulling typescript-eslint 8.59.3 → 8.67.0
  • lucide-react 1.16.0 → 1.33.0 (largest in-range jump)
  • react / react-dom 19.2.6 → 19.2.8, 13 @radix-ui primitives, tailwindcss 4.3.3, vitest 4.1.11

openai removed

Declared in dependencies at ^6.32.0 with zero references repo-wide — no import/require in src/ or scripts/, no OPENAI* env var, no config reference. It was also the only remaining runtime major (6.49.0 → 7.5.0), so removal makes that moot. Dropped exactly 1 package. If AI features land later, install fresh at ^7.

@types/node moved down a major

^25.5.0^24.13.3. The @types/node major tracks the Node major and this runtime is Node 24.18.0, so ^25 was letting tsc accept APIs the runtime may not have. Type-check is clean, confirming nothing depended on a Node 25-only API.

Not included: ESLint 10 (attempted, reverted)

ESLint 9.39.5 is deprecated upstream ("no longer supported"), so this is a hold we're stuck with rather than a preference.

eslint-config-next@16.3.1 declares eslint: >=9.0.0 and typescript-eslint@8.67.0 accepts ^10.0.0 — but eslint-config-next vendors eslint-plugin-react, eslint-plugin-import, and eslint-plugin-jsx-a11y under its own node_modules, and all three cap eslint at ^9. Installing v10 produced ERESOLVE overriding peer dependency ×3 and npm error invalid: eslint@10.8.1, then eslint . failed outright:

TypeError: Error while loading rule 'react/display-name':
  contextOrFilename.getFilename is not a function
  at eslint-config-next/node_modules/eslint-plugin-react/lib/util/version.js:31

eslint-plugin-react still calls the context.getFilename() API v10 removed — zero files lintable. Reverted; recorded as blocked in .claude/references/deps-known-issues.md with the re-check trigger so it is not retried blindly.

Verification

Run after the in-range pass, after each individual major, and once more on the final tree:

  • build pass — next build (Turbopack), TypeScript check clean, 8 routes
  • lint pass — eslint ., 0 errors / 0 warnings
  • tests pass — 279/279 in 21 files
  • audit 0 vulnerabilities · npm ls no invalid: peers

chalk 6 was additionally verified by running its only consumer, npm run setup:check — colored output renders and all 8 checks complete.

The lockfile in 61d158d is a clean re-resolution from package.json rather than the residue of the reverted ESLint 10 install, which had left those plugins nested instead of hoisted. Same versions either way; this is what a fresh clone resolves to.

Follow-ups flagged, out of scope here

  • pkce: false on the genericOAuth provider in src/lib/auth.ts. MP discovery advertises S256 and the existing code comment already anticipates enabling it — wants its own change plus a test.
  • Pre-existing Vite 8 warning that vitest.config.ts uses ESM syntax while loaded as CommonJS. Fix is renaming to vitest.config.mts.

🤖 Generated with Claude Code

chriskehayias and others added 4 commits August 21, 2026 05:37
Applied via `npm update` — no `package.json` range edits. Resolves the
tree to the newest versions permitted by the declared `^` ranges.

Notable:
- eslint-config-next 16.2.6 -> 16.3.1, closing a minor-line mismatch
  with next@16.3.1 and pulling typescript-eslint 8.59.3 -> 8.67.0
- lucide-react 1.16.0 -> 1.33.0 (largest in-range jump)
- react / react-dom 19.2.6 -> 19.2.8
- 13 @radix-ui primitives, tailwindcss 4.3.3, vitest 4.1.11

Security posture: `npm audit` reports 0 findings across 583 packages,
and OSV returns no advisories for any installed version of the 17
packages checked individually, including every runtime-critical one.

Verification: build pass, lint pass (0 errors/warnings),
tests pass 279/279 in 21 files.

Report: .claude/reports/deps-audit-2026-08-21.md

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
`openai` was declared in `dependencies` at ^6.32.0 but had zero
references anywhere in the repo: no import or require in `src/` or
`scripts/`, no OPENAI* environment variable, no reference in any
config. The only mentions were package.json itself and the
/audit-deps command doc that lists it as security-critical.

Carrying it meant auditing and patching a runtime dependency that
ships nothing, and it was the only remaining runtime major
(6.49.0 -> 7.5.0) — removal makes that moot.

Dropped exactly 1 package. If AI features are added later, install
fresh at ^7 rather than reviving the v6 range.

Verification: build pass, lint pass, tests pass 279/279.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Four approved changes, each installed and verified individually:

- jsdom ^29.0.0 -> ^30.0.1. Test environment only (vitest.config.ts).
  Engine bump plus CSS.escape/CSS.supports and getComputedStyle pixel
  fixes. 279/279 tests pass.
- chalk ^5.6.2 -> ^6.0.0. One consumer, scripts/setup.ts, using basic
  color methods only. Verified by running `npm run setup:check`:
  colored output renders and all 8 checks complete.
- @testing-library/jest-dom ^6.9.1 -> ^7.0.1, plus
  @testing-library/dom ^10.4.1 promoted from transitive to an explicit
  devDependency, which v7 now requires as a peer.
- @types/node ^25.5.0 -> ^24.13.3, a deliberate move *down* one major.
  The @types/node major tracks the Node major and this runtime is Node
  24.18.0, so the previous ^25 let tsc accept APIs the runtime may not
  have. Note 24.18.0 does not exist as an @types/node release — the
  highest 24.x is 24.13.3.

Not included: eslint 9 -> 10 was approved, attempted, and reverted.
eslint-config-next@16.3.1 vendors eslint-plugin-react,
eslint-plugin-import, and eslint-plugin-jsx-a11y under its own
node_modules, all capped at eslint ^9. Installing v10 produced
ERESOLVE and `invalid: eslint@10.8.1`, and `eslint .` then failed with
`TypeError: contextOrFilename.getFilename is not a function` from
eslint-plugin-react — zero files lintable. Recorded as blocked in
.claude/references/deps-known-issues.md so it is not retried blindly.
ESLint 9.39.5 is deprecated upstream, so this hold is not a preference.

The lockfile here is a clean re-resolution from package.json rather
than the residue of the reverted ESLint 10 install, which had left
those plugins nested instead of hoisted. Same versions either way.

Verification: build pass, lint pass (0 errors/warnings),
tests pass 279/279, npm audit 0 vulnerabilities, no invalid peers.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Adds .claude/reports/deps-audit-2026-08-21.md and updates the state
carried between /audit-deps runs.

Security outcome: no exploitable vulnerabilities. npm audit reports 0
findings, and OSV returns nothing for any installed version of the 17
packages queried individually, including every runtime-critical one.

Pending upstream, no action available: Next.js has pre-announced a
critical-severity vulnerability with patches (16.3.2 / 15.5.24) landing
2026-08-26. We are on 16.3.1, the current latest — re-run the audit on
or after that date.

Known-issues changes:
- better-auth 2026 CVE cluster re-verified as not applicable against
  the current src/lib/auth.ts, which registers only genericOAuth,
  customSession, and nextCookies. All are also fixed in 1.6.11+ and we
  run 1.7.1.
- The postcss-bundled-in-next entry is cleared: resolved upstream in
  next@16.3.1, npm audit now returns 0. The `npm audit fix --force`
  ban stands regardless — it still downgrades next to 9.3.3.
- eslint 10 recorded as blocked with the concrete failure, replacing
  the previous "peer support unconfirmed" guess. Includes a note that
  eslint-config-next's own declared peer (>=9.0.0) is misleading and
  the vendored plugin tree must be checked instead.
- typescript 7 re-verified blocked: typescript-eslint@8.67.0 caps its
  peer at typescript <6.1.0.
- Notes that @types/node releases do not track Node patch versions,
  and that an unsatisfiable range sends the npm resolver into
  pathological backtracking rather than failing fast.

Also flagged for separate follow-up, both out of scope for a
dependency audit: `pkce: false` on the genericOAuth provider in
src/lib/auth.ts, and a pre-existing Vite 8 CJS/ESM warning for
vitest.config.ts.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chriskehayias
chriskehayias merged commit 7bc0a96 into main Aug 21, 2026
1 check passed
@chriskehayias
chriskehayias deleted the chore/deps-audit-2026-08 branch August 21, 2026 09:48
@codecov

codecov Bot commented Aug 21, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

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