secretary 並行序列化缺陷修復 — 架構分析報告

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) 來判斷任務是否隔離。但 shouldUseWorktreetask.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 合併