deps(web): combine Dependabot web upgrades + migrate React linting to ESLint 10 - #45
Merged
Conversation
… ESLint 10 Combines the five open web/npm Dependabot PRs into one branch: - react 19.2.5 -> 19.2.6 (#32) - react-dom 19.2.5 -> 19.2.6 (#39) - vitest 4.1.4 -> 4.1.6 (#37) - vite 8.0.8 -> 8.1.0 (#38 bumped 8.0.13; taken one patch higher to clear high-sev advisory GHSA-fx2h-pf6j-xcff in 8.0.13) - eslint 9.39.4 -> 10.4.0 (#34) ESLint 10 removed the legacy eslintrc system and the context.getFilename() API. The jsx-eslint eslint-plugin-react has no ESLint 10-compatible release (open upstream issue jsx-eslint/eslint-plugin-react#3977), so both `npm ci` and `npm run lint` broke under the raw eslint bump. Fix: replace eslint-plugin-react with the actively maintained, flat-config native @eslint-react/eslint-plugin (peer eslint: '*'), and bump @eslint/js to track eslint 10. React Hooks linting stays on the official eslint-plugin-react-hooks; @eslint-react's overlapping rules-of-hooks is disabled so the official plugin remains the single source for hook rules. The repo's existing "advisory/warn during rollout" rule tuning is preserved. Verified: npm ci, npm run build, npm run test (263 passing), npm run lint (0 errors), npm audit (0 vulnerabilities). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QLzSPFV7eN723Krfvbb3C9
aria-teknal-studio
approved these changes
Jun 24, 2026
aria-teknal-studio
left a comment
Collaborator
There was a problem hiding this comment.
Approved. I reviewed the combined web dependency update and ESLint 10 migration, including the React lint plugin swap and the follow-up UI code changes.
Verified locally:
- cd web && npm ci
- npm run lint
- npm run test (263 passing)
- npm run build
- npm audit --audit-level=low (0 vulnerabilities)
- make build-all
CI is green as well. The migration preserves official react-hooks linting as the hook source of truth, and the UI changes look like reasonable lint-driven cleanups.
One tiny non-blocking follow-up: npm run lint now emits Node's MODULE_TYPELESS_PACKAGE_JSON warning because eslint.config.js is ESM syntax while web/package.json does not declare type: module. It does not fail lint/build/tests, so I would not block this PR on it, but adding type: module or renaming the config to eslint.config.mjs would quiet the warning later.
The flat config uses ESM syntax but the package does not declare a module type, so Node emitted MODULE_TYPELESS_PACKAGE_JSON on every lint run. Using the .mjs extension marks the file as ESM explicitly without changing module resolution for the rest of the package. ESLint auto-discovers eslint.config.mjs, so no script changes are needed. Addresses Aria's non-blocking review note on PR #45.
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.
Combines the five open web/npm Dependabot PRs into one branch for a single smoke test, plus the work required to make the ESLint 10 major bump actually viable.
Dependency changes
reactreact-domvitestviteeslintThe ESLint 10 problem (the "stuff to fix")
ESLint 10 removed the legacy eslintrc system and the
context.getFilename()API. The jsx-eslinteslint-plugin-reacthas no ESLint 10-compatible release (upstream jsx-eslint/eslint-plugin-react#3977), so the raw eslint bump broke bothnpm ci(peer conflict) andnpm run lint(runtime crash).Fix: replaced
eslint-plugin-reactwith the actively maintained, flat-config-native@eslint-react/eslint-plugin(@eslint-react/*rule prefix, peereslint: '*'), and bumped@eslint/jsto v10.eslint-plugin-react-hooks;@eslint-react's overlappingrules-of-hooksis turned off so the official plugin remains the single source for hook rules.Verification
npm ci— clean install, 0 vulnerabilitiesnpm run build(tsc + vite 8.1.0)npm run test— 263 passingnpm run lint— 0 errors (24 advisory warnings, allwarn)Lint now reports 24 warnings from the new
@eslint-reactrules (e.g.no-array-index-key,naming-convention-ref-name,set-state-in-effect). They don't fail the build, but they're new signal worth eyeballing. The rule set is different from jsx-eslint's — please confirm the hangar UI behaves as expected inmake build-all/fleet hangar, since this swaps the React lint engine.Once you're happy, this supersedes #32, #34, #37, #38, #39 (close them as combined here).
🤖 Generated with Claude Code
Generated by Claude Code