Problem
`npm run lint` is only `tsc --noEmit` (`package.json`) — a type-check, not a lint. There's no ESLint config and no formatter, so style consistency (unused vars beyond what `tsc` catches, import ordering, etc.) and formatting aren't enforced anywhere in CI or locally.
Proposal
- Add ESLint with the TypeScript plugin (flat config, matching the project's modern tooling — Node 24, TS ~6) plus Prettier for formatting.
- Add `npm run lint` → run both `tsc --noEmit` and `eslint .` (or split into `lint:types`/`lint:style` composed under `lint`).
- Wire into CI (`ci.yml`'s existing "Lint" step already runs `npm run lint`, so this is a drop-in addition) and into the future pre-commit hook (see lefthook issue).
Notes
Keep the initial rule set light — the goal is catching real issues (unused imports, floating promises) not bikeshedding style; Prettier removes the style debate entirely by auto-formatting.
Problem
`npm run lint` is only `tsc --noEmit` (`package.json`) — a type-check, not a lint. There's no ESLint config and no formatter, so style consistency (unused vars beyond what `tsc` catches, import ordering, etc.) and formatting aren't enforced anywhere in CI or locally.
Proposal
Notes
Keep the initial rule set light — the goal is catching real issues (unused imports, floating promises) not bikeshedding style; Prettier removes the style debate entirely by auto-formatting.