Upgrade to Next.js 16.x (#42) #57
No reviewers
Labels
No labels
area:auth
area:ci
area:db
area:infra
area:native
area:pwa
area:service
epic
feature
foundation
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
james/carol!57
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "42-nextjs-16-upgrade"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Closes #42.
Summary
nextandeslint-config-nextpast the^15.3.0cap to^16.2.9.engines.noderises from>=20.0.0to>=20.9.0to match Next 16's floor; the Dockerfile (node:22-slim) already exceeds it.middleware.ts→proxy.ts(andtests/middleware.test.ts→tests/proxy.test.ts). Next 16 renamed the per-request gate;proxyis Node-runtime only by definition, which kills theexperimental.nodeMiddlewareflag — and silences the schema-validator warning the flag was producing.--webpacktodevandbuildscripts. Next 16 makes Turbopack the default fornext build, and ournext.config.mjscarries a customwebpack()hook (thenode:URI externals we added in #18). Turbopack migration is explicitly out of scope per the issue; the flag keeps webpack as the bundler.eslint.config.mjsto use eslint-config-next 16's native flat-config exports directly. The previousFlatCompat.extends(...)path errored under v16 (Converting circular structure to JSON). Drops the now-unused@eslint/eslintrcdep..trivyignoreentry (CVE-2026-33671) — its own comment specified "Revisit when Next.js is bumped." If Trivy still flags it on 16.2.9, this PR'simage_scanjob will surface it and we can re-add with refreshed rationale.next-env.d.tsandtsconfig.jsonare touched by Next 16's typegen on first build (.next/dev/output split;jsx: react-jsxis the new default). Committed as auto-generated.What didn't change
params/searchParams/cookies/headers/draftModeconsumers, nonext/image, no AMP, no parallel routes, noserverRuntimeConfig, no sitemaps, no PPR. Verified by grep.^19.0.0(resolves to 19.2 transitively under Next 16).Test plan
npm run typecheck— clean.npm run lint— clean (after flat-config rewrite).npm test— 61 passed / 20 skipped.npm run build— succeeds; build output showsƒ Proxy (Middleware).npm run dev— starts clean, noInvalid next.config.mjs options detectedwarning, nonode:fserror./,/manifest.webmanifest,/offline,/icon-192.png,/sw.js,/api/health→ 200;/dashboard→ 401 (default-deny intact).npm_audit,osv_scan,image_scan). Image_scan will confirm whether the dropped picomatch entry needs re-adding.🤖 Generated with Claude Code
b3fe011ba8caed303a4e