# AGENTS.md — core-eslint **Tag:** tooling Shared ESLint 9 flat configs (rules, plugins, parser settings) consumed by all packages via `eslint.config.js`. Enforces boundary rules alongside Turborepo's `boundaries` feature (which validates the workspace dependency graph at build time). ## 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/core-eslint/base"; import boundariesConfig from "@repo/core-eslint/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/core-eslint/base"; import nextConfig from "@repo/core-eslint/next"; import boundariesConfig from "@repo/core-eslint/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 ```