---
date: 2026-05-10
tags: [agent-pool, agent-release, learnings, data-loss-risk]
---

# `agent-release.sh` 默认 `git clean -fdx` 会清掉 untracked 的 `.learnings/` 文件

## 场景

`scripts/dev/agent-pool/agent-release.sh:99`:

```bash
git clean -fdx -e node_modules -e .next -e .env -e '.env.*' -e TASK.md
```

排除列表只有 `node_modules` / `.next` / `.env*` / `TASK.md`，**`.learnings/` 不在排除中**。

slot 内有未提交的 untracked learning 文件（按 CLAUDE.md 188 行铁律应该 commit 前沉淀的，但 AI agent 经常先 stash / 先放 untracked 干别的），release 一跑就被物理删除。

## 实战触发条件

- 干完 PR，learning 还没 commit
- 直接 `agent-release.sh <slot>`（默认行为）
- worktree 被 `reset --hard` + `clean -fdx` → learning 文件消失
- 有 `--keep-changes` 标志可以避免，但默认不会用

## 防御

**release 前必须先确认沉淀**：

```bash
# release 前 check
git status -uall --porcelain | grep '^??' | grep '.learnings/' && \
  echo "⚠️ 有 untracked learning，先 commit / 走 rolling 分支再 release"
```

或者用 `--keep-changes` 显式保留 worktree。

## 工作流改进建议（未实施）

`agent-release.sh` 在跑 `git clean -fdx` 前加 pre-check：

```bash
if git -C "${slot_dir}" status -uall --porcelain | grep -q '^?? \.learnings/'; then
  echo "⚠️  slot 内有 untracked .learnings/ 文件，release 默认会删。要继续? [Y/n]"
  # 或自动加 -e .learnings/
fi
```

把 `.learnings/` 加进默认 exclude 列表也是合理选项 —— learning 文件高价值低占用，宁愿留个体也别误删。

## 关联陷阱

跟「stash 漏沉淀陷阱」（同 PR 一起补的另一条 learning）是同一类问题的两个出口：
- 没及时 commit + stash → stash 永久带走（PR 合后远端 auto-delete）
- 没及时 commit + worktree 留着 → release 时被 clean 清掉
