A cascade of .eslintrc files with extends chains four deep, where nobody could say which rules were actually active.
// eslint.config.js — an array, evaluated in order
import js from '@eslint/js'
import ts from 'typescript-eslint'
export default [
js.configs.recommended,
...ts.configs.recommended,
{
files: ['**/*.test.ts'],
rules: { '@typescript-eslint/no-explicit-any': 'off' },
},
]
The flat config is a JavaScript array with explicit ordering, which means the effective configuration is readable rather than derived from a resolution algorithm. Porting it revealed that two plugins in the old chain had been overriding each other and one rule everybody believed was on had been off since 2021. The files key replacing overrides is the main mechanical change.