Skip to content

chore(deps-dev): bump the eslint plugin group and hold eslint at 9.x - #338

Merged
fx merged 9 commits into
mainfrom
dependabot/npm_and_yarn/eslint-f1f408a335
Sep 8, 2026
Merged

fx merged 9 commits into
mainfrom
dependabot/npm_and_yarn/eslint-f1f408a335

Conversation

@dependabot

@dependabot dependabot Bot commented on behalf of github Aug 3, 2026

Copy link
Copy Markdown
Contributor

Scope reduced by a maintainer. Three of the bumps land — @typescript-eslint/eslint-plugin →^8.69.0, eslint-plugin-react-hooks →^7.1.1, eslint-plugin-storybook →^10.6.0.

eslint is held at ^9.39.1. eslint-plugin-react@7.37.5 is latest and caps its peer at eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7, so eslint 10 cannot resolve at all — npm ci failed with ERESOLVE and all four CI jobs died in under 15 seconds. The only other dist-tag, next7.8.0-rc.0, is a 2014-era prerelease peering ^3 || ^4; it looks newer and is far older. Dependabot will re-raise eslint 10 once the plugin supports it.

eslint-plugin-react-hooks@7.1.1 fixes two upstream defects this repo had pinned, and src/__tests__/effectHookLintGate.test.ts went red on both — each assertion carried a comment saying it would age and that red was the intended signal. set-state-in-effect now resolves the callee of a member call (so React.useEffect(...) is analysed), and an inline exhaustive-deps directive no longer bails the compiler on the whole enclosing function. Both assertions were inverted rather than deleted, so they now guard the fixes against regression; attribution was isolated by pinning the plugin back to 7.0.1 with eslint held, where both flip.

The sharper rule also caught a genuine pre-existing anti-pattern in TextCard.tsx (setEditContent(content) inside an effect), replaced with React's documented adjust-state-during-render pattern, and made an inline disable in useCameraStreamStatus.ts dead, which was removed with its reasoning kept as a comment. Neither is a suppression.

Deliberately not done here: moving the theme-workshop suppressions inline or dropping the no-restricted-syntax ban, even though the tests' own comments now permit both. Relaxing a policy is a change-document decision, not a dependency bump's.


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-plugin from 8.48.1 to 8.69.0

Release notes

Sourced from @​typescript-eslint/eslint-plugin's releases.

v8.69.0

8.69.0 (2026-08-31)

🚀 Features

  • eslint-plugin: [no-misused-promises] add flagUnions option for checkConditionals (#12603)

🩹 Fixes

  • eslint-plugin: [no-mixed-enums] use scope analysis instead of type checking for merged namespaces (#12731)
  • eslint-plugin: [unified-signatures] compare type parameters by constraint instead of name (#12741)
  • eslint-plugin: [no-meaningless-void-operator] report void on non-call expressions (#12727)
  • website: respect allowJs playground config (#12744)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.68.0

8.68.0 (2026-08-24)

🚀 Features

  • eslint-plugin: [strict-void-return] add fix suggestions (#12086)
  • utils: support ESLint rule meta.languages (#12663)

🩹 Fixes

  • eslint-plugin: [unified-signatures] deduplicate types in report (#12656)
  • eslint-plugin: [return-await] prevent autofix from breaking code in arrow-functions (#12707)
  • eslint-plugin: [unified-signatures] report identical signatures (#12678)
  • eslint-plugin: [no-unnecessary-type-assertion] prevent stack overflow in recursive types (#12711)
  • eslint-plugin: [no-floating-promises] setting ignoreVoid: false results in false negative in ArrowFunctionExpression (#12646)
  • eslint-plugin: [no-empty-object-type] ignore suggestions that result in invalid interfaces and export defaults (#12739)
  • website: playground crashes on extends configs (#12608)
  • website: account for thanks.dev and out-of-band donors in sponsors list (#12735)

❤️ Thank You

... (truncated)

Changelog

Sourced from @​typescript-eslint/eslint-plugin's changelog.

8.69.0 (2026-08-31)

🚀 Features

  • eslint-plugin: [no-misused-promises] add flagUnions option for checkConditionals (#12603)

🩹 Fixes

  • eslint-plugin: [no-meaningless-void-operator] report void on non-call expressions (#12727)
  • eslint-plugin: [unified-signatures] compare type parameters by constraint instead of name (#12741)
  • eslint-plugin: [no-mixed-enums] use scope analysis instead of type checking for merged namespaces (#12731)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.68.0 (2026-08-24)

🚀 Features

  • eslint-plugin: [strict-void-return] add fix suggestions (#12086)

🩹 Fixes

  • eslint-plugin: [no-empty-object-type] ignore suggestions that result in invalid interfaces and export defaults (#12739)
  • eslint-plugin: [no-floating-promises] setting ignoreVoid: false results in false negative in ArrowFunctionExpression (#12646)
  • eslint-plugin: [no-unnecessary-type-assertion] prevent stack overflow in recursive types (#12711)
  • eslint-plugin: [unified-signatures] report identical signatures (#12678)
  • eslint-plugin: [return-await] prevent autofix from breaking code in arrow-functions (#12707)
  • eslint-plugin: [unified-signatures] deduplicate types in report (#12656)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.67.0 (2026-08-10)

... (truncated)

Commits
  • 9a6e546 chore(release): publish 8.69.0
  • 513638e fix(eslint-plugin): [no-meaningless-void-operator] report void on non-call ex...
  • 1dba4c5 chore(eslint-plugin): fix eslint-plugin/require-test-error-positions report...
  • a2fccae fix(eslint-plugin): [unified-signatures] compare type parameters by constrain...
  • a23069d test(eslint-plugin): [no-mixed-enums] add error positions (#12779)
  • 3f0dffd fix(eslint-plugin): [no-mixed-enums] use scope analysis instead of type check...
  • e18fea8 test(eslint-plugin): [no-floating-promises] reactivate skipped node:test sp...
  • 324515c test(eslint-plugin): [no-unnecessary-condition] add tests for optional chains...
  • 2a387f1 feat(eslint-plugin): [no-misused-promises] add flagUnions option for checkCon...
  • 8f4e00a chore(release): publish 8.68.0
  • Additional commits viewable in compare view

Updates @typescript-eslint/parser from 8.48.1 to 8.69.0

Release notes

Sourced from @​typescript-eslint/parser's releases.

v8.69.0

8.69.0 (2026-08-31)

🚀 Features

  • eslint-plugin: [no-misused-promises] add flagUnions option for checkConditionals (#12603)

🩹 Fixes

  • eslint-plugin: [no-mixed-enums] use scope analysis instead of type checking for merged namespaces (#12731)
  • eslint-plugin: [unified-signatures] compare type parameters by constraint instead of name (#12741)
  • eslint-plugin: [no-meaningless-void-operator] report void on non-call expressions (#12727)
  • website: respect allowJs playground config (#12744)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

v8.68.0

8.68.0 (2026-08-24)

🚀 Features

  • eslint-plugin: [strict-void-return] add fix suggestions (#12086)
  • utils: support ESLint rule meta.languages (#12663)

🩹 Fixes

  • eslint-plugin: [unified-signatures] deduplicate types in report (#12656)
  • eslint-plugin: [return-await] prevent autofix from breaking code in arrow-functions (#12707)
  • eslint-plugin: [unified-signatures] report identical signatures (#12678)
  • eslint-plugin: [no-unnecessary-type-assertion] prevent stack overflow in recursive types (#12711)
  • eslint-plugin: [no-floating-promises] setting ignoreVoid: false results in false negative in ArrowFunctionExpression (#12646)
  • eslint-plugin: [no-empty-object-type] ignore suggestions that result in invalid interfaces and export defaults (#12739)
  • website: playground crashes on extends configs (#12608)
  • website: account for thanks.dev and out-of-band donors in sponsors list (#12735)

❤️ Thank You

... (truncated)

Changelog

Sourced from @​typescript-eslint/parser's changelog.

8.69.0 (2026-08-31)

This was a version bump only for parser to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.68.0 (2026-08-24)

This was a version bump only for parser to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.67.0 (2026-08-10)

This was a version bump only for parser to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.66.0 (2026-08-03)

This was a version bump only for parser to align it with other projects, there were no code changes.

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

8.65.0 (2026-07-20)

🚀 Features

  • add warning when TS 7 is detected (#12529)
  • parser: add onUnsupportedTypeScriptVersion option to error on unsupported TypeScript versions (#12465)

❤️ Thank You

See GitHub Releases for more information.

You can read about our versioning strategy and releases on our website.

... (truncated)

Commits
  • 9a6e546 chore(release): publish 8.69.0
  • 8f4e00a chore(release): publish 8.68.0
  • 55f6d5d chore: enable source maps (#12677)
  • 20a261f chore(release): publish 8.67.0
  • 3b155bb chore: use typescript 7 for typechecking (#12601)
  • e51b11b chore(release): publish 8.66.0
  • 63ba81b chore(release): publish 8.65.0
  • eaf4576 feat: add warning when TS 7 is detected (#12529)
  • d8f1044 feat(parser): add onUnsupportedTypeScriptVersion option to error on unsupport...
  • 0d06406 chore: add attw validation to repo (#12437)
  • Additional commits viewable in compare view

Updates eslint from 9.39.1 to 10.9.1

Release notes

Sourced from eslint's releases.

v10.9.1

Bug Fixes

  • 1e641c9 fix: no-loss-of-precision false positive with trailing decimal point (#21251) (Aleksandr Shoronov)

Documentation

  • ad74a8d docs: add deprecation steps for EOL package versions (#21248) (Francesco Trotta)

Chores

v10.9.0

Features

  • 08de88e feat: handle underflow in no-loss-of-precision (#21218) (Rithish S)
  • 55db479 feat: add checkConditionalExpressions to no-unmodified-loop-condition (#21175) (sethamus)

Bug Fixes

  • 2ba3025 fix: prevent unsafe no-var autofix with hoisted functions (#21213) (sethamus)
  • 8e69622 fix: Prevent no-var autofix when var is shadowed by catch parameter (#21204) (Yang Hyeonjong)
  • 684b579 fix: prefer-template invalid autofix creates a tagged template call (#21207) (김채영)

Documentation

  • 9ef407a docs: use eslint.config.* wherever config file names are listed (#21216) (Marry (Subin Yang))
  • 87f66f4 docs: Update README (GitHub Actions Bot)
  • 585ef37 docs: update architecture documentation (#21112) (Francesco Trotta)
  • f3993b0 docs: Update README (GitHub Actions Bot)
  • ffc87d6 docs: fix broken links in Further Reading sections (#21203) (Minsu)
  • 1a761e1 docs: update moved JSX specification links (#21198) (Imran Mustafa)
  • 4d00ca4 docs: update ESLint peer dependency to ^10.0.0 in shareable configs (#21202) (lumir)
  • 510d1a2 docs: Update README (GitHub Actions Bot)

Chores

  • 899dbf1 chore: update github/codeql-action action to v4.37.7 (#21243) (renovate[bot])
  • 9aa3873 chore: update ecosystem plugins (#21235) (ESLint Bot)
  • dc1e7a8 chore: update ecosystem plugins (#21208) (ESLint Bot)
  • f878d21 ci: bump pnpm/action-setup from 6.0.9 to 6.0.10 (#21200) (dependabot[bot])
  • 4891e50 ci: bump github/codeql-action from 4.37.4 to 4.37.6 (#21199) (dependabot[bot])

v10.8.1

Bug Fixes

  • 18eb0a7 fix: prevent ASI hazard in no-unused-labels autofix (#21173) (dongkyu lee)
  • 151ba3f fix: false positives in getter-return and accessor-pairs (#21163) (Grit)
  • 6898df9 fix: ignore meta-property names in id-denylist (#21166) (Pixel)
  • 4d7db66 fix: ignore meta-property names in id-match (#21167) (Pixel)
  • 677214e fix: handle ASI hazards in no-unused-vars removeVar suggestion (#20935) (kuldeep kumar)

Documentation

  • 7d0cbf8 docs: Update README (GitHub Actions Bot)
  • 0a05812 docs: add missing backticks to no-duplicate-imports.js (#21183) (Lee Daeun)
  • 678c90b docs: Update README (GitHub Actions Bot)
  • 8a10424 docs: Update README (GitHub Actions Bot)

... (truncated)

Commits
Maintainer changes

This version was pushed to npm by eslintbot, a new releaser for eslint since your current version.


Updates eslint-plugin-react-hooks from 7.0.1 to 7.1.1

Release notes

Sourced from eslint-plugin-react-hooks's releases.

eslint-plugin-react-hooks@7.1.1 (April 17, 2026)

Note: 7.1.0 accidentally removed the component-hook-factories rule, causing errors for users who referenced it in their ESLint config. This is now fixed.

  • Add deprecated no-op component-hook-factories rule for backwards compatibility. (@​mofeiZ in #36307)

eslint-plugin-react-hooks@7.1.0 (April 16, 2026)

This release adds ESLint v10 support, improves performance by skipping compilation for non-React files, and includes compiler lint improvements including better set-state-in-effect detection, improved ref validation, and more helpful error reporting.

Changelog

Sourced from eslint-plugin-react-hooks's changelog.

7.1.1

Note: 7.1.0 accidentally removed the component-hook-factories rule, causing errors for users who referenced it in their ESLint config. This is now fixed.

  • Add deprecated no-op component-hook-factories rule for backwards compatibility. (@​mofeiZ in #36307)

7.1.0

This release adds ESLint v10 support, improves performance by skipping compilation for non-React files, and includes compiler lint improvements including better set-state-in-effect detection, improved ref validation, and more helpful error reporting.

Commits

Updates eslint-plugin-storybook from 10.5.4 to 10.6.0

Release notes

Sourced from eslint-plugin-storybook's releases.

v10.6.0

10.6.0

New skills architecture for agentic workflows

Storybook 10.6 contains hundreds of fixes and improvements:

  • 💻 CLI bindings for agent tools/skills
  • 🅰️ Angular-Vite MCP/skills support and improved docgen/snippets (experimental)
  • 🟢 Vue MCP/skills support and improved docgen/snippets (experimental)
  • 🧩 Tanstack / NextJS-Vite framework bugfixes
  • ⚡ Improved performance and reduced bundle size

... (truncated)

Changelog

Sourced from eslint-plugin-storybook's changelog.

10.6.0

New skills architecture for agentic workflows

Storybook 10.6 contains hundreds of fixes and improvements:

  • 💻 CLI bindings for agent tools/skills
  • 🅰️ Angular-Vite MCP/skills support and improved docgen/snippets (experimental)
  • 🟢 Vue MCP/skills support and improved docgen/snippets (experimental)
  • 🧩 Tanstack / NextJS-Vite framework bugfixes
  • ⚡ Improved performance and reduced bundle size

... (truncated)

Commits
  • a777773 Bump version from "10.6.0-beta.3" to "10.6.0" [skip ci]
  • f32b366 Bump version from "10.6.0-beta.2" to "10.6.0-beta.3" [skip ci]
  • 0ad1336 Bump version from "10.6.0-beta.1" to "10.6.0-beta.2" [skip ci]
  • 16359ee Bump version from "10.6.0-beta.0" to "10.6.0-beta.1" [skip ci]
  • 2e0e2f6 Bump version from "10.6.0-alpha.9" to "10.6.0-beta.0" [skip ci]
  • 6a6dec2 Bump version from "10.6.0-alpha.8" to "10.6.0-alpha.9" [skip ci]
  • cd2d163 Bump version from "10.6.0-alpha.7" to "10.6.0-alpha.8" [skip ci]
  • 898f0ce Bump version from "10.6.0-alpha.6" to "10.6.0-alpha.7" [skip ci]
  • 71af1eb ESLint Plugin: Restore Node types after cross-package CSF imports
  • 5c8a210 ESLint Plugin: Import CSF export helpers from a narrow module
  • Additional commits viewable in compare view

Note
Automatic rebases have been disabled on this pull request as it has been open for over 30 days.

@dependabot @github

dependabot Bot commented on behalf of github Aug 3, 2026

Copy link
Copy Markdown
Contributor Author

Labels

The following labels could not be found: dependencies, npm. Please create them before Dependabot can add them to a pull request.

Please fix the above issues or remove invalid values from dependabot.yml.

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>
@dependabot
dependabot Bot force-pushed the dependabot/npm_and_yarn/eslint-f1f408a335 branch from 24b43cd to aac06a9 Compare September 7, 2026 04:12
fx added 3 commits September 8, 2026 03:24
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

codecov Bot commented Sep 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 89.51%. Comparing base (c7fb07b) to head (9b2b0e3).

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.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@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
@fx fx changed the title chore(deps-dev): bump the eslint group across 1 directory with 5 updates chore(deps-dev): bump the eslint plugin group and hold eslint at 9.x Sep 8, 2026
@fx
fx requested a lite review from Copilot September 8, 2026 04:03

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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, and eslint-plugin-storybook (with eslint staying on ^9.39.1).
  • Update effectHookLintGate expectations to pin upstream fixes in eslint-plugin-react-hooks@7.1.1 (member-call analysis + no whole-function bail on inline exhaustive-deps directives).
  • Refactor TextCard’s prop→state synchronization to avoid react-hooks/set-state-in-effect, and remove a now-dead inline disable in useCameraStreamStatus (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.

Comment thread package.json Outdated
fx added 2 commits September 8, 2026 04:08
…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

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟡 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

Comment thread src/components/TextCard.tsx
Comment thread src/components/CameraCard/useCameraStreamStatus.ts Outdated
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

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🟢 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

@fx
fx merged commit b699d86 into main Sep 8, 2026
7 checks passed
@fx
fx deleted the dependabot/npm_and_yarn/eslint-f1f408a335 branch September 8, 2026 05:06
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.

2 participants