diff --git a/eslint.config.mjs b/eslint.config.mjs index c19f0cfa..c2ca5e3a 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -5,6 +5,13 @@ const eslintConfig = [ ...nextCoreWebVitals, prettier, { + // Scope the typescript-eslint rule overrides to TS/TSX files. Without + // the `files` filter, eslint flat-config attempts to apply these + // rules to every walked file (including root-level JS / mjs / json + // configs) and fails because the typescript-eslint plugin only + // registers itself for TS/TSX. Surfaced 2026-05-14 when CI's + // `pnpm lint` command ran across the whole repo root. + files: ['**/*.ts', '**/*.tsx'], rules: { '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], @@ -31,14 +38,27 @@ const eslintConfig = [ { // Tests assert response shape via expect() — narrowing every // `res.json()` to a structural type adds boilerplate without catching - // bugs. Allow `any` casts at JSON boundaries in test files. + // bugs. Allow `any` casts at JSON boundaries in test files. Also + // relax unused-vars to warn (destructured-but-unused helpers are + // common in setup/teardown patterns). files: ['tests/**/*.ts', 'tests/**/*.tsx'], rules: { '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-unused-vars': ['warn', { argsIgnorePattern: '^_' }], }, }, { - ignores: ['client-portal/**', 'next-env.d.ts'], + ignores: [ + 'client-portal/**', + 'next-env.d.ts', + // Agent worktree artifacts — not part of the canonical tree. + '.claude/**', + // Build output + Next generated types + '.next/**', + 'dist/**', + // Other sub-projects with their own toolchains + 'website/**', + ], }, ]; diff --git a/package.json b/package.json index 5b219631..0e49a8ee 100644 --- a/package.json +++ b/package.json @@ -9,7 +9,7 @@ "build:server": "esbuild src/server.ts --bundle --platform=node --target=node20 --format=cjs --outdir=dist --packages=external --tsconfig=tsconfig.server.json", "build:worker": "esbuild src/worker.ts --bundle --platform=node --target=node20 --format=cjs --outdir=dist --packages=external --tsconfig=tsconfig.server.json", "start": "next start", - "lint": "next lint", + "lint": "eslint .", "format": "prettier --write \"src/**/*.{ts,tsx,json,css}\"", "db:generate": "drizzle-kit generate", "db:push": "drizzle-kit push",