# ERR-20260513-001: `.claude/settings.json` 累积 dirty 阻塞 rebase / checkout

## 现象

```
git rebase origin/develop
error: cannot rebase: You have unstaged changes.
error: Please commit or stash them.
```

`git status` 显示只有 `.claude/settings.json` 是 modified，但内容是 session 过程中 Claude Code 自动追加的 permission allowlist（与功能 PR 无关）。

## 根因

`.claude/settings.json` 的 `permissions.allow` 数组会在每次新命令获批后自动追加一条。session 一长就累积一堆。这些追加**与本次功能开发无关**，但会被 git 当作 dirty 状态阻塞：

- `git rebase`（要求干净工作区）
- `git checkout <branch>`（除非 --force）
- `git pull --rebase`

## 解决（已验证）

rebase 前先 stash 这个文件，rebase 后再 pop：

```bash
git stash push -m "settings noise" .claude/settings.json
git rebase origin/develop
git stash pop
```

stash 路径形式只动这一个文件，不影响其他 staged / unstaged 变更。

## 不该的做法

- ❌ `git checkout -- .claude/settings.json` — 直接丢掉这次 session 攒的权限，下次又要重新批
- ❌ `git add .claude/settings.json` 一起提交进功能 PR — 跟功能无关，污染 review diff
- ❌ 加进 `.gitignore` — 这个文件本身是项目共享配置，不能 ignore

## 长期方案

考虑：
1. 项目 `.claude/settings.json` 与个人 `.claude/settings.local.json` 拆分（CLAUDE Code 本来就支持），让自动 allowlist 累积只写到 local；或
2. 在 fewer-permission-prompts skill 跑完一轮整理后再提交个 chore PR 把高频 allowlist 入库

## 复发可能性

**极高**——只要 Claude Code 在 session 中获批新命令，下次 git 操作都可能再撞。这个 ERR 是高频踩坑，值得每次 session 开头先检查一遍。
