Skip to content

chore(deps): upgrade Next.js 15 → 16.2.11 (supersedes #235)#239

Merged
thecelestialmismatch merged 2 commits into
mainfrom
HoundShield/next-16-upgrade
Jul 22, 2026
Merged

chore(deps): upgrade Next.js 15 → 16.2.11 (supersedes #235)#239
thecelestialmismatch merged 2 commits into
mainfrom
HoundShield/next-16-upgrade

Conversation

@thecelestialmismatch

Copy link
Copy Markdown
Owner

Upgrades Next.js 15.5.19 → 16.2.11 the right way — the dependabot bump (#235) only bumped the version and left CI red (next lint removed in 16). This handles every Next 16 breaking change and lands green.

Breaking changes handled

  • next lint removed → migrated to the ESLint CLI. Replaced .eslintrc.json with flat eslint.config.mjs (next/core-web-vitals + next/typescript + unused-imports). Scope ignores restore the exact next lint surface — legacy/, sdk/, and data dirs were never linted (linting them surfaced 678 errors from an unrelated custom rule-set). Lint: 0 errors.
  • Turbopack is the default builder in 16 → build pinned to next build --webpack. Sentry's withSentryConfig injects a webpack config in prod (when NEXT_PUBLIC_SENTRY_DSN is set), which Turbopack-by-default rejects. Pinning webpack keeps the prod build identical to today's known-good behavior. Full Turbopack adoption is deliberate future work.
  • eslint config key removed → dropped from next.config.js (lint is now its own CI step).
  • react-hooks v7 (bundled by eslint-config-next 16) adds new error-level rules (set-state-in-effect, purity, refs, …). They fire on unchanged code that passed under Next 15 — set to warn to preserve the Next-15 lint outcome (green) rather than a risky 39-file refactor of the live app. rules-of-hooks/exhaustive-deps stay at default severity; app code has zero violations.
  • tsconfig.json: Next 16's own auto-managed patch (react-jsx, .next/dev/types).

Already compatible (verified, no change needed)

  • Async request APIs — all dynamic server routes already type params: Promise<…> and await it (migrated during the Next 15 adoption).
  • No parallel routes, AMP, next/legacy/image, getConfig, revalidateTag, or unstable_cache. images already uses remotePatterns. Node "20" (CI) ≥ 16's 20.9 minimum; React 19 already in place.

Deliberately deferred (own follow-up)

  • middleware.tsproxy.ts: kept middleware.ts (deprecation warning only). proxy drops edge-runtime support, and the middleware runs Supabase SSR auth + an in-memory rate limiter on edge — renaming forces a nodejs-runtime change I won't bundle into a framework bump.

Verification

  • tsc --noEmit 0 · npm run lint 0 errors (40 advisory warnings) · 1471 tests pass · next build 0
  • Browser-smoked the production build (next start): homepage + /demo render fully styled with 0 console errors; the full money path works — paste → local 20ms scan → name-only NIST-800-171-mapped findings → gap-report PDF + $499 CTA.

Closes #235.

Next 16 removed `next lint` and the `eslint` config key, and defaults builds
to Turbopack.

- Replace `.eslintrc.json` with flat `eslint.config.mjs` (next/core-web-vitals +
  typescript + unused-imports). Scope ignores restore the `next lint` surface
  (legacy/, sdk/, data dirs were never linted). react-hooks v7's new rules
  (set-state-in-effect, purity, refs, …) are set to warn — they fire on unchanged
  code that passed under Next 15; keeping the Next-15 lint outcome (green) instead
  of a 39-file refactor. Lint: 0 errors.
- next.config.js: drop the removed `eslint` key (lint is its own CI step now).
- build → `next build --webpack`: Sentry's withSentryConfig injects a webpack
  config in prod (DSN set), which Turbopack-by-default rejects. Pin webpack so the
  prod build matches today's known-good behavior. Turbopack adoption is separate.
- tsconfig.json: Next 16's auto-managed patch (react-jsx, .next/dev/types).

Verified: tsc 0, lint 0 errors, 1471 tests, build 0. Browser-smoked the prod
build (next start): homepage + /demo render clean, 0 console errors, and the full
scan → NIST-mapped findings (name-only) → PDF/$499 CTA money path works.
@vercel

vercel Bot commented Jul 22, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
compliance-firewall-agent Building Building Preview, Comment Jul 22, 2026 4:14am

@supabase

supabase Bot commented Jul 22, 2026

Copy link
Copy Markdown

This pull request has been ignored for the connected project qifynzuyrdxmxlumpsrq because there are no changes detected in supabase directory. You can change this behaviour in Project Integrations Settings ↗︎.


Preview Branches by Supabase.
Learn more about Supabase Branching ↗︎.

@thecelestialmismatch
thecelestialmismatch merged commit f9fc789 into main Jul 22, 2026
8 of 10 checks passed
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