iterate-pr

iterate-pr

熱門

反覆處理 PR,直到可處理的 CI 通過且高/中優先級的審查意見被解決。用於 PR CI 失敗、審查意見或綠勾循環;不要等待人工核准、草稿狀態或合併閘門。

881星標
45分支
更新於 2026/7/21
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:prsummarychecks、失敗片段
scripts/fetch_pr_feedback.py uv run scripts/fetch_pr_feedback.py [--pr NUMBER] JSON 分組:highmediumlowbotresolved
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 回覆結果

檢查摘要欄位包含 failedpendingactionable_pendinghuman_gate_pending

監控標記:

  • ALL_CHECKS_PASSED
  • CHECKS_DONE_WITH_FAILURES
  • NO_CHECKS_REGISTERED
  • DRAFT_PR_WITH_NO_CHECKS
  • CHECKS_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 > 0actionable_pending == 0 修復失敗
actionable_pending > 0 等待;等待時輪詢意見
pending > 0actionable_pending == 0 回報 CHECKS_BLOCKED_BY_REVIEW_GATE
寬限期後無檢查項目 回報 NO_CHECKS_REGISTEREDDRAFT_PR_WITH_NO_CHECKS
所有可處理檢查項目通過 執行 CI 後意見檢查

等待可處理的審查機器人:sentry、warden、cursor、bugbot、seer、codeql。
不要等待核准、isDraftREVIEW_REQUIRED、Codecov 或資訊性機器人。

4. 修復 CI 失敗

針對每個失敗:

  1. 讀取完整日誌:gh run view <run-id> --log-failed
  2. 從斷言/例外/ lint 規則追溯到原始碼
  3. 在編輯前說明原因:「因為 X 失敗,受 Y 影響」
  4. 搜尋相關呼叫點/模式
  5. 修復根本原因,而非症狀
  6. 必要時加入有針對性的測試覆蓋

5. 在本機驗證,然後提交並推送

提交前:

  • 測試修復:重新執行特定測試
  • lint/型別修復:重新執行受影響的檢查工具
  • 程式碼修復:重新執行涵蓋的測試
  • 本機失敗:修復後再推送
git add <檔案>
git commit -m "fix: <描述性訊息>"
git push

6. 監控 CI 並處理意見

循環:

  1. 執行 uv run scripts/fetch_pr_checks.py
  2. 處理步驟 3 中的表格
  3. actionable_pending > 0 時,執行 uv run scripts/fetch_pr_feedback.py
  4. 立即修復新的高/中優先級意見
  5. 若有變更,驗證、提交、推送、重新開始循環
  6. 否則等待 30 秒後重複
  7. 檢查項目通過後,等待 10 秒,再抓取一次意見
  8. 若有新的高/中優先級意見,回到步驟 4

Claude Code 可選:透過 MonitorToolpersistent: false 執行 uv run scripts/monitor_pr_checks.py;設定逾時為一般儲存庫 CI 時間。每次推送後重新啟動監控。

結束條件

結束 條件
成功 可處理的 CI 通過;CI 後意見乾淨;低優先級選擇已處理
詢問使用者 相同失敗超過 2 次;意見不明確;基礎設施問題
停止 無 PR;分支需要 rebase;無檢查項目;草稿無檢查項目;僅剩人工閘門

備援方案

若腳本失敗,直接使用 gh CLI:

  • gh pr view --json number,url,headRefName,isDraft,reviewDecision
  • gh pr checks --json name,state,bucket,description,link
  • gh run view <run-id> --log-failed
  • gh api repos/{owner}/{repo}/pulls/{number}/comments