Converge - QA後規格回寫 是做什麼的?
關閉執行迴圈:通過 QA 的任務將成為動態規格的一部分。此技能代表了生命週期中的 ConvergeTool 角色。它定義了流程;儲存庫代理規則仍擁有權限,且此技能絕不會授予額外的存取權限。
管線位置:dev -> qa -> converge -> 已封存任務包 + 已更新規格
使用時機
- 任務包的
03-qa-verification.md記錄了已勾選的QA_PASSED判決。 02-dev-workspace.md包含凍結的實現偏差表(列或明確的 None 列)。- 任務的確認行為必須被折返寫入
.specs/02-tech-spec.md,任務包被封存,且原始變更提案被關閉。
請勿使用時機
- 實現或 QA 仍在執行中,交接標記未勾選,或
REWORK_REQUIRED處於啟用狀態 – 請等待穩定的QA_PASSED判決。 - 偏差記錄為空白或遺失 – 請將任務退回給 Dev,而不是進行猜測。
- 您需要自行發明規格內容或重寫現有規格文字;那是規劃變更,而非收斂。
輸入
tasks/<task-id>/01-contract.md- 標題、可追溯性錨點、可選的change_id。tasks/<task-id>/02-dev-workspace.md- 實現偏差表(凍結格式)。tasks/<task-id>/03-qa-verification.md- 已勾選的QA_PASSED判決與證據。tasks/<task-id>/04-process.md- 衍生的狀態卡與事件日誌。.specs/02-tech-spec.md- 動態技術規格文件。.specs/changes/<change-id>/proposal.md- 原始變更提案(若存在)。
輸出
- 規格中 Converged changes 區段下的每個任務對應一條帶有日期和屬主的條目。
- 每個任務的收斂標記:
<!-- converged: <task-id> sha256:<hash> -->。 04-process.md中macro_status設定為"CONVERGED",並新增一條TASK_CONVERGED事件行(參與者ConvergeTool)。- 任務包被移動(從不刪除)至
tasks/archive/<task-id>/。 - 若提案存在,則新增
.specs/changes/<change-id>/convergence.md並將提案狀態設為archived。
檢查 -> 套用 -> 驗證
- 檢查。 在寫入任何內容前對任務包進行分類:
python .agents/skills/converge/scripts/converge.py check --tasks-dir ./tasks --json僅當 QA 已通過、無進行中的修正、偏差表至少有一列或一個明確的 None 列,且規格尚未帶有該任務標記時,任務包才準備好進行收斂。 - 套用。 收斂一個任務包:
python .agents/skills/converge/scripts/converge.py apply --task tasks/<task-id>首先使用--dry-run檢查預計的寫入操作。若任務包未準備好收斂,輔助腳本會以退出碼 1 拒絕;若存在封存目標目錄且未使用--force,也會拒絕。 - 驗證。 重新執行
check,確認標記存在、04-process.md顯示CONVERGED、任務包已被封存,且--spec-sha256與預期的 CI 值相符:python .agents/skills/converge/scripts/converge.py --spec .specs/02-tech-spec.md --spec-sha256
手動替代方案(無 Python)
當輔助腳本不可用時,請手動執行相同步驟,並確保標記完全精確:
- 確認
03中的QA_PASSED已勾選,且無REWORK_REQUIRED處於啟用狀態。 - 讀取
02中的偏差行;拒絕空白記錄。 - 在規格的 Converged changes 區段附加(而非編輯)一條條目:一個
### <task-id>標題、偏差表以及<!-- converged: <task-id> sha256:<hash> -->標記。使用任何 SHA-256 工具根據正規化的任務 ID 和行來計算雜湊值。 - 將
04中的macro_status設定為CONVERGED,並附加TASK_CONVERGED/ConvergeTool行。 - 移動(永遠不要刪除)任務包至
tasks/archive/<task-id>/;若存在變更提案,則封存提案並撰寫convergence.md。 - 重新執行驗證步驟並記錄證據。
拒絕條件
當以下任一條件成立時,停止收斂並回報,而非進行收斂:
- QA 未通過 -
03沒有已勾選的QA_PASSED,或REWORK_REQUIRED仍處於啟用狀態。 - 未解決的修正 - 重試證據顯示任務正在進行修正;請等待新的判決。
- 空白偏差記錄 - 實現偏差表遺失,或既無 DEV 行也無明確的 None 行。
- 規格漂移 -
modify/remove偏差指向規格中不存在的#sec-*錨點;規格與偏差記錄不一致。在 CI 中使用--strict執行check/apply可將此警告升級為拒絕。 - 封存衝突 -
tasks/archive/<task-id>/已存在,且未提供--force參數。
結構性偏差(新模組、邊界變更、新的 ADR 層級決策)必須升級給 spec-generator;它們絕不能默默地被收斂。
歷史記錄與歸屬
收斂絕不重寫歷史記錄:它附加一個帶有日期和屬主的區段,而不是編輯現有的規格文字。現有條目維持位元組級別的穩定,且每個條目都會指明來源任務、QA 判決和 ConvergeTool 參與者。切勿為了適合新任務而編輯舊的收斂條目;應新增一個條目並記錄衝突。
參考資料
references/convergence-protocol.md- 狀態機、誰寫什麼、封存佈局、冪等性標記、衝突規則與結構性升級。- 角色邊界:
references/role-boundaries.md— 寫入範圍、不變量與誠實執行模型(已打包;無需外部檔案)。 - 任務包格式與角色生命週期:
task-decomposition技能(若已安裝)。 - 交接輸入:
dev技能;判決輸入:qa技能。 - 儲存庫規則:若採用的專案有定義,請閱讀
AGENTS.md和任何角色規則檔案;它們可能增加要求,但此技能不強制要求。
誠實限制
此技能不授予寫入權限,也無法強制角色隔離。若儲存庫設有 CI(例如基於 Git 的角色稽核)或分支保護,則該層是權威層。打包的輔助腳本是可選的確定性輔助工具;標記和書面證據才是合約。