Skip to content

Upgrade client ESLint to 10 once eslint-plugin-react supports it #2891

Description

@atomantic

Problem

Dependabot's ESLint 10 bumps (#2879 eslint 9.39.4 → 10.7.0, #2875 @eslint/js
9.39.4 → 10.0.1 — both closed) fail at install, not at lint:

npm error code ERESOLVE
npm error While resolving: eslint-plugin-react@7.37.5

eslint-plugin-react@7.37.5 (latest as of 2026-07-22) declares:

peerDependencies.eslint = "^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7"

There is no ESLint 10 in that range, so the client dependency tree cannot resolve
with eslint 10 no matter which order the two PRs land in. This is an upstream
blocker, not something a lockfile regeneration or config change fixes.

Decision

Wait for eslint-plugin-react to ship ESLint 10 peer support, then take
eslint and @eslint/js together in a single PR. Do not work around it with
--legacy-peer-deps, an overrides entry, or by dropping
eslint-plugin-react — the plugin carries the React-specific rules the client
lint actually depends on, and forcing a peer mismatch would leave lint passing
against an unsupported combination.

Trigger to pick this up

npm view eslint-plugin-react peerDependencies.eslint includes a ^10 range.

Approach

  1. Bump eslint, @eslint/js, and eslint-plugin-react in one commit in
    client/package.json (all three, or the resolution fails again).
  2. Regenerate client/package-lock.json.
  3. Run npm run lint --prefix client. ESLint 10 removes several long-deprecated
    context methods and changes some rule defaults, so expect eslint.config.js
    to need adjustment.
  4. The client lint currently reports 0 errors / 4 warnings (unused
    eslint-disable directives). Keep it at 0 errors.

Acceptance criteria

  • eslint, @eslint/js, eslint-plugin-react all on ESLint-10-compatible
    versions in client/package.json, lockfile regenerated.
  • npm ci --prefix client resolves without ERESOLVE and without
    --legacy-peer-deps.
  • npm run lint --prefix client reports 0 errors.
  • No overrides entry added to force the peer range.

Affected files

  • client/package.json / client/package-lock.json
  • client/eslint.config.js

Metadata

Metadata

Assignees

No one assigned

    Labels

    blockedBlocked on another issue/PR — skip in autonomous claim runs

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions