feat: upgrade to next.js 16 and findable-ui v54 (#1391)#1394
Merged
Conversation
Contributor
There was a problem hiding this comment.
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 switchedlinttoeslint .. - 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.
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>
5acb361 to
5f47e45
Compare
NoopDog
approved these changes
Jun 30, 2026
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.
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.@mui/material-nextjs,@emotion/server(Next 16 Emotion SSR).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.eslint-plugin-eslint-comments,eslint-plugin-typescript-sort-keys(→ perfectionist),isomorphic-dompurify(unused), and thegloboverride.Next 16 wiring
_app.tsxwrapped inAppCacheProvider;_document.tsxaddsDocumentHeadTags+documentGetInitialProps(@mui/material-nextjs/v16-pagesRouter).dev/buildscripts pinned to--webpack;lint→eslint ...eslintrc.json/.eslintignore→eslint.config.mjs(mirrors findable-ui).Node 22.13.0
engines, new.nvmrc, CI workflows (×4), Dockerfile.Findable v54 + bundler-resolution fallout
Index/indexView.styles,ErrorBoundary/errorBoundary.tsconfigmoduleResolution: "bundler"(matches hprc-data-explorer). This surfaced two pre-existing issues that were silentlyanyundernoderesolution:exportsmap can't exposeVisualizationSpecunder bundler; reconstructed it from its sources (vega-liteTopLevelSpec|vegaSpec) and added a proper"datasets" in specnarrow.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-effectsites 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-memoizationis turned off (Compiler-readiness rule; we don't run the Compiler — same as findable'sincompatible-library).Verification
tscclean,eslint .clean, prettier clean.next build --webpack, static export): BRC (122,671 pages) + GA2.npm audit(no--force): 45 → 32; remainder require breaking changes / are transitive via thenext-authpeer findable declares (brc doesn't use it).Follow-ups
set-state-in-effecteffects.🤖 Generated with Claude Code