P PasteCode
规则

Prisma 项目的 Claude Code 规则

适用于 Prisma ORM 项目的 Claude Code 规则,涵盖迁移安全性、查询模式、关联加载以及防止智能体破坏模式。

Claude CodeCursorCodex Next.jsPostgreSQLTypeScript
.md .json 更新于 2026年6月8日

将此文件作为 CLAUDE.md 添加到你的仓库根目录。Claude Code 会自动读取 CLAUDE.md(以及 AGENTS.md),并将其作为项目级别指令应用于每个会话。

Claude Code 规则文件

Claude Code Rules
# Prisma Project Rules
## Schema rules — highest risk area
- NEVER edit `prisma/schema.prisma` without explicitly confirming the change with the
developer first. Schema changes generate migrations that alter production data.
- When asked to add a field, propose the schema diff and the migration name, then
STOP and wait for approval before running `prisma migrate dev`.
- New required fields MUST have a `@default(...)` value or be added as optional
(`String?`). Adding a required field without a default breaks `migrate deploy` on
a non-empty database.
- Do NOT add `@@map` or `@map` attributes to rename existing tables or columns without
explicitly discussing the migration strategy — renames require data migration steps.
- Use `@db.Text` for long strings, `@db.VarChar(n)` for bounded strings. Never use
bare `String` for fields that will store user-generated content longer than 255 chars.
## Migration rules
- Run `prisma migrate dev --name <descriptive-name>` to generate migrations locally.
Never hand-edit files in `prisma/migrations/` — they are append-only.
- In CI/CD, run `prisma migrate deploy` (not `migrate dev`). Never run `migrate dev`
against a production database.
- After adding or changing models, always regenerate the client: `prisma generate`.
Never commit code that imports from `@prisma/client` without a matching `generate` run.
## Query patterns
- Import the Prisma client from `src/lib/prisma.ts` (the singleton). Never instantiate
`new PrismaClient()` in application code — this leaks connections in serverless.
- Use `select` or `include` explicitly on every query. Never rely on Prisma's default
select-all behaviour — it causes over-fetching and leaks sensitive fields.
- Paginate all list queries with `take` and `skip` (or cursor-based pagination with
`cursor` + `take`). Never run a `findMany` without a limit on a user-facing endpoint.
- Wrap multi-step mutations in `prisma.$transaction([...])` or the interactive
transaction callback. Never perform two sequential writes that must be atomic outside
a transaction.
- Use `prisma.$queryRaw` and `Prisma.sql` template tag for raw SQL only. Never
concatenate user input into a raw query string — this is a SQL injection vector.
## Relation loading
- Prefer `include` over N+1 patterns. If a resolver loads a relation in a loop,
refactor to a single query with `include` or use a DataLoader.
- Do not `include` deeply nested relations more than 2 levels deep in a single query.
Flatten with multiple targeted queries and join in application code if needed.
## Type safety
- All repository functions must return typed Prisma result types or mapped domain types.
Never return `any` or plain `object` from a database function.
- Use `Prisma.validator()` to define reusable select/include shapes that keep return
types precise.
## Definition of done
- `prisma validate` passes.
- `tsc --noEmit` passes.
- No `new PrismaClient()` outside `src/lib/prisma.ts`.
- No `findMany` calls without `take`.
- Migration files are committed alongside schema changes.

为什么需要这些规则

  • 未经确认不得编辑模式 是不可商量的。Prisma 迁移在生产环境中不可逆——在没有数据迁移计划的情况下删除列或重命名表会导致数据丢失。那些“乐于助人”的智能体一旦接触模式就会愉快地运行 migrate dev
  • 单例客户端导入 防止了最常见的无服务器陷阱之一:连接池耗尽。在 Next.js 无服务器函数中,除非使用单例模式,否则每次模块求值都会创建一个新的 PrismaClient 实例(以及新的连接池)。那些从 Prisma 文档复制示例的智能体通常会跳过这一点。

适用场景

  • 使用 Prisma 与 PostgreSQL 的 Next.js 或 Node.js 应用,且模式成熟、迁移安全性至关重要。

不适用场景

  • 尚无数据的全新项目,你希望智能体能自由迭代模式——在此阶段放宽迁移审批要求。