## [ERR-20260429-003] setup-worktree.sh slot 检测漏了 orphan PG 容器

**日期**: 2026-04-29
**类别**: 开发脚本 / Docker 状态漂移
**严重度**: 低（首次创建 worktree 直接撞 docker bind error）

### 现象
新建 worktree → 脚本分配 slot 35 → `docker run -p 3502:5432` → `Bind for 0.0.0.0:3502 failed: port is already allocated`。

### 根因
`find_next_port_slot()` 的检测口径只有 `git worktree list --porcelain`：把每个 worktree 的 `.env` 里 `FRONTEND_PORT` 收上来。**但删过的 worktree 留下的 stale Docker 容器（`ffws-wt-pg-3502` 这种）不在 git list 里，端口却仍被绑住**。

而且容器可能是 stopped 状态 —— 此时 `ss -tln` 看不到端口，光看 listening 也不够。脚本随后会 `docker start` 把它唤醒，端口冲突就在 `docker run` 那步爆出。

### 修法
slot 检测同时排除：
1. listening 端口（覆盖正在跑的非 worktree 服务）
2. `docker ps -a --format '{{.Names}}'` 里 `ffws-wt-pg-<port>` 模式的容器（覆盖 stopped orphan）

### 预防 / 关联
- 真正的根因是没有 cleanup 流程：删 worktree 时只 `git worktree remove`，docker 容器 / Caddy 段都没动 → orphan 越积越多
- 同 PR 加了 `scripts/dev/cleanup-worktree.sh`，删 worktree 时一起清 docker + Caddy

---
