## [ERR-20260417-002] Prisma Client 进程缓存导致新枚举值不被识别

**日期**: 2026-04-17
**类别**: Prisma / dev workflow
**严重度**: 中（只在改枚举后出现，一次重启就好，但不知道原因时容易卡住）

### 问题描述

`schema.prisma` 的枚举加了新值（如 `CURRENCY`）、`prisma db push` + `prisma generate` 都执行成功、数据库里也能看到新值，但后端 API 调用依然报：

```
Invalid `this.prisma.robotOption.findMany()` invocation ...
Expected RobotOptionCategory.
```

### 根本原因

Prisma Client 的 TS 类型是**生成时静态绑进 node_modules/@prisma/client**。正在运行的 Node 进程（nodemon 下的 ts-node，或 `node dist/main.js`）在启动时 `require('@prisma/client')`，类型被缓存在 v8 的 module cache 里，**`prisma generate` 不会触发重载**。

雪上加霜的是：`nodemon --watch src` 默认只监听 `src/` 目录，**不监听 `prisma/`**，所以改 schema 不会触发 nodemon 重启。

### 绕行方案

做完以下任一操作后，**必须手动重启后端进程**：
- 改 `prisma/schema/*.prisma`
- 跑 `prisma db push` / `prisma migrate`
- 跑 `prisma generate`
- 跑种子脚本（如果种子触发了 client 重新生成）

重启方式：
```bash
# 找到 robot-business 后端进程
lsof -ti tcp:3501 -sTCP:LISTEN    # 或者 3001，看 backend/.env 的 BACKEND_PORT
kill <PID>
# nodemon 会自动 respawn 新进程并加载新 Prisma Client
```

如果 nodemon 本身 stuck（子进程被 kill 后没立即 respawn），可以 `touch src/main.ts` 触发文件变化事件。

### 预防措施

1. **Schema 改动后检查清单**：
   - [ ] `prisma db push` 同步开发库
   - [ ] `prisma generate` 生成新 client
   - [ ] 重启后端 dev server（kill PID 或重新 `npm run start:dev`）
   - [ ] 跑种子
   - [ ] L1 验证

2. **可选改进**：给 `nodemon` 增加 `--watch prisma` 让它也监听 schema 改动。但 `prisma generate` 本身不会触发文件变化，还是要手动重启。

### Metadata
- Reproducible: yes（改枚举后不重启后端必现）
- Related Files: backend/prisma/schema/*.prisma, backend/package.json (start:dev)
