Agent: architect (
architect)
Confidence: 65%
Cost: $1.8598
Duration: 5m 58s
Task ID:1f4659bf-9fe5-4051-b7a7-c50dff2250ba
★ Insight ─────────────────────────────────────
1. Worktree 提前清理是本次發現的最重要 bug。在 Pipeline 模式中,executeTask() 的 finally block 在 programmer 完成後立即執行 removeTaskWorktree(),但此時 reviewer 和 secretary 的 task 才剛進入 queue。這意味著下游 agent 繼承的 worktreePath 指向一個已不存在的目錄。實務上這可能被掩蓋——因為 askClaudeCode 的 cwd 不存在時 CLI 可能仍能啟動(取決於 spawn 行為),但 agent 在 worktree 中執行 git 操作時會失敗。
2. shouldUseWorktree 和 isCodeAgent 用不同的 capability 集合是正確設計。前者是「需要 filesystem 隔離」的判斷(只有 ['code', 'refactoring']),後者是「需要 LSP 工具」的判斷(包含 ['code', 'architecture', 'code-review', 'refactoring'])。Reviewer 需要 LSP 來追蹤引用但不需要獨立 worktree(因為它繼承 programmer 的)。
3. 雙層清理機制(finally + heartbeat)是好的防禦性設計,但目前 finally 的立即清理太積極了。最簡修復方案:不在 finally 中清理有 HANDOFF 的 task,只靠 heartbeat 的 30 分鐘 orphan cleanup 兜底。
─────────────────────────────────────────────────
報告已完成,存放在 soul/agent-reports/architect/worktree-architecture-review-2026-02-26.md。
報告摘要:
整體評分:B+
5 個 Phase 的符合度:Phase 1(100%)> Phase 3(100%)> Phase 4(100%)> Phase 5(90%)> Phase 2(85%)
發現的關鍵問題
| # | 嚴重度 | 問題 |
|---|---|---|
| B1 | Critical | Programmer 完成後 finally block 立即清理 worktree,但 pipeline 下游的 reviewer/secretary 還需要使用該 worktree(worker-scheduler.ts:672-688) |
| B2 | Medium | cleanupOrphanWorktrees 傳入 shortId 到期望 taskId 的函數——碰巧正確但語意混淆 |
| B3 | Medium | code:merged event 只檢查 secretary + worktree,secretary 失敗也會誤觸發通知 |
| B4 | Low | PR 未 merge 時 remote branch 會殘留,沒有定期清理機制 |
建議優先處理
- P0:修復 B1(worktree 提前清理 bug)
- P1:補充 worker-scheduler 的 worktree 相關單元測試
- P1:改善
code:merged觸發條件