chore(deps-dev): bump the eslint plugin group and hold eslint at 9.x - #338
Conversation
LabelsThe following labels could not be found: Please fix the above issues or remove invalid values from |
Bumps the eslint group with 4 updates in the / directory: [@typescript-eslint/eslint-plugin](https://github.com/typescript-eslint/typescript-eslint/tree/HEAD/packages/eslint-plugin), [eslint](https://github.com/eslint/eslint), [eslint-plugin-react-hooks](https://github.com/facebook/react/tree/HEAD/packages/eslint-plugin-react-hooks) and [eslint-plugin-storybook](https://github.com/storybookjs/storybook/tree/HEAD/code/lib/eslint-plugin). Updates `@typescript-eslint/eslint-plugin` from 8.48.1 to 8.69.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.69.0/packages/eslint-plugin) Updates `@typescript-eslint/parser` from 8.48.1 to 8.69.0 - [Release notes](https://github.com/typescript-eslint/typescript-eslint/releases) - [Changelog](https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/parser/CHANGELOG.md) - [Commits](https://github.com/typescript-eslint/typescript-eslint/commits/v8.69.0/packages/parser) Updates `eslint` from 9.39.1 to 10.9.1 - [Release notes](https://github.com/eslint/eslint/releases) - [Commits](eslint/eslint@v9.39.1...v10.9.1) Updates `eslint-plugin-react-hooks` from 7.0.1 to 7.1.1 - [Release notes](https://github.com/facebook/react/releases) - [Changelog](https://github.com/react/react/blob/main/packages/eslint-plugin-react-hooks/CHANGELOG.md) - [Commits](https://github.com/facebook/react/commits/eslint-plugin-react-hooks@7.1.1/packages/eslint-plugin-react-hooks) Updates `eslint-plugin-storybook` from 10.5.4 to 10.6.0 - [Release notes](https://github.com/storybookjs/storybook/releases) - [Changelog](https://github.com/storybookjs/storybook/blob/next/CHANGELOG.md) - [Commits](https://github.com/storybookjs/storybook/commits/v10.6.0/code/lib/eslint-plugin) --- updated-dependencies: - dependency-name: "@typescript-eslint/eslint-plugin" dependency-version: 8.65.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint - dependency-name: "@typescript-eslint/parser" dependency-version: 8.65.0 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint - dependency-name: eslint dependency-version: 10.8.0 dependency-type: direct:development update-type: version-update:semver-major dependency-group: eslint - dependency-name: eslint-plugin-react-hooks dependency-version: 7.1.1 dependency-type: direct:development update-type: version-update:semver-minor dependency-group: eslint - dependency-name: eslint-plugin-storybook dependency-version: 10.5.5 dependency-type: direct:development update-type: version-update:semver-patch dependency-group: eslint ... Signed-off-by: dependabot[bot] <support@github.com>
24b43cd to
aac06a9
Compare
eslint 10 cannot be installed: `eslint-plugin-react@7.37.5` is the latest published version and caps its peer at `^3 || ... || ^9.7`, so `npm ci` fails with ERESOLVE before any gate runs. The only other dist-tag, `next`, is `7.8.0-rc.0` — a 2014-era prerelease peering `^3 || ^4` — so upstream has shipped no eslint 10 support at all. `eslint` is therefore pinned back to `^9.39.1` and the group lands partial. The other three bumps are kept, and all three accept eslint 9: @typescript-eslint/eslint-plugin ^8.48.1 -> ^8.69.0 eslint-plugin-react-hooks ^7.0.1 -> ^7.1.1 eslint-plugin-storybook ^10.5.4 -> ^10.6.0 `eslint-plugin-react-hooks` 7.1.1 fixes two upstream defects this repo had pinned, and both fixes surface as real work rather than noise. `react-hooks/set-state-in-effect` now resolves the callee of a member call, and no longer bails on the whole enclosing function when it meets an inline `exhaustive-deps` directive. `effectHookLintGate.test.ts` had asserted both defects deliberately, each flagged in its own comment as the assertion that would age and as an intended red on the day upstream fixed it. That day arrived: both are inverted rather than deleted, so they now guard the fixes against a regression, and the surrounding prose is corrected so it no longer describes fixed bugs in the present tense. Attribution was isolated by pinning the plugin back to 7.0.1 with eslint held at 9.x, which flips both back. The `no-restricted-syntax` ban and the config-level suppressions are left in place — relaxing either is a change-document decision, not a dependency bump's to make. The sharper rule also reports a genuine pre-existing anti-pattern in `TextCard`, which reset its edit buffer via `setEditContent(content)` in an effect. Replaced with React's documented adjust-state-during-render pattern rather than suppressed; the behaviour is unchanged and the cascading render is gone. Gates: npm ci clean from the regenerated lockfile (plain `npm install`, no --force and no --legacy-peer-deps), lint 0 errors, 6989 tests in 270 files passing, build:ha:prod succeeds. Claude-Session: https://claude.ai/code/session_01DvDKK1wMEuMYybZdNixWVC
`eslint-plugin-react-hooks` 7.1.1 teaches `set-state-in-effect` to see through the ref guard around this write, so the inline disable stopped suppressing anything and became an "unused eslint-disable directive" warning on every lint run — noise the bump introduced. Removed the directive and kept the reasoning it documented as a plain comment. Confirmed by probe that the silence is the rule's new precision and not a bail: an unconditional `setIsStreaming(false)` planted in this same effect reports at error, so the enclosing function is still fully analysed. Lint is now byte-for-byte identical to main's — 0 errors, the same 10 pre-existing warnings — so the group bump adds no lint noise at all. Claude-Session: https://claude.ai/code/session_01DvDKK1wMEuMYybZdNixWVC
The radix-ui group bump (#352) landed on main and touched the same two files. package.json auto-merged — the two groups are disjoint dependency sets — and package-lock.json was regenerated from main's lockfile with a plain `npm install` rather than hand-merged, so main's radix resolutions carry through intact and the eslint group is layered on top. Verified: @radix-ui/themes 3.3.0 and @radix-ui/react-slider 1.4.7 from main, eslint held at 9.39.1, @typescript-eslint/{eslint-plugin,parser} 8.70.0, eslint-plugin-react-hooks 7.1.1, eslint-plugin-storybook 10.6.0. Claude-Session: https://claude.ai/code/session_01DvDKK1wMEuMYybZdNixWVC
Codecov Report✅ All modified and coverable lines are covered by tests. Additional details and impacted files@@ Coverage Diff @@
## main #338 +/- ##
=======================================
Coverage 89.51% 89.51%
=======================================
Files 234 234
Lines 8952 8954 +2
Branches 3037 3038 +1
=======================================
+ Hits 8013 8015 +2
Misses 733 733
Partials 206 206 ☔ View full report in Codecov by Harness. 🚀 New features to boost your workflow:
|
@types/node ^26.4.1 (#189) landed on main and touched the same two files. package.json auto-merged — the dependency sets are disjoint — and package-lock.json was regenerated from main's with a plain `npm install` rather than hand-merged, so main's resolutions carry through intact and the eslint group is layered on top. Verified after regeneration: @types/node 26.5.0 (range ^26.4.1) from #189, @radix-ui/themes 3.3.0 and react-slider 1.4.7 from #352, eslint held at 9.39.1, @typescript-eslint/{eslint-plugin,parser} 8.70.0, eslint-plugin-react-hooks 7.1.1, eslint-plugin-storybook 10.6.0. Claude-Session: https://claude.ai/code/session_01DvDKK1wMEuMYybZdNixWVC
There was a problem hiding this comment.
🟡 Changes recommended
The lockfile introduces a stricter Node engine constraint (eslint-visitor-keys@5.0.1 requires Node ^22.13.0 on the Node 22 line) and the @typescript-eslint suite versions in package.json should be aligned with what the lockfile/CI actually installs to avoid unintended drift.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Pull request overview
Updates the repo’s ESLint toolchain (plugin group) while intentionally holding eslint on 9.x, and adjusts a couple of repo-local lint gate tests and call sites to reflect upstream eslint-plugin-react-hooks behavior changes.
Changes:
- Bump dev deps:
@typescript-eslint/eslint-plugin,eslint-plugin-react-hooks, andeslint-plugin-storybook(witheslintstaying on^9.39.1). - Update
effectHookLintGateexpectations to pin upstream fixes ineslint-plugin-react-hooks@7.1.1(member-call analysis + no whole-function bail on inlineexhaustive-depsdirectives). - Refactor
TextCard’s prop→state synchronization to avoidreact-hooks/set-state-in-effect, and remove a now-dead inline disable inuseCameraStreamStatus(keeping rationale as a comment).
File summaries
| File | Description |
|---|---|
| src/components/TextCard.tsx | Replaces effect-driven prop→state syncing with a render-time “adjust state when prop changes” pattern to satisfy set-state-in-effect. |
| src/components/CameraCard/useCameraStreamStatus.ts | Removes an inline lint-disable that became unused after the plugin upgrade; retains the reasoning as a comment. |
| src/tests/effectHookLintGate.test.ts | Updates test assertions/docs to treat the previously-pinned upstream defects as fixed in eslint-plugin-react-hooks@7.1.1. |
| package.json | Bumps ESLint-related devDependencies (with eslint intentionally held on 9.x). |
| package-lock.json | Lockfile refresh reflecting the updated lint toolchain dependency graph. |
Review details
- Files reviewed: 4/5 changed files
- Comments generated: 1
- Review effort level: Lite
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
…lugin The manifest declared `@typescript-eslint/parser: ^8.48.1` while `@typescript-eslint/eslint-plugin` moved to `^8.69.0`, and the lockfile resolved both to 8.70.0 — so the parser range was stale relative to what actually installs. Raised to `^8.69.0` to match the plugin's range style. Not a fix for a live break: `eslint-plugin@8.70.0` peers `@typescript-eslint/parser: ^8.70.0`, and `^8.48.1` resolves to the newest 8.x, so the peer was already satisfied. The two packages release in lockstep and the parser belongs to this same Dependabot group, so a manifest that disagrees with its lockfile is what makes a later bump hard to reason about. This is a declaration change only. Verified it tightens the declaration and nothing else: all 889 resolved package versions are byte-identical before and after regenerating from this branch's own lockfile — 0 changed, 0 added, 0 removed — and the lockfile diff is the single mirrored range line. The parser still resolves 8.70.0. Reported by Copilot on package.json:72. Claude-Session: https://claude.ai/code/session_01DvDKK1wMEuMYybZdNixWVC
There was a problem hiding this comment.
🟡 Changes recommended
The lockfile introduces a transitive dependency with a stricter Node engine requirement than the repo’s stated minimum, which can cause install warnings/failures in environments that enforce engines.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 4/5 changed files
- Comments generated: 0 new
- Review effort level: Lite
There was a problem hiding this comment.
🟡 Changes recommended
The new render-phase sync in TextCard can introduce redundant rerenders during typing, and one updated comment references a non-existent “planted” code line in a way that’s confusing to maintain.
Once you've addressed the issues Copilot identified, you can request another Copilot review.
Review details
- Files reviewed: 4/5 changed files
- Comments generated: 2
- Review effort level: Lite
TextCard: the render-phase sync comment claimed an effect "would cascade an extra render", implying this form saves one. Measured through the real GridView path with a render counter over 11 keystrokes, that is false — this form and the effect form both cost 1.00 renders per keystroke, because `content` never changes under the card while typing: GridView passes no `entityId`, so `handleContentChange`'s store write-back is gated off and nothing feeds back. Deliberately wiring that loop puts both forms at 2.00 per keystroke, still equal. The implementation is unchanged and the comment now states the lint contract as the actual reason, with the numbers, rather than a performance claim that does not hold. useCameraStreamStatus: the comment read as though an unconditional setState existed in the committed effect. It does not — it was a probe. Reworded to describe the check that was run and its result, keeping the substance: the effect is still analysed, so the silence around the guarded call is the rule's precision rather than a bail. Both reported by Copilot. Comment-only; no behaviour changes. Claude-Session: https://claude.ai/code/session_01DvDKK1wMEuMYybZdNixWVC
There was a problem hiding this comment.
🟢 Approval recommended
The dependency bumps and accompanying code/test adjustments are internally consistent and the updated lint-gate tests explicitly pin the upstream behavior changes they depend on.
Review details
- Files reviewed: 4/5 changed files
- Comments generated: 0 new
- Review effort level: Lite
Bumps the eslint group with 4 updates in the / directory: @typescript-eslint/eslint-plugin, eslint, eslint-plugin-react-hooks and eslint-plugin-storybook.
Updates
@typescript-eslint/eslint-pluginfrom 8.48.1 to 8.69.0Release notes
Sourced from @typescript-eslint/eslint-plugin's releases.
... (truncated)
Changelog
Sourced from @typescript-eslint/eslint-plugin's changelog.
... (truncated)
Commits
9a6e546chore(release): publish 8.69.0513638efix(eslint-plugin): [no-meaningless-void-operator] report void on non-call ex...1dba4c5chore(eslint-plugin): fixeslint-plugin/require-test-error-positionsreport...a2fccaefix(eslint-plugin): [unified-signatures] compare type parameters by constrain...a23069dtest(eslint-plugin): [no-mixed-enums] add error positions (#12779)3f0dffdfix(eslint-plugin): [no-mixed-enums] use scope analysis instead of type check...e18fea8test(eslint-plugin): [no-floating-promises] reactivate skippednode:testsp...324515ctest(eslint-plugin): [no-unnecessary-condition] add tests for optional chains...2a387f1feat(eslint-plugin): [no-misused-promises] add flagUnions option for checkCon...8f4e00achore(release): publish 8.68.0Updates
@typescript-eslint/parserfrom 8.48.1 to 8.69.0Release notes
Sourced from @typescript-eslint/parser's releases.
... (truncated)
Changelog
Sourced from @typescript-eslint/parser's changelog.
... (truncated)
Commits
9a6e546chore(release): publish 8.69.08f4e00achore(release): publish 8.68.055f6d5dchore: enable source maps (#12677)20a261fchore(release): publish 8.67.03b155bbchore: use typescript 7 for typechecking (#12601)e51b11bchore(release): publish 8.66.063ba81bchore(release): publish 8.65.0eaf4576feat: add warning when TS 7 is detected (#12529)d8f1044feat(parser): add onUnsupportedTypeScriptVersion option to error on unsupport...0d06406chore: add attw validation to repo (#12437)Updates
eslintfrom 9.39.1 to 10.9.1Release notes
Sourced from eslint's releases.
... (truncated)
Commits
5c8c24110.9.1a7f3b7dBuild: changelog update for 10.9.11e641c9fix: no-loss-of-precision false positive with trailing decimal point (#21251)ad74a8ddocs: add deprecation steps for EOL package versions (#21248)3c3ae53chore: update ecosystem plugins (#21249)c27bc9210.9.0fa831d9Build: changelog update for 10.9.0899dbf1chore: update github/codeql-action action to v4.37.7 (#21243)08de88efeat: handle underflow in no-loss-of-precision (#21218)9ef407adocs: use eslint.config.* wherever config file names are listed (#21216)Maintainer changes
This version was pushed to npm by eslintbot, a new releaser for eslint since your current version.
Updates
eslint-plugin-react-hooksfrom 7.0.1 to 7.1.1Release notes
Sourced from eslint-plugin-react-hooks's releases.
Changelog
Sourced from eslint-plugin-react-hooks's changelog.
Commits
Updates
eslint-plugin-storybookfrom 10.5.4 to 10.6.0Release notes
Sourced from eslint-plugin-storybook's releases.
... (truncated)
Changelog
Sourced from eslint-plugin-storybook's changelog.
... (truncated)
Commits
a777773Bump version from "10.6.0-beta.3" to "10.6.0" [skip ci]f32b366Bump version from "10.6.0-beta.2" to "10.6.0-beta.3" [skip ci]0ad1336Bump version from "10.6.0-beta.1" to "10.6.0-beta.2" [skip ci]16359eeBump version from "10.6.0-beta.0" to "10.6.0-beta.1" [skip ci]2e0e2f6Bump version from "10.6.0-alpha.9" to "10.6.0-beta.0" [skip ci]6a6dec2Bump version from "10.6.0-alpha.8" to "10.6.0-alpha.9" [skip ci]cd2d163Bump version from "10.6.0-alpha.7" to "10.6.0-alpha.8" [skip ci]898f0ceBump version from "10.6.0-alpha.6" to "10.6.0-alpha.7" [skip ci]71af1ebESLint Plugin: Restore Node types after cross-package CSF imports5c8a210ESLint Plugin: Import CSF export helpers from a narrow module