Skip to content

v6.0.0

Choose a tag to compare

@ladamczyk-it ladamczyk-it released this 15 Aug 19:22
· 29 commits to master since this release

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
  • baseConfig is renamed to jsLayer in
    @ladamczyk/qoq-eslint-v9-js, and disabledRules is 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

  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-ts-vitest-rtl. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).
  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-ts-vitest. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).
  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-ts-react. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).
  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-ts-jest-rtl. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).
  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-ts-jest. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).
  • baseConfig, testConfig and strictConfig are no longer
    exported from @ladamczyk/qoq-eslint-v9-ts. Use configs.base, configs.test
    and configs.strict — ESLint flat-config arrays — via
    defineConfig({ files: [...], extends: [configs.base] }).
  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-js-vitest-rtl. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq

  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-js-vitest. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq

  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-js-react. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq

  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-js-jest-rtl. Use configs.base, an ESLint flat-config
    array, via defineConfig({ files: [...], extends: [configs.base] }).

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01C5PqJM7GcARsLB7KY8L6hq

  • baseConfig is no longer exported from
    @ladamczyk/qoq-eslint-v9-js-jest. Use configs.base, an ESLint flat-config
    array, via defineConfig({ 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 export configs.base; templates that
    only export baseConfig no longer work with this CLI.

Co-Authored-By: Claude Opus 5 noreply@anthropic.com
Claude-Session: https://claude.ai/code/session_01Jdsj5hAzX6GLH53kkDrPJw

  • configs.base keeps two reactLayer rule options that the
    legacy merged baseConfig silently dropped, so code that passed before can
    now fail. import-x/order gains pathGroups: [{ pattern: 'react*', group: 'builtin', position: 'before' }] and pathGroupsExcludedImportTypes: ['react*'], so React imports must now be ordered first. no-restricted-imports
    gains lodash/debounce and lodash/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-inert testing-library/* rules via rtlLayer
    (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.