Skip to content

Bump eslint and @eslint/js to 10, together - #294

Merged
Sbussiso merged 1 commit into
masterfrom
deps/eslint-10
Sep 12, 2026
Merged

Sbussiso merged 1 commit into
masterfrom
deps/eslint-10

Conversation

@Sbussiso

Copy link
Copy Markdown
Contributor

Dependabot split this single migration across two PRs that cannot be merged
independently — #249 (eslint 9.39.4 → 10.10.0) and #75 (@eslint/js
9.39.4 → 10.0.1). @eslint/js supplies the recommended rule set that
eslint.config.js spreads into its own rules, and the two share a major
line. This takes them as a pair.

Why this major is a non-event here

The project is already on flat config (eslint.config.js), which is the
whole of the 9 → 10 migration for this codebase.

I ran both versions against the same tree to confirm rather than assume:

eslint problems errors warnings
9.39.4 (master) 47 13 34
10.10.0 (this PR) 47 13 34

Identical. The major introduces zero new findings.

Also verified locally

  • npm audit --audit-level=high --omit=dev → 0 vulnerabilities
  • npm test → 12 files, 99 tests passed
  • npm run build → builds clean

About those 13 errors

They are not new and not from eslint: react-hooks/immutability
(12) and react-hooks/use-memo (1), from eslint-plugin-react-hooks
7.1.1, which this PR does not touch.

They survive in master because npm run lint is not part of CI — the
Frontend audit + build job runs npm ci, npm audit, npm test and the
build, but never the linter. Tracked separately; out of scope for a
dependency bump.

Closes #249
Closes #75

🤖 Generated with Claude Code

Dependabot split these across two PRs (#249 eslint 10.10.0, #75
@eslint/js 10.0.1) which cannot be merged independently — @eslint/js
supplies the recommended rule set that eslint consumes, and they share
a major line. Taken as a pair instead.

The project is already on flat config (`eslint.config.js`), which is
the whole of the 9 -> 10 migration for this codebase. Verified by
running both versions against the same tree: eslint 9.39.4 and eslint
10.10.0 each report 47 problems, 13 errors, 34 warnings — identical.
The major introduces zero new findings here.

Also checked: npm audit --audit-level=high --omit=dev finds 0
vulnerabilities, 99 frontend tests pass, vite build succeeds.

Those 13 pre-existing errors are not from eslint and are not new —
they are react-hooks/immutability (12) and react-hooks/use-memo (1)
from eslint-plugin-react-hooks 7.1.1, unchanged by this bump. They
survive in master because `npm run lint` is not part of CI, which is
tracked separately.

Closes #249
Closes #75

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@Sbussiso
Sbussiso merged commit 3632e76 into master Sep 12, 2026
12 checks passed
Sbussiso added a commit that referenced this pull request Sep 12, 2026
`eslint.config.js` was added specifically because `npm run lint` had
been silently erroring with "couldn't find a config" and the lint
command was a no-op. The config fixed that — and then nothing ever ran
it. The frontend CI job does `npm ci`, `npm audit`, `npm test` and the
build, and never the linter.

So the no-op survived the fix. Thirteen errors accumulated in master
unnoticed, and the eslint 9 -> 10 major in #294 had to be reviewed by
running the linter by hand, because CI could say nothing about it.

Two changes:

- deploy.yml gains a `Lint (eslint)` step in the frontend job.
- The two React Compiler advisories that were holding lint at a
  non-zero exit join the four already demoted to `warn` by the policy
  written into this config. `react-hooks/immutability` (12) fires on
  `useEffect(() => { loadThings() }, [...])` where `loadThings` is a
  `const` declared further down — correct at runtime, since effects run
  after render, so it is the compiler reporting it cannot track the
  value rather than a live bug. `react-hooks/use-memo` (1) fires on a
  non-inline first argument. Hoisting the six files' loaders is a real
  change that belongs with the next edit to each, not bundled here.

Warnings stay visible in the CI log; only errors fail the build. That
split is the point.

Verified the gate is not vacuous: lint exits 0 on the current tree (47
warnings, 0 errors), and exits 1 with a deliberate `no-undef` planted
in src/.

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
@Sbussiso
Sbussiso deleted the deps/eslint-10 branch September 13, 2026 05:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant