---
date: 2026-05-19
tags: [agent-pool, slot, prisma, npm-install, dependency-drift, integration-test]
---

# agent-pool slot 切到新 feature 分支后必须重做 `prisma generate` + `npm install`

## 症状

slot-5 claim 已有数天，今天接 #341 后从 `origin/develop` 起新 feature 分支 `feature/meeting-attendance-l1-coverage`，写完 L1 测试跑 `run-backend-integration.sh`，**连挂两次**：

**第 1 次**：
```
TypeError: Cannot read properties of undefined (reading 'PURCHASE_ORDER')
  at backend/src/modules/robot-manager/import/import.controller.ts:32
    'purchase-order': ImportBatchType.PURCHASE_ORDER
```

**第 2 次**（修了第 1 次之后）：
```
Cannot find module '@modelcontextprotocol/sdk/server/mcp.js'
  at backend/src/modules/internal-app-platform/mcp.controller.ts:11
```

**第 3 次**：17/17 全绿，16.3s。

## 根因

slot worktree 跟主仓库共享 `.git/`，但 **`backend/node_modules/` + `backend/node_modules/.prisma/client/`（prisma 生成的 TS 代码）是 slot 各自独立的**（git worktree 不共享 untracked 文件）。

slot claim 当下的快照里：
- `node_modules/` 是池初始化时的 `npm install` 产物
- `.prisma/client/` 是池初始化时的 `prisma generate` 产物

但 develop 在 slot claim 之后又合并了：
- **PR #422**（5/18）`fix(internal-app-platform): MCP 协议合规 (官方 SDK)` —— `backend/package.json` 新增 `@modelcontextprotocol/sdk` 依赖
- 中间某个 PR —— `prisma/schema/` 新增了 `ImportBatchType.PURCHASE_ORDER` 等 enum 值

slot worktree `git fetch + checkout -b feature/xxx origin/develop` **不会自动重做 npm install / prisma generate**——这两个动作分别由 `package.json` 变化和 `prisma/schema` 变化触发，git 本身不知道。

## 修复

slot 切到新 feature 分支后立刻补：

```bash
cd backend
npm install              # package.json 可能有新依赖
npm run prisma:generate  # prisma schema 可能加了 enum / model
```

这两步本地跑总耗时 ~30–60 秒，比反复 fail 再调试便宜得多。

## 改进建议（待落地）

`scripts/dev/agent-pool/agent-claim.sh` 在 claim 一个长期闲置的 slot（last heartbeat > N 天 / slot.claimed_at 之后 main 仓库有 develop 推进）时，**自动检测并提示**：

- `backend/package.json` hash vs `backend/node_modules/.package-lock.json` 不一致 → 提示 `npm install`
- `backend/prisma/schema/**/*.prisma` mtime > `backend/node_modules/.prisma/client/index.d.ts` → 提示 `prisma:generate`

或者直接在 claim 时**自动跑**这两步（开销 30–60 秒，比每次 contributor 自己踩坑值）。

## 关联

- [`.learnings/2026-05-19-main-repo-drift-meta-rootcause.md`](2026-05-19-main-repo-drift-meta-rootcause.md) —— 同根因（"凭旧快照推理"），本条是 slot 工作树这一具体场景的事实记录
- [`CLAUDE.md`](../CLAUDE.md) §「本地启动约定」第 2 步已经写了 `prisma:generate`，但只覆盖"首次启动"，没覆盖"中途切新 feature 分支"
- [`scripts/dev/agent-pool/README.md`](../scripts/dev/agent-pool/README.md) —— 待补的"slot 长期闲置后切新分支" 章节
