chore(deps): dependency audit 2026-08 — in-range updates, remove unused openai, dev majors - #69
Merged
Merged
Conversation
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>
Codecov Report✅ All modified and coverable lines are covered by tests. 📢 Thoughts on this report? Let us know! |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Full dependency audit for August 2026. Report at
.claude/reports/deps-audit-2026-08-21.md.Security outcome
No exploitable vulnerabilities.
npm auditreports 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:
postcssbundled insidenext— the 2 moderate findings are gone as ofnext@16.3.1. Thenpm audit fix --forceban stands regardless; it still resolves such findings by downgradingnextto 9.3.3.better-auth2026 CVE cluster (CVE-2026-53513SSRF/CVSS 9.6 in@better-auth/sso,CVE-2026-53516OAuth auto-link ATO,CVE-2026-45337deviceAuthorization,CVE-2026-67336oidcProvider/mcpcrypto defaults) — not applicable for two independent reasons: all are fixed in 1.6.11+ and we run 1.7.1, andsrc/lib/auth.tsregisters onlygenericOAuth,customSession,nextCookies.Next.js pre-announced a critical severity vulnerability on 2026-08-20, with patches
16.3.2/15.5.24scheduled for 2026-08-26. This branch is on16.3.1, the current latest — there is nothing to upgrade to yet. Re-run/audit-depson or after Aug 26.Changes
1c0b7b0^ranges (nopackage.jsonedits)e5c9aa0openai— declared runtime dep with zero usage anywhere61d158djsdom30,chalk6,jest-dom7; realign@types/nodeto^2409aa3c9Notable in the in-range pass
eslint-config-next16.2.6 → 16.3.1, closing a minor-line mismatch withnext@16.3.1and pullingtypescript-eslint8.59.3 → 8.67.0lucide-react1.16.0 → 1.33.0 (largest in-range jump)react/react-dom19.2.6 → 19.2.8, 13@radix-uiprimitives,tailwindcss4.3.3,vitest4.1.11openairemovedDeclared in
dependenciesat^6.32.0with zero references repo-wide — noimport/requireinsrc/orscripts/, noOPENAI*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/nodemoved down a major^25.5.0→^24.13.3. The@types/nodemajor tracks the Node major and this runtime is Node 24.18.0, so^25was lettingtscaccept 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.1declareseslint: >=9.0.0andtypescript-eslint@8.67.0accepts^10.0.0— buteslint-config-nextvendorseslint-plugin-react,eslint-plugin-import, andeslint-plugin-jsx-a11yunder its ownnode_modules, and all three capeslintat^9. Installing v10 producedERESOLVE overriding peer dependency×3 andnpm error invalid: eslint@10.8.1, theneslint .failed outright:eslint-plugin-reactstill calls thecontext.getFilename()API v10 removed — zero files lintable. Reverted; recorded as blocked in.claude/references/deps-known-issues.mdwith 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:
next build(Turbopack), TypeScript check clean, 8 routeseslint ., 0 errors / 0 warningsnpm lsnoinvalid:peerschalk6 was additionally verified by running its only consumer,npm run setup:check— colored output renders and all 8 checks complete.The lockfile in
61d158dis a clean re-resolution frompackage.jsonrather 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: falseon thegenericOAuthprovider insrc/lib/auth.ts. MP discovery advertisesS256and the existing code comment already anticipates enabling it — wants its own change plus a test.vitest.config.tsuses ESM syntax while loaded as CommonJS. Fix is renaming tovitest.config.mts.🤖 Generated with Claude Code