Parent: DataBiosphere/findable-ui#952 (Phase 2 — Next 16 rollout across consumers)
Grandparent: DataBiosphere/findable-ui#884 (Next 16 upgrade plan)
Sibling rollout issues for reference:
Current state
next ^15
@databiosphere/findable-ui ^53.1.0
next-mdx-remote ^5
@next/mdx ^15
- Node
22.12.0 (package.json engines; no .nvmrc)
- ESLint
^8.57.1, legacy .eslintrc.json
overrides: { "glob": "^11.0.4" } present in package.json
- Uses MDX (
@next/mdx, @mdx-js/loader, @mdx-js/react, next-mdx-remote)
- No
next-auth
This is consumer #5 in the rollout order. It has MDX content (app/content/) but no auth, so MDX wiring is the main extra concern over the brain-explorer canary.
Goal
Bump to Next 16 and the new findable-ui major (^54, currently 54.1.0), and align all Next.js-related and ESLint packages with findable-ui's package.json / eslint.config.mjs so this repo stays in lockstep with the library it consumes.
Checklist
Dependencies
Match findable-ui's removed / changed packages
Reconcile our deps against findable-ui 54.1.0 — it moved to ESLint v9 flat config and swapped several plugins. Align ours to match:
Build & runtime wiring
Linting
Node baseline → 22.13.0
Cleanup & audit
Verification
Out of scope
next-auth concerns — this consumer doesn't use it.
Acceptance
Parent: DataBiosphere/findable-ui#952 (Phase 2 — Next 16 rollout across consumers)
Grandparent: DataBiosphere/findable-ui#884 (Next 16 upgrade plan)
Sibling rollout issues for reference:
Current state
next^15@databiosphere/findable-ui^53.1.0next-mdx-remote^5@next/mdx^1522.12.0(package.jsonengines; no.nvmrc)^8.57.1, legacy.eslintrc.jsonoverrides: { "glob": "^11.0.4" }present inpackage.json@next/mdx,@mdx-js/loader,@mdx-js/react,next-mdx-remote)next-authThis is consumer #5 in the rollout order. It has MDX content (
app/content/) but no auth, so MDX wiring is the main extra concern over the brain-explorer canary.Goal
Bump to Next 16 and the new findable-ui major (
^54, currently54.1.0), and align all Next.js-related and ESLint packages with findable-ui'spackage.json/eslint.config.mjsso this repo stays in lockstep with the library it consumes.Checklist
Dependencies
@databiosphere/findable-ui→^54next→^16eslint-config-next→^16@next/eslint-plugin-next→^16next-mdx-remote→^6(non-optional peer dep of findable-ui)@next/mdx→^16npm install @mui/material-nextjs @emotion/serverreact/react-dom^19.2.3,@mui/material&@mui/icons-material^7.3.6,uuid^13, etc.) where they currently lagMatch findable-ui's removed / changed packages
Reconcile our deps against findable-ui
54.1.0— it moved to ESLint v9 flat config and swapped several plugins. Align ours to match:eslint-plugin-typescript-sort-keys→ replace witheslint-plugin-perfectionist^4(ESLint v9 compatible)eslint-plugin-eslint-comments^3→@eslint-community/eslint-plugin-eslint-comments^4eslint^8→^9eslint-plugin-react-hooks^5→^7eslint-plugin-jsdoc^61→^63eslint-plugin-sort-destructure-keys^2→^3eslint-plugin-sonarjsto findable-ui's pinned range@eslint/js^9,@eslint/eslintrc^3Build & runtime wiring
--webpackto allnext dev/next buildscripts inpackage.json(tracking vercel/next.js#82607)pages/_app.tsx: wrap inAppCacheProviderfrom@mui/material-nextjs/v16-pagesRouterpages/_document.tsx: addDocumentHeadTags+documentGetInitialPropsblockJS: falseon directnext-mdx-remote/serializecalls — present inapp/content/common/contentPages.tsandfiles/common/utils.tsapp/content/{common,anvil-cmg,lungmap}) renders identically after thenext-mdx-remotev6 +@next/mdxv16 bumpLinting
.eslintrc.json→eslint.config.mjs(flat config); findable-ui's owneslint.config.mjsis the reference. Port existing rules (sort-keys,jsdoc/*,sonarjs/*,explicit-function-return-typeoverride on non-*.styles.ts(x), etc.).eslintignore(flat config usesignoresineslint.config.mjs)npm run lintgreenNode baseline → 22.13.0
package.jsonengines.node→22.13.0(matches findable-uiengines.node).nvmrc→22.13.0.gitlab/pipelines) and anyDockerfileFROM node:...Cleanup & audit
overrides: { "glob": ... }block frompackage.json(lockfile should re-resolve cleanly without it)npm auditand address findings — no--force(manual/targeted bumps only)useResetableStatehook (removed)supersededprop onFilterTag/CategoryTag(removed)npx @next/codemod@canary upgrade latestas a safety netVerification
next build --webpacksucceeds for all targets (anvil-catalog, lungmap, anvil-cmg, hca-dcp)npm test(Jest) passesnpx playwright testpassesOut of scope
next-authconcerns — this consumer doesn't use it.Acceptance
^54; all Next.js-related and ESLint packages aligned with findable-ui.22.13.0acrosspackage.json,.nvmrc, CI, and Docker.globoverride removed;npm auditreviewed (no--force).