Skip to content

feat: upgrade to next.js 16 and findable-ui v54 (#1391)#1394

Merged
NoopDog merged 4 commits into
mainfrom
fran/1391-next16-findable-upgrade
Jun 30, 2026
Merged

feat: upgrade to next.js 16 and findable-ui v54 (#1391)#1394
NoopDog merged 4 commits into
mainfrom
fran/1391-next16-findable-upgrade

Conversation

@frano-m

@frano-m frano-m commented Jun 27, 2026

Copy link
Copy Markdown
Contributor

Summary

Phase 2 of the Next 16 rollout (DataBiosphere/findable-ui#952): upgrades brc-analytics to Next.js 16 + the new findable-ui v54 major, with the associated React/MUI/ESLint/Node bumps.

Closes #1391

Dependencies

  • @databiosphere/findable-ui ^51^54, next ^15^16, react/react-dom^19.2.3, next-mdx-remote ^5^6, @next/mdx ^16.
  • Added @mui/material-nextjs, @emotion/server (Next 16 Emotion SSR).
  • Lint stack → ESLint 9 flat config: eslint ^9, eslint-config-next ^16, @next/eslint-plugin-next ^16, eslint-plugin-react-hooks ^7, eslint-plugin-perfectionist, @eslint/js, @eslint/eslintrc, @eslint-community/eslint-plugin-eslint-comments.
  • Removed: eslint-plugin-eslint-comments, eslint-plugin-typescript-sort-keys (→ perfectionist), isomorphic-dompurify (unused), and the glob override.
  • Shared peers aligned to findable-ui's versions.

Next 16 wiring

  • _app.tsx wrapped in AppCacheProvider; _document.tsx adds DocumentHeadTags + documentGetInitialProps (@mui/material-nextjs/v16-pagesRouter).
  • dev/build scripts pinned to --webpack; linteslint ..
  • Migrated .eslintrc.json/.eslintignoreeslint.config.mjs (mirrors findable-ui).

Node 22.13.0

engines, new .nvmrc, CI workflows (×4), Dockerfile.

Findable v54 + bundler-resolution fallout

  • Module-path updates: Index/indexView.styles, ErrorBoundary/errorBoundary.
  • Next 16 set tsconfig moduleResolution: "bundler" (matches hprc-data-explorer). This surfaced two pre-existing issues that were silently any under node resolution:
    • vega-embed's malformed exports map can't expose VisualizationSpec under bundler; reconstructed it from its sources (vega-lite TopLevelSpec | vega Spec) and added a proper "datasets" in spec narrow.
    • workflows.json direct imports cast to WorkflowCategory[] at the boundary (catalog JSON is schema-validated in CI).

Lint fallout

react-hooks v7 flagged pre-existing effects. Our team's 6 set-state-in-effect sites carry a documented disable and are tracked for refactor in #1393; 6 other-team (account/auth/assistant) sites carry a neutral disable. react-hooks/preserve-manual-memoization is turned off (Compiler-readiness rule; we don't run the Compiler — same as findable's incompatible-library).

Verification

  • tsc clean, eslint . clean, prettier clean.
  • Unit tests: 568 passing.
  • Both sites build under Next 16 (next build --webpack, static export): BRC (122,671 pages) + GA2.
  • npm audit (no --force): 45 → 32; remainder require breaking changes / are transitive via the next-auth peer findable declares (brc doesn't use it).

Follow-ups

🤖 Generated with Claude Code

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Upgrades the application’s frontend stack to Next.js 16 and findable-ui v54, aligning React/MUI/ESLint/Node versions and wiring up Next 16 + MUI Emotion SSR integration across the Pages Router.

Changes:

  • Bumped core deps (Next 16, findable-ui v54, React 19.2.3, MUI + Emotion) and updated scripts to use next * --webpack.
  • Migrated linting to ESLint 9 flat config (eslint.config.mjs) and switched lint to eslint ..
  • Updated TS/Next wiring and type-safety fixes (bundler module resolution, JSON typing boundary, vega-embed type reconstruction), plus Node 22.13.0 pinning in CI/Docker.

Reviewed changes

Copilot reviewed 28 out of 31 changed files in this pull request and generated no comments.

Show a summary per file
File Description
tsconfig.json Switches to moduleResolution: bundler, jsx: react-jsx, and expands Next dev types include paths for Next 16.
package.json Upgrades Next/findable-ui/React/MUI/ESLint toolchain, updates scripts (--webpack), and pins Node engine to 22.13.0.
eslint.config.mjs Adds ESLint 9 flat configuration aligned to the new lint stack and project conventions.
.eslintrc.json Removes legacy ESLint config (replaced by flat config).
.eslintignore Removes legacy ignore file (replaced by ignores in flat config).
next-env.d.ts Updates Next-generated types inclusion for routes typing.
pages/_app.tsx Wires in MUI Next 16 Pages Router cache provider and updates findable-ui import paths.
pages/_document.tsx Adds MUI Next 16 Pages Router document head tags + documentGetInitialProps integration for Emotion SSR.
Dockerfile Pins builder image to node:22.13.0-alpine.
.github/workflows/run-checks.yml Pins CI Node version to 22.13.0.
.github/workflows/publish-release.yml Pins CI Node version to 22.13.0.
.github/workflows/check-pr-title.yml Pins CI Node version to 22.13.0.
tests/configureWorkflow/sampleSheetStep/useFilePicker.hook.test.ts Removes now-unnecessary local lint disables under the new flat-config overrides for tests.
pages/data/[entityListType]/[entityId]/analyze/workflows/[trsId]/index.tsx Casts schema-validated workflow catalog JSON at the boundary to restore typing under bundler resolution.
app/views/AnalyzeWorkflowsView/components/Main/main.tsx Applies typed cast for workflow categories JSON passed into workflow-building utilities.
app/views/PriorityPathogensView/priorityPathogensView.styles.ts Updates findable-ui import path for Index view styles after v54 changes.
app/components/common/VegaEmbed/vegaEmbed.tsx Reconstructs VisualizationSpec typing using vega/vega-lite due to vega-embed export-map issues under bundler resolution.
app/providers/workflowHandoff/actions/clearHandoff/action.ts Adjusts eslint-disable to match updated lint rules/config behavior.
pages/assistant/saved.tsx Adds targeted lint disable for react-hooks/set-state-in-effect per v7 rule enforcement.
pages/account/workflow-runs.tsx Adds targeted lint disable for react-hooks/set-state-in-effect per v7 rule enforcement.
pages/account/preferences.tsx Adds targeted lint disable for react-hooks/set-state-in-effect per v7 rule enforcement.
app/providers/authentication.tsx Adds targeted lint disable for react-hooks/set-state-in-effect per v7 rule enforcement.
app/hooks/useAssistantChat.ts Adds targeted lint disable for react-hooks/set-state-in-effect per v7 rule enforcement.
app/hooks/useAssemblyFavorites.ts Adds targeted lint disable for react-hooks/set-state-in-effect per v7 rule enforcement.
app/hooks/useSwipeInteraction/useSwipeInteraction.tsx Adds targeted lint disable and references planned refactor tracking for the v7 rule.
app/components/Entity/components/ConfigureWorkflowInputs/components/Main/components/Stepper/components/Step/DESeq2FormulaStep/hooks/UseFormulaSelection/hook.ts Adds targeted lint disable with refactor tracking for the v7 rule.
app/components/Entity/components/ConfigureWorkflowInputs/components/Main/components/Stepper/components/Step/SampleSheetClassificationStep/hooks/UseColumnClassification/hook.ts Adds targeted lint disable with refactor tracking for the v7 rule.
app/components/Entity/components/ConfigureWorkflowInputs/components/Main/components/Stepper/components/Step/PrimaryContrastsStep/hooks/UseExplicitContrasts/hook.ts Adds targeted lint disable with refactor tracking for the v7 rule.
app/components/Entity/components/ConfigureWorkflowInputs/components/Main/components/Stepper/components/Step/PrimaryContrastsStep/hooks/UseBaselineContrasts/hook.ts Adds targeted lint disable with refactor tracking for the v7 rule.
app/components/Entity/components/ConfigureWorkflowInputs/components/Main/components/Stepper/components/Step/SequencingStep/components/ENASequencingData/components/DataSelector/components/Alert/hooks/UseTaxonomyMatches/hook.ts Adds targeted lint disable with refactor tracking for the v7 rule.

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@frano-m frano-m moved this to Ready for Review in BRC development tasks Jun 27, 2026
@frano-m frano-m marked this pull request as ready for review June 27, 2026 03:44
Copilot AI review requested due to automatic review settings June 30, 2026 03:31

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

Copilot reviewed 28 out of 31 changed files in this pull request and generated 1 comment.

Comment thread package.json
frano-m and others added 4 commits June 30, 2026 13:59
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…1391)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…sory (#1391)

next-auth was carried forward as a transitive lockfile pin from the
pre-v54 findable-ui range. findable-ui v54 lists next-auth as an
optional peer dependency and brc-analytics does not use auth, so the
entry (and its bundled uuid@8.3.2, GHSA-w5hq-g745-h8pq) was redundant.
Regenerated only the next-auth subtree; no other dependencies changed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…1391)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@frano-m frano-m force-pushed the fran/1391-next16-findable-upgrade branch from 5acb361 to 5f47e45 Compare June 30, 2026 04:00
@NoopDog NoopDog merged commit e68ab84 into main Jun 30, 2026
5 checks passed
@github-project-automation github-project-automation Bot moved this from Ready for Review to Done in BRC development tasks Jun 30, 2026
@frano-m frano-m deleted the fran/1391-next16-findable-upgrade branch June 30, 2026 04:24
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

Upgrade to Next.js 16 + new findable-ui major (Phase 2 from findable-ui#952)

3 participants