refactor(deps): lift Next 15→16, vitest 2→4, ESLint 9→10, TS 5→6, @types/node 20→26 - #16
Merged
Merged
Conversation
…pes/node 20→26 - next ^15.0.0 → ^16 (16.3.3), eslint-config-next ^15.0.0 → ^16 - vitest ^2.1.5 → ^4 (4.1.11) — plain single-project config, no workspace file; 6/6 tests pass unchanged - eslint ^9 → ^10 (10.9.1): eslint.config.mjs rewritten from FlatCompat (@eslint/eslintrc, now dropped from devDeps) to eslint-config-next v16's native flat exports - lint script: `next lint` (removed in Next 16) → `eslint .` - settings.react.version pinned to '19' — eslint-plugin-react's 'detect' calls getFilename(), removed in ESLint 10 - typescript ^5 → ^6 (6.0.3), @types/node ^20 → ^26 (26.4.0) - tsconfig: Next 16 build set jsx→react-jsx and added .next/dev/types to include (mandatory Next 16 changes) Verified locally against a schema-migrated Postgres (same shape as CI): format:check, lint, typecheck, 6/6 tests, db:migrate, next build all green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WqKqMnHQHSmkGFfc5t7Rxn
The first lockfile write hit two npm 11 bugs in one file: the nested esbuild@0.28.2 tree under vitest was missing its per-platform optional packages entirely (CI: "Missing: @esbuild/linux-x64@0.28.2 from lock file"), and after a full regeneration the same 26 nested entries were written WITHOUT "optional": true, making npm ci fail EBADPLATFORM on @esbuild/aix-ppc64. Regenerated from scratch, then marked the 26 nested @esbuild/* platform entries optional (matching how npm recorded the identical entries under tsx). Verified: rm -rf node_modules && npm ci green, verify + build green. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WqKqMnHQHSmkGFfc5t7Rxn
github-actions Bot
pushed a commit
that referenced
this pull request
Aug 31, 2026
Claude-Session: https://claude.ai/code/session_01WqKqMnHQHSmkGFfc5t7Rxn Co-authored-by: Mao Nakamoto <41178744+maonakamoto@users.noreply.github.com> Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
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.
What moved
Traps handled
next lintremoved in Next 16 → lint script is noweslint ..eslint.config.mjsrewritten from FlatCompat to eslint-config-next v16's native flat exports (core-web-vitals+typescript);@eslint/eslintrcdevDep removed.version: 'detect'crashes under ESLint 10 (getFilename is not a function) → pinnedsettings.react.version: '19'.vitest.config.ts), mocks unaffected — all 6 tests pass unchanged.jsx: react-jsx(mandatory) and added.next/dev/types/**/*.tsto include; committed as reformatted by prettier.middleware.ts;next.config.tsis empty — no removed options.Verification
Ran locally against a schema-migrated scratch Postgres (same shape CI's service container provides):
npm run format:check✓npm run lint✓ (0 errors)npm run typecheck✓npm test✓ 6/6npm run db:migrate✓npm run build✓ (Next 16.3.3, all routes compile)🤖 Generated with Claude Code
https://claude.ai/code/session_01WqKqMnHQHSmkGFfc5t7Rxn