# AGENTS.md — eslint-config Shared ESLint 9 flat configs (rules, plugins, parser settings) consumed by all packages via `eslint.config.js`. ## What it owns - **`base.js`** — Core ESLint rules: no `console`, no `debugger`, strict `@typescript-eslint` config - **`next.js`** — Next.js-specific rules: `"use client"` boundaries, `next/no-img-element` - **`react-internal.js`** — React library rules: component display names, hook rules - **`boundaries.js`** — `eslint-plugin-boundaries` config enforcing vertical feature architecture: - Features may only import `core-*` and tooling packages - Core packages may only import other core packages (with composition exceptions for `core-cms`, `core-api`) - No cross-feature imports - No deep source path imports (only public subpath exports) ## How packages consume them Each package creates `eslint.config.js` at its root: ```javascript // packages/blog/eslint.config.js import baseConfig from "@repo/eslint-config/base"; import boundariesConfig from "@repo/eslint-config/boundaries"; export default [ ...baseConfig, ...boundariesConfig, { files: ["src/**/*.tsx"], rules: { "react/display-name": "off", }, }, ]; ``` Apps may add Next.js-specific rules: ```javascript // apps/web-next/eslint.config.js import baseConfig from "@repo/eslint-config/base"; import nextConfig from "@repo/eslint-config/next"; import boundariesConfig from "@repo/eslint-config/boundaries"; export default [ ...baseConfig, ...nextConfig, ...boundariesConfig, ]; ``` ## Test conventions - No unit tests (config validation via lint pass/fail in other packages) - Verify at CI: `pnpm lint` succeeds across all packages - ESLint should catch boundary violations: `pnpm lint` fails on feature→feature imports or deep imports ## Structure ``` src/ base.js # Core TypeScript + ESLint config next.js # Next.js additions react-internal.js # React library rules boundaries.js # Feature boundaries + composition rules index.js # Re-exports all configs ```