# AGENTS.md — core-cms **Tag:** core-composition **Composition-only package** that aggregates feature Payload collections and globals into a single Payload config. It does not define its own collections; instead, it imports them from feature packages. ## Responsibilities - **Compose Payload config** — `buildConfig()` with all collections and globals from features - **Type generation** — Output `generated-types.ts` from Payload's TypeScript generator - **No collection definitions** — all collections owned by their respective features (`@repo/auth`, `@repo/blog`, etc.) - **No business logic** — purely structural assembly ## Allowed imports - **`@repo//cms`** subpath exports only (to get collections/globals) - e.g., `import { articles } from "@repo/blog/cms"` - e.g., `import { users } from "@repo/auth/cms"` - e.g., `import { pages, siteSettings } from "@repo/marketing-pages/cms"` ## Must NOT import - Any feature's root package or other subpaths (e.g., NOT `@repo/blog/di`, NOT `@repo/blog/entities`) - Any app package - `@repo/core-shared`, `@repo/core-api`, `@repo/core-trpc`, `@repo/core-ui` > Note: `@repo/core-trpc` and `@repo/core-ui` are optional packages scaffolded via `pnpm turbo gen core-package trpc` / `ui`. If not present, these constraints still apply to any future installation. ## Public exports From `package.json`: - `.` — the Payload config (default export) + buildConfig re-export - `./generated-types` — Payload-generated TypeScript types Example usage: ```typescript import { buildConfig } from "@repo/core-cms"; // or import type { Config, User, Article } from "@repo/core-cms/generated-types"; ``` ## Test conventions - No unit tests (composition layer) - Verify at app boot: `pnpm dev --filter @repo/cms` succeeds and admin UI loads - Type generation: `pnpm generate:types` in `apps/cms` ## Structure ``` src/ payload.config.ts # imports feature /cms exports, calls buildConfig() generated-types.ts # auto-generated by Payload index.ts # re-exports config ```