Changelog - 2026-10-18
dev-configs gains no-leaked-render, six more accessibility rules and a shared ignore list
EnhancementIn one line. A frontend project can delete its local copies of these lint rules and take them from @venizia/dev-configs.
What changed
NoLeakedRenderRule(venizia/no-leaked-render) is on inreactHouseConfigs.{count && <X />}draws0whencountis0; writecount ? <X /> : null.eslint --fixrewrites it.disabled={a && b}is a value, not a JSX child, and passes.- Six more
jsx-a11yrules inReactOxlintConfigsandReactEslintConfigs, as errors:click-events-have-key-events,no-static-element-interactions,no-noninteractive-element-interactions,label-has-associated-control,heading-has-content,anchor-is-valid. Both presets now run 15. ConstClassValuesRule(venizia/const-class-values): an exported type named*State,*Status,*Stage,*Mode,*Kindor*Typethat is a union of string literals should be a const class plusTConstValue. No preset turns it on - three IGNIS types still match - so switch it on yourself:[ConstClassValuesRule.NAME]: ConstClassValuesRule.build().ignoreon the oxlint presets, andLintIgnore. oxlint cannot ignore a project path from.configs/, soReactOxlintConfigs.create({ ignore: ['src/gen/**'] })turns every rule off for those paths.LintIgnore.eslint({ patterns })is the matching ESLint entry, andLintIgnore.oxlint({ config, patterns })wraps a config you finished yourself.
typescript
// .configs/eslint.config.mjs
import { LintIgnore, reactHouseConfigs } from '@venizia/dev-configs/linters';
import { LINT_IGNORE } from './lint-ignore.mjs';
export default [LintIgnore.eslint({ patterns: LINT_IGNORE }), ...reactHouseConfigs];Who is affected
- A React project on
reactHouseConfigs.cond && <X />now fails lint (eslint --fixrepairs it), and an element with a click handler needs a keyboard handler or a realbutton. - A project that kept these rules in its own config. Delete the local copies. Its
no-new-errorandmax-params-ownalready match the shipped ones; the shippedno-new-erroralso catches a bareError('x')call. - Everyone else. Nothing new fails.
Not changed
consistent-type-importsand decorated parameters. oxlint 1.88 has no option to keep a decorated constructor parameter's class as a value import, so--fixstill writesimport { type X }. IGNIS does not inject by that parameter type, so the preset stays as it is. Code that readsdesign:paramtypesshould check that import by hand.
Files: packages/dev-configs/src/linters/house/no-leaked-render.rule.ts, packages/dev-configs/src/linters/house/const-class-values.rule.ts, packages/dev-configs/src/linters/ignore.ts, packages/dev-configs/src/linters/react-eslint.ts, packages/dev-configs/src/linters/react-oxlint.ts