import nextCoreWebVitals from 'eslint-config-next/core-web-vitals'; import prettier from 'eslint-config-prettier/flat'; const eslintConfig = [ ...nextCoreWebVitals, prettier, { rules: { '@typescript-eslint/no-explicit-any': 'error', '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }], // React Compiler safety rules shipped with eslint-config-next@16 / // react-hooks@7. Triage status (2026-05-13 sweep): // purity, set-state-in-render, immutability, refs, // set-state-in-effect — promoted to error after the cleanup // sweep (Wave 3 of the 2026-05-12 audit). All hits migrated to // either useQuery, render-phase derivation, key-based remount, // or a justified eslint-disable for canonical setState-on- // subscription patterns. New regressions block CI. // incompatible-library — informational only ("Compiler // skipped this file because of a non-Compiler-safe import"). // No action needed; silenced to keep `pnpm lint` output // actionable. 'react-hooks/purity': 'error', 'react-hooks/set-state-in-render': 'error', 'react-hooks/immutability': 'error', 'react-hooks/refs': 'error', 'react-hooks/set-state-in-effect': 'error', 'react-hooks/incompatible-library': 'off', }, }, { // 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. files: ['tests/**/*.ts', 'tests/**/*.tsx'], rules: { '@typescript-eslint/no-explicit-any': 'off', }, }, { ignores: ['client-portal/**', 'next-env.d.ts'], }, ]; export default eslintConfig;