Skip to content

Rule Catalog

Curated rule overrides, activation boundaries, rationale, fixtures, and ownership.

Generated rule catalog

This file is generated from src/ledger.ts. Run pnpm generate after ledger changes.

The curated v0.1 ledger contains 27 reviewed additions, overrides, and exceptions with repository-owned fixtures. The broad baseline is materialized from the pinned Oxlint categories and snapshot-tested; the single experimental rule remains isolated from every configurable artifact.

RuleDefect classProfileActivationAI behaviorPathSeverityStabilityRationaleFixturesReplacesConflictsReview trigger
eslint/no-debuggerdebugger statements committed to production codecoreessentialnativeerrorstableA committed breakpoint changes runtime behavior and can expose internals.fixtures/rules/core/valid.ts; fixtures/rules/core/invalid.tseslint/no-debuggerReview if Oxlint changes debugger-statement parsing or defaults.
eslint/no-dupe-keysoverwritten object literal propertiescoreessentialnativeerrorstableDuplicate keys silently discard an earlier value.fixtures/rules/core/valid.ts; fixtures/rules/core/invalid.tseslint/no-dupe-keysReview if JavaScript changes duplicate-key semantics.
eslint/no-unsafe-finallycontrol flow that suppresses try or catch completioncoreessentialnativeerrorstableReturn or throw in finally silently replaces the original result or error.fixtures/rules/core/valid.ts; fixtures/rules/core/invalid.tseslint/no-unsafe-finallyReview if Oxlint changes control-flow analysis for finally blocks.
eslint/valid-typeofmisspelled typeof comparison valuescoreessentialoptions → [{"requireStringLiterals":true}]. AI can consistently emit literal typeof comparisons, eliminating ambiguous variable-based checks without adding a new rule.nativeerrorstableInvalid typeof strings make a branch permanently false.fixtures/rules/core/valid.ts; fixtures/rules/core/invalid.tseslint/valid-typeofReview when JavaScript adds a new typeof result.
import/no-duplicatesduplicate imports from one moduleimportsrecommendednativeerrorstableOne import declaration per module prevents split ownership and noisy diffs.fixtures/rules/imports/valid.ts; fixtures/rules/imports/invalid.tseslint/no-duplicate-imports, eslint-plugin-import/no-duplicateseslint/no-duplicate-importsReview when the native rule subsumes type-only import edge cases.
import/no-self-importmodules importing themselvesimportsstrictnativeerrorstableSelf imports indicate a mistaken path and can create partial initialization.fixtures/rules/imports/valid.ts; fixtures/rules/imports/invalid.tseslint-plugin-import/no-self-importReview if import resolution behavior changes.
typescript/ban-ts-commentunexplained TypeScript diagnostic suppressiontypescript-syntaxessentialnativeerrorstableType suppressions must use an expected-error directive with an explanation.fixtures/rules/typescript-syntax/valid.ts; fixtures/rules/typescript-syntax/invalid.ts@typescript-eslint/ban-ts-commentReview when TypeScript introduces new diagnostic directives.
typescript/no-duplicate-enum-valuesambiguous duplicate enum valuestypescript-syntaxessentialnativeerrorstableDuplicate enum values make reverse mapping and intent ambiguous.fixtures/rules/typescript-syntax/valid.ts; fixtures/rules/typescript-syntax/invalid.ts@typescript-eslint/no-duplicate-enum-valuesReview if TypeScript changes enum runtime emission.
typescript/no-extra-non-null-assertionredundant chained non-null assertionstypescript-syntaxrecommendednativeerrorstableRepeated assertions obscure intent without changing the type.fixtures/rules/typescript-syntax/valid.ts; fixtures/rules/typescript-syntax/invalid.ts@typescript-eslint/no-extra-non-null-assertionReview if TypeScript changes non-null assertion syntax.
typescript/no-floating-promisesunhandled promise rejectionstypescript-type-awareessentialnative-type-awareerrorversion-pinnedUnhandled promises can fail after the caller has reported success.fixtures/rules/typescript-type-aware/valid.ts; fixtures/rules/typescript-type-aware/invalid.ts@typescript-eslint/no-floating-promisesReview on any Oxlint, oxlint-tsgolint, or TypeScript version change.
typescript/await-thenableawaiting values that cannot settle asynchronouslytypescript-type-awareessentialnative-type-awareerrorversion-pinnedAwaiting a non-thenable often reveals a missing call or incorrect API type.fixtures/rules/typescript-type-aware/valid.ts; fixtures/rules/typescript-type-aware/invalid.ts@typescript-eslint/await-thenableReview on any Oxlint, oxlint-tsgolint, or TypeScript version change.
typescript/switch-exhaustiveness-checknon-exhaustive switches over closed unionstypescript-type-awarestrictnative-type-awareerrorversion-pinnedExhaustive switches keep behavior aligned when a union gains a member.fixtures/rules/typescript-type-aware/valid.ts; fixtures/rules/typescript-type-aware/invalid.ts@typescript-eslint/switch-exhaustiveness-checkReview on any Oxlint, oxlint-tsgolint, or TypeScript version change.
react/jsx-keyunstable identity for rendered list childrenreactessentialnativeerrorstableMissing keys can associate component state with the wrong list item.fixtures/rules/react/valid.tsx; fixtures/rules/react/invalid.tsxreact/jsx-key, @eslint-react/no-missing-keyReview when React changes list reconciliation guidance.
react/jsx-no-undefundefined JSX component referencesreactessentialnativeerrorstableAn undefined JSX identifier fails at render time.fixtures/rules/react/valid.tsx; fixtures/rules/react/invalid.tsxreact/jsx-no-undefReview if the JSX runtime changes identifier resolution.
react/rules-of-hooksconditional or reordered React hook callsreactessentialnativeerrorstableHook call order must remain stable between renders.fixtures/rules/react/valid.tsx; fixtures/rules/react/invalid.tsxreact-hooks/rules-of-hooksReview when React changes the Rules of Hooks.
jsx-a11y/alt-textimages without an accessible text alternativejsx-a11yessentialnativeerrorstableImages need meaningful alternative text or explicit decorative intent.fixtures/rules/jsx-a11y/valid.tsx; fixtures/rules/jsx-a11y/invalid.tsxjsx-a11y/alt-textReview when JSX accessibility semantics or framework mappings change.
node/no-exports-assignCommonJS exports object reassignmentnodeessentialnativeerrorstableReassigning exports does not update module.exports.fixtures/rules/node/valid.cjs; fixtures/rules/node/invalid.cjsn/no-exports-assignReview if Node.js changes CommonJS export semantics.
node/no-path-concatplatform-dependent path concatenationnodestrictnativeerrorstableString concatenation with __dirname can create invalid cross-platform paths.fixtures/rules/node/valid.cjs; fixtures/rules/node/invalid.cjsn/no-path-concatReview if Node.js path APIs or rule semantics change.
node/no-new-requireconstructing through the CommonJS require functionnodestrictnativeerrorstablerequire is a loader function, not a constructor.fixtures/rules/node/valid.cjs; fixtures/rules/node/invalid.cjsn/no-new-requireReview if Node.js changes CommonJS loader semantics.
vitest/no-focused-testsfocused Vitest cases committed to the suitevitestscopednativeerrorstableFocused tests silently skip most of the suite in CI.fixtures/rules/vitest/valid.ts; fixtures/rules/vitest/invalid.tsvitest/no-focused-testsjest/no-focused-testsReview on Vitest major versions or native plugin changes.
vitest/no-import-node-testNode test-runner APIs mixed into a Vitest suitevitestscopednativeerrorstableMixing test runners bypasses Vitest lifecycle and configuration behavior.fixtures/rules/vitest/valid.ts; fixtures/rules/vitest/invalid.tsvitest/no-import-node-testReview on Vitest or node:test interop changes.
vitest/no-identical-titleduplicate Vitest case titles in one suitevitestscopednativeerrorstableUnique titles make failures and filters unambiguous.fixtures/rules/vitest/valid.ts; fixtures/rules/vitest/invalid.tsvitest/no-identical-titlejest/no-identical-titleReview on Vitest major versions or native plugin changes.
jest/no-focused-testsfocused Jest cases committed to the suitejestscopednativeerrorstableFocused tests silently skip most of the suite in CI.fixtures/rules/jest/valid.ts; fixtures/rules/jest/invalid.tsjest/no-focused-testsvitest/no-focused-testsReview on Jest major versions or native plugin changes.
jest/no-jasmine-globalslegacy Jasmine globals in a Jest suitejestscopednativeerrorstableJasmine globals tie tests to an obsolete implementation detail of Jest.fixtures/rules/jest/valid.ts; fixtures/rules/jest/invalid.tsjest/no-jasmine-globalsReview on Jest test-runner architecture changes.
jest/no-identical-titleduplicate Jest case titles in one suitejestscopednativeerrorstableUnique titles make failures and filters unambiguous.fixtures/rules/jest/valid.ts; fixtures/rules/jest/invalid.tsjest/no-identical-titlevitest/no-identical-titleReview on Jest major versions or native plugin changes.
eslint/no-warning-commentsunresolved TODO markers left by assisted developmentaiaiAdded only when ai: truenativewarningstableVisible TODO markers keep provisional generated code from becoming invisible debt.fixtures/rules/ai/valid.ts; fixtures/rules/ai/invalid.tseslint/no-warning-commentsReview when the AI profile gains a more specific native defect signal.
react/react-compilerReact code rejected by the experimental compilerreact-compilernamednative-experimentalwarningexperimentalCompiler diagnostics are useful migration evidence but are not stable enough for defaults.fixtures/rules/react-compiler/valid.tsx; fixtures/rules/react-compiler/invalid.tsxreact-hooks/react-compilerReview every Oxlint or React Compiler upgrade before promoting the rule.

Native replacement example

import/no-duplicates is the owner for duplicate-import diagnostics. It replaces both the predecessor's JavaScript-plugin rule eslint-plugin-import/no-duplicates and the overlapping core rule eslint/no-duplicate-imports. The conflict field prevents both owners from entering one generated config; the shared valid/invalid fixture proves the native behavior.

Stability boundary

react/react-compiler is emitted only by the explicitly named experimental artifact and begins as a warning. Testing Library, Playwright, and Storybook are package-owned file-scoped integrations rather than ledger profiles; Testing Library inherits the upstream DOM or React preset, while Playwright and Storybook inherit flat/recommended. Local evidence covers selection, activation, isolation, runtime resolution, and a clean-consumer diagnostic. SonarJS and regular-expression plugin domains are Deferred with explicit re-entry gates in the migration guide.