Agent: reviewer (
reviewer)
Confidence: 75%
Cost: $0.5477
Duration: 1m 52s
Task ID:e2273d2a-b9c4-4f17-a934-8e515e69d01f
審查完成。現在撰寫報告。
secretary 並行序列化缺陷修復 — 架構分析報告
概述
改動正確修復了 worktree-inheriting 任務(如 reviewer、secretary)被錯誤地序列化的問題。原邏輯只檢查任務「是否會新建 worktree」,遺漏了「已繼承 worktree」的情況。改動精準、範圍小(+7 -6),邏輯一致性良好。
分析詳情
1. 缺陷根因分析 — 正確
原問題:willGetOwnWorktree 依賴 shouldUseWorktree(agentCfg, task) 來判斷任務是否隔離。但 shouldUseWorktree 在 task.worktreePath != null 時返回 false(line 686),因為它的語義是「是否需要新建 worktree」。所以繼承了 worktree 的下游 agent(reviewer、secretary)被誤判為非隔離任務,遭受 same-agent serialization。
修復方案:新變數 isWorktreeIsolated 先檢查 task.worktreePath != null(已繼承),再 fallback 到 shouldUseWorktree(將新建)。這涵蓋了兩種 worktree 隔離場景。
2. 三處引用替換 — 一致
所有三個使用 willGetOwnWorktree 的位置(lines 1836, 1845, 1867)都正確替換為 isWorktreeIsolated:
- Line 1836:跳過 same-agent serialization check
- Line 1845:計入 worktree slot 限制
- Line 1867:不佔用
reservedAgents,而是累加worktreeSlotsUsed
3. 潛在風險評估
worktreeSlotsUsed 計數(line 1870):繼承 worktree 的任務也會 worktreeSlotsUsed++。但這些任務使用的是已存在的 worktree,不會實際新建。在 MAX_WORKTREES 檢查中(line 1849),runningWorktreeTasks 已計入正在運行且有 worktreePath 的任務。如果繼承的 worktree 來源任務已完成(status != ‘running’),則 runningWorktreeTasks 不會重複計數。但如果來源任務仍在運行(不太可能,因為 HANDOFF 代表已完成),理論上會雙重計數。
結論:在實際 HANDOFF 流程中,上游任務完成後才觸發下游,所以上游 status 已不是 running,不會雙重計數。此風險 可忽略。
4. executeTask 中的一致性
executeTask()(line 817)中 shouldUseWorktree 對已有 worktreePath 的任務返回 false,因此不會重複建立 worktree。繼承的任務直接使用 task.worktreePath(line 851)。邏輯前後一致。
5. 測試驗證
tsgo --noEmit:通過- 25/25 scheduler 測試:通過
- 無新增測試覆蓋此修復的具體場景(worktree-inheriting 任務的並行行為),但此為
processQueue()的內部邏輯,現有測試框架不直接覆蓋 processQueue 的分派邏輯。可接受。
風險評估
- 🟢 低風險:改動範圍小,邏輯清晰,無副作用
- 🟢 低風險:
shouldUseWorktree語義未被改變,只在調用處增加了task.worktreePath != null的前置檢查 - 🟡 中風險(微):worktree slot 計數中,繼承 worktree 的任務仍佔用 slot,但實際不新建 worktree。在 MAX_WORKTREES 較低時可能多佔 1 slot,但影響極小
驗收結論
通過 — 改動正確修復了核心問題,邏輯一致,測試通過,無安全隱患。
建議 Commit Message
已有 commit bc8b593,message 為 fix(scheduler): allow worktree-inheriting tasks to run in parallel,描述精準,不需修改。
—HANDOFF—
TO: secretary
INTENT: handoff
ARTIFACT_TYPE: review
SUMMARY: 驗收通過 — fix(scheduler): allow worktree-inheriting tasks to run in parallel (commit bc8b593),可直接建立 PR 合併