v6.0.0
6.0.0 (2026-08-15)
- feat!: compose configs.base in eslint-v9-ts-jest-rtl (plan 2.4) (589e13c)
- feat!: compose configs.base in eslint-v9-ts-react (plan 2.2) (cb5b358)
- feat!: compose configs.base in eslint-v9-ts-vitest-rtl (plan 2.3) (ffd65aa)
- feat!: compose generated eslint config with defineConfig (plan 3.2) (ed1a587)
- feat!: delete the pre-merged baseConfig export from eslint-v9-js-jest (plan 4.2) (3735fe4)
- feat!: delete the pre-merged baseConfig export from eslint-v9-js-jest-rtl (plan 4.3) (7bcc1de)
- feat!: delete the pre-merged baseConfig export from eslint-v9-js-react (plan 4.4) (dd23120)
- feat!: delete the pre-merged baseConfig export from eslint-v9-js-vitest (plan 4.5) (dd550e8)
- feat!: delete the pre-merged baseConfig export from eslint-v9-js-vitest-rtl (plan 4.6) (0199e96)
- feat!: delete the pre-merged baseConfig export from eslint-v9-ts-jest (plan 4.8) (577915c)
- feat!: delete the pre-merged baseConfig export from eslint-v9-ts-jest-rtl (plan 4.9) (165a36c)
- feat!: delete the pre-merged baseConfig export from eslint-v9-ts-react (plan 4.10) (c1eb700)
- feat!: delete the pre-merged baseConfig export from eslint-v9-ts-vitest (plan 4.11) (f2ec46a)
- feat!: delete the pre-merged baseConfig export from eslint-v9-ts-vitest-rtl (plan 4.12) (88f9031)
- feat!: delete the pre-merged baseConfig, testConfig and strictConfig exports from eslint-v9-ts (plan 4.7) (0f69a9e)
- feat!: restore upstream testing-library rules in eslint-v9-js-jest-rtl (plan 1.5) (55fe1c3)
- feat!: restore upstream testing-library rules in eslint-v9-js-vitest-rtl (plan 1.4) (f3bb62e)
- refactor!: rename baseConfig to jsLayer and unify the layer type (d8ff6ef)
Bug Fixes
- bump packages (5c999de)
- cleanup (a9b414f)
- deprecate objectMergeRight (1afac02)
- drop switch-exhaustiveness-check to restore master parity (plan 5.8) (ca8a2e6)
- qoq skill adjust (9290b99)
- surface prepare-time errors and simplify the eslint glob filtering (plan 6.2) (585b561)
Features
- accept flat-config arrays in stats helpers (plan 3.1) (1358b46)
- add usage statistics (d19c36a)
- compose configs.base from delta layers in eslint-v9-ts-jest (plan 2.1) (8f6b859)
- draft defineConfig layer composition for the js/ts/vitest eslint chain (0b27242)
- extract jestLayer and configs.base in eslint-v9-js-jest (plan 1.2) (33891d1)
- extract reactLayer and configs.base in eslint-v9-js-react (plan 1.3) (87537c6)
BREAKING CHANGES
- some interfaces changed, one deprecation added
baseConfigis renamed tojsLayerin
@ladamczyk/qoq-eslint-v9-js, anddisabledRulesis no longer exported from
qoq-eslint-v9-js-{jest,jest-rtl,vitest,vitest-rtl,react}.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01A3QPd3n6kE3TuSXCDrLm4W
baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-ts-vitest-rtl. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-ts-vitest. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-ts-react. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-ts-jest-rtl. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-ts-jest. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).baseConfig,testConfigandstrictConfigare no longer
exported from @ladamczyk/qoq-eslint-v9-ts. Useconfigs.base,configs.test
andconfigs.strict— ESLint flat-config arrays — via
defineConfig({ files: [...], extends: [configs.base] }).baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-js-vitest-rtl. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq
baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-js-vitest. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq
baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-js-react. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq
baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-js-jest-rtl. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq
baseConfigis no longer exported from
@ladamczyk/qoq-eslint-v9-js-jest. Useconfigs.base, an ESLint flat-config
array, viadefineConfig({ files: [...], extends: [configs.base] }).
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq
- the generated ESLint config now requires the
@ladamczyk/qoq-eslint-v9-* templates to exportconfigs.base; templates that
only exportbaseConfigno longer work with this CLI.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01Jdsj5hAzX6GLH53kkDrPJw
configs.basekeeps tworeactLayerrule options that the
legacy mergedbaseConfigsilently dropped, so code that passed before can
now fail.import-x/ordergainspathGroups: [{ pattern: 'react*', group: 'builtin', position: 'before' }]andpathGroupsExcludedImportTypes: ['react*'], so React imports must now be ordered first.no-restricted-imports
gainslodash/debounceandlodash/fp/debounce, so importing either is now
reported. Both are severity 1, but the qoq CLI fails on warnings as well as
errors — a consumer's build can break on upgrade.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01Jdsj5hAzX6GLH53kkDrPJw
- consumers of this package's flat-config array now
inherit 21 previously-inert testing-library/* rules via rtlLayer: at
error - await-async-events, await-async-queries, await-async-utils,
no-await-sync-events, no-await-sync-queries, no-container,
no-dom-import, no-global-regexp-flag-in-query, no-manual-cleanup,
no-node-access, no-promise-in-fire-event, no-render-in-lifecycle,
no-unnecessary-act, no-wait-for-multiple-assertions,
no-wait-for-side-effects, no-wait-for-snapshot, prefer-find-by,
prefer-presence-queries, prefer-query-by-disappearance,
render-result-naming-convention; at warn - no-debugging-utils.
prefer-screen-queries stays disabled (0).
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01MEYpMdMkkhTejsmZNrsa73
- consumers of this package's flat-config array now
inherit 21 previously-inerttesting-library/*rules viartlLayer
(fixed upstream in eslint-v9-js-vitest-rtl / plan 1.x): at error —
await-async-events, await-async-queries, await-async-utils,
no-await-sync-events, no-await-sync-queries, no-container,
no-dom-import, no-global-regexp-flag-in-query, no-manual-cleanup,
no-node-access, no-promise-in-fire-event, no-render-in-lifecycle,
no-unnecessary-act, no-wait-for-multiple-assertions,
no-wait-for-side-effects, no-wait-for-snapshot, prefer-find-by,
prefer-presence-queries, prefer-query-by-disappearance,
render-result-naming-convention; at warn — no-debugging-utils.
prefer-screen-queries stays disabled (0).
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01MEYpMdMkkhTejsmZNrsa73
- 21 eslint-plugin-testing-library rules are now active that were
previously registered but never enabled: await-async-events, await-async-queries,
await-async-utils, no-await-sync-events, no-await-sync-queries, no-container,
no-debugging-utils (warn), no-dom-import, no-global-regexp-flag-in-query,
no-manual-cleanup, no-node-access, no-promise-in-fire-event, no-render-in-lifecycle,
no-unnecessary-act, no-wait-for-multiple-assertions, no-wait-for-side-effects,
no-wait-for-snapshot, prefer-find-by, prefer-presence-queries,
prefer-query-by-disappearance, render-result-naming-convention. The qoq CLI fails on
warnings as well as errors, so consumers may see build failures until they fix or
override these. - 21 eslint-plugin-testing-library rules are now active that were
previously registered but never enabled: await-async-events, await-async-queries,
await-async-utils, no-await-sync-events, no-await-sync-queries, no-container,
no-debugging-utils (warn), no-dom-import, no-global-regexp-flag-in-query,
no-manual-cleanup, no-node-access, no-promise-in-fire-event, no-render-in-lifecycle,
no-unnecessary-act, no-wait-for-multiple-assertions, no-wait-for-side-effects,
no-wait-for-snapshot, prefer-find-by, prefer-presence-queries,
prefer-query-by-disappearance, render-result-naming-convention. The qoq CLI fails on
warnings as well as errors, so consumers may see build failures until they fix or
override these.