# 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
```
