SKILL.md
唯讀
名稱
iterate-pr
描述
反覆處理 PR,直到可處理的 CI 通過且高/中優先級的審查意見被解決。用於 PR CI 失敗、審查意見或綠勾循環;不要等待人工核准、草稿狀態或合併閘門。
反覆處理 PR 直到 CI 通過
目標:修復可處理的 CI 失敗與高/中優先級審查意見。遇到人工核准、草稿就緒與合併就緒閘門時停止並回報。
需求:
- 已認證的
gh uv- 目標儲存庫根目錄作為當前工作目錄
- 技能根目錄相對路徑的腳本,例如
scripts/fetch_pr_checks.py
內建腳本
| 腳本 | 執行方式 | 輸出 |
|---|---|---|
scripts/fetch_pr_checks.py |
uv run scripts/fetch_pr_checks.py [--pr NUMBER] |
JSON:pr、summary、checks、失敗片段 |
scripts/fetch_pr_feedback.py |
uv run scripts/fetch_pr_feedback.py [--pr NUMBER] |
JSON 分組:high、medium、low、bot、resolved |
scripts/monitor_pr_checks.py |
uv run scripts/monitor_pr_checks.py [--pr NUMBER] |
終端機標記加上 tab 分隔的檢查項目 |
scripts/reply_to_thread.py |
uv run scripts/reply_to_thread.py THREAD_ID BODY [...] |
JSON 回覆結果 |
檢查摘要欄位包含 failed、pending、actionable_pending 與 human_gate_pending。
監控標記:
ALL_CHECKS_PASSEDCHECKS_DONE_WITH_FAILURESNO_CHECKS_REGISTEREDDRAFT_PR_WITH_NO_CHECKSCHECKS_BLOCKED_BY_REVIEW_GATE
工作流程
1. 識別 PR
執行:
gh pr view --json number,url,headRefName,isDraft,reviewDecision
遇到以下情況時停止:
- 沒有 PR 存在
- 草稿 PR 在監控寬限期後仍無檢查項目:回報
DRAFT_PR_WITH_NO_CHECKS
草稿規則:僅檢查現有的檢查項目與意見。除非被要求,否則不要標記為準備審查。
2. 處理意見
執行 uv run scripts/fetch_pr_feedback.py [--pr NUMBER]。
| 分組 | 動作 |
|---|---|
high |
修復 |
medium |
修復 |
low |
詢問使用者要處理哪些 |
bot |
跳過資訊性留言 |
resolved |
跳過 |
意見修復檢查清單:
- 驗證根本原因
- 搜尋相關程式碼
- 修復所有實例
- 對於
review_bot: true:修復真實問題,解釋誤判
低優先級提示格式:
找到 3 個低優先級建議:
1. [l] "考慮重新命名此變數" - @reviewer 在 api.py:42
2. [nit] "可以使用列表推導式" - @reviewer 在 utils.py:18
3. [style] "加入 docstring" - @reviewer 在 models.py:55
我應該處理哪些?("1,3"、"all" 或 "none")
3. 檢查 CI 狀態
執行 uv run scripts/fetch_pr_checks.py [--pr NUMBER]。
| 狀態 | 動作 |
|---|---|
failed > 0 且 actionable_pending == 0 |
修復失敗 |
actionable_pending > 0 |
等待;等待時輪詢意見 |
pending > 0 且 actionable_pending == 0 |
回報 CHECKS_BLOCKED_BY_REVIEW_GATE |
| 寬限期後無檢查項目 | 回報 NO_CHECKS_REGISTERED 或 DRAFT_PR_WITH_NO_CHECKS |
| 所有可處理檢查項目通過 | 執行 CI 後意見檢查 |
等待可處理的審查機器人:sentry、warden、cursor、bugbot、seer、codeql。
不要等待核准、isDraft、REVIEW_REQUIRED、Codecov 或資訊性機器人。
4. 修復 CI 失敗
針對每個失敗:
- 讀取完整日誌:
gh run view <run-id> --log-failed - 從斷言/例外/ lint 規則追溯到原始碼
- 在編輯前說明原因:「因為 X 失敗,受 Y 影響」
- 搜尋相關呼叫點/模式
- 修復根本原因,而非症狀
- 必要時加入有針對性的測試覆蓋
5. 在本機驗證,然後提交並推送
提交前:
- 測試修復:重新執行特定測試
- lint/型別修復:重新執行受影響的檢查工具
- 程式碼修復:重新執行涵蓋的測試
- 本機失敗:修復後再推送
git add <檔案>
git commit -m "fix: <描述性訊息>"
git push
6. 監控 CI 並處理意見
循環:
- 執行
uv run scripts/fetch_pr_checks.py - 處理步驟 3 中的表格
- 當
actionable_pending > 0時,執行uv run scripts/fetch_pr_feedback.py - 立即修復新的高/中優先級意見
- 若有變更,驗證、提交、推送、重新開始循環
- 否則等待 30 秒後重複
- 檢查項目通過後,等待 10 秒,再抓取一次意見
- 若有新的高/中優先級意見,回到步驟 4
Claude Code 可選:透過 MonitorTool 以 persistent: false 執行 uv run scripts/monitor_pr_checks.py;設定逾時為一般儲存庫 CI 時間。每次推送後重新啟動監控。
結束條件
| 結束 | 條件 |
|---|---|
| 成功 | 可處理的 CI 通過;CI 後意見乾淨;低優先級選擇已處理 |
| 詢問使用者 | 相同失敗超過 2 次;意見不明確;基礎設施問題 |
| 停止 | 無 PR;分支需要 rebase;無檢查項目;草稿無檢查項目;僅剩人工閘門 |
備援方案
若腳本失敗,直接使用 gh CLI:
gh pr view --json number,url,headRefName,isDraft,reviewDecisiongh pr checks --json name,state,bucket,description,linkgh run view <run-id> --log-failedgh api repos/{owner}/{repo}/pulls/{number}/comments






