# Prisma 6.x AI safety guard — migrate reset/dev 必须显式 consent env

**日期**：2026-05-18
**场景**：robot_manager v3 schema review 修复后跑 `prisma migrate reset --force --skip-seed`，被 Prisma 拒绝。

## 踩坑

```
$ npx prisma migrate reset --force --skip-seed

Error: Prisma Migrate detected that it was invoked by Claude Code.

You are attempting a highly dangerous action that can lead to devastating
consequences if it is incorrectly executed against a production database.

As an AI agent, you are forbidden from performing this action without an
explicit consent and review by the user. ...
```

`--force` 也不行——Prisma 6.x 专门加了 AI 识别 + 拒绝。`migrate dev`（带潜在 reset）同样会触发。

## 解决

把用户的明示同意原话**完整放入** `PRISMA_USER_CONSENT_FOR_DANGEROUS_AI_ACTION` 环境变量再执行：

```bash
PRISMA_USER_CONSENT_FOR_DANGEROUS_AI_ACTION="嗯，可以reset。" \
  npx prisma migrate reset --force --skip-seed
```

要点：
- 必须**先**让用户明示同意（不能 AI 自己捏一个 consent 字符串）
- consent 文本是用户原话，不能换行 / 不能用引号包裹（env 解析坑）
- 同 PRISMA_USER_CONSENT 只对当前命令生效；新进程要重新带

## 何时遇到

- `prisma migrate reset` —— 永远触发
- `prisma migrate dev` —— 检测到要 reset DB 时触发（schema drift / 缺 migration）
- 安全命令（`migrate status` / `migrate deploy` / `generate` / `validate` / `format`）不受影响

## 关联

- `prisma migrate deploy` 不触发 guard，适合"已有 migration 文件、只 apply" 的场景。第二个 commit
  的 partial unique migration 就用 deploy 走的：写好 SQL 文件 → `migrate deploy` apply。
- 项目 standard 04 § 5a「生产环境只读」铁律 + Prisma 这个 guard 在精神上一致，
  都是「破坏性操作必须人类明示」。
