eslint-flat-configlisted
Install: claude install-skill monte3l/m3l-automation
# ESLint flat config (m3l-automation)
The single source of lint truth is [`eslint.config.js`](../../../eslint.config.js)
at the repo root. It is an **ordered array** built with `tseslint.config(...)`.
There is no `.eslintrc`; flat config is the only format ESLint 10 supports.
## When to use
Editing `eslint.config.js`: adding/scoping a rule, adding an override block,
changing `ignores`, wiring a plugin, or debugging a type-checked-lint failure.
## How this config is laid out (top to bottom — order matters)
Later objects override earlier ones for the files they match, so the sequence is
deliberate:
1. **Global `ignores`** — a standalone object with only `ignores` (no `files`).
Ignores `**/dist/**`, `**/node_modules/**`, `**/coverage/**`,
`.claude/{agents,skills,rules,worktrees}/**`, and `.remember/**`. Note
`bin/**` and `.claude/hooks/**` are deliberately **not** ignored — they are the
only real code under `.claude/` and get their own block below.
2. **Shared presets, spread in** — `js.configs.recommended`,
`...tseslint.configs.recommendedTypeChecked`, `importX.flatConfigs.recommended`,
`importX.flatConfigs.typescript`. Flat config has **no top-level `extends` key**;
you compose by spreading preset arrays/objects into the top-level array.
3. **`**/*.ts` (type-checked core)** — turns on `projectService`, sets the import
resolver, and enforces the project's rules (`.js` extension via
`import-x/extensions`, `no-explicit-any`, `no-floating-promises`