deps(frontend): eslint 10 + react-hooks 7 as one set (lands #413/#414) - #427
Merged
Conversation
Land the coupled frontend ESLint major bump as a single set: eslint 9.39.5 -> 10.8.0 (supersedes #413) and eslint-plugin-react-hooks 5.2.0 -> 7.1.1 (supersedes #414). They are mutually dependent and must land together. react-hooks 7 promotes the React-Compiler rule set-state-in-effect to an error in its recommended config. This SSR app (TanStack Start) intentionally initializes state from browser-only APIs and external stores inside mount effects, which the heuristic flags. Downgrade only that single new rule to a warning so the tooling upgrade stays behavior-neutral; adopting it as an error is a separate follow-up. No source/runtime code changes. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017F63bPvWRFR4iVEm83Pzoj
WalksWithASwagger
force-pushed
the
codex/deps-eslint10-reacthooks7
branch
from
August 2, 2026 17:34
e7921c8 to
63d5082
Compare
This was referenced Aug 2, 2026
This was referenced Aug 2, 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.
What
Lands the coupled frontend ESLint major bump as one reviewed set (tracks #425):
eslint9.39.5 → 10.8.0 — supersedes build(deps-dev): bump eslint from 9.39.5 to 10.8.0 in /frontend #413eslint-plugin-react-hooks5.2.0 → 7.1.1 — supersedes build(deps-dev): bump eslint-plugin-react-hooks from 5.2.0 to 7.1.1 in /frontend #414These are mutually dependent (react-hooks 7.x is the line aligned with eslint 10) and must land together or not at all — bumping either alone breaks
npm run lint.Why one PR
Dependabot opened #413 and #414 separately; each fails the CI
testgate on its own. Combining them is the only way thelintstep (part ofnpm run verify) passes.Changes
frontend/package.json: bump the two devDeps above. No other dependency changes (@eslint/jsstays at^9.32.0— its recommended config is compatible with eslint 10; lint runs clean with no missing-rule errors).frontend/package-lock.json: refreshed for the new resolutions.frontend/eslint.config.js: react-hooks 7 promotes the React-Compiler rulereact-hooks/set-state-in-effectto error in itsrecommendedset (react-hooks 5 did not enforce it). This SSR app (TanStack Start) intentionally initializes state from browser-only APIs and external stores inside mount effects (e.g.use-mobilereadingwindow,generatereading a localStorage-backed history store,spendfetching on mount), which the heuristic flags. The single new rule is downgraded to warn — a targeted severity change, not a blanket disable, and not aneslint-disablesprinkle. All prior errors stay errors;rules-of-hooksandexhaustive-depsbehavior is unchanged.No source/runtime code changes — this is intentionally behavior-neutral so the tooling major carries zero regression risk. Adopting
set-state-in-effectas an error (and refactoring the flagged effects) is a separate follow-up.Verification
frontend:npm run verify(typecheck + test + build + lint) passes locally (Node 26). Lint: 0 errors, 51 warnings (45 pre-existingreact-refresh/only-export-components+ 6 now-warningset-state-in-effect). Warnings do not faileslint .(no--max-warnings).Notes
needs-human: dev-tooling major, coupled bump. Review-ready, not auto-merge.