iterate-pr

iterate-pr

热门

迭代处理一个PR,直到可操作的CI通过且高/中优先级审查反馈被解决。用于PR CI失败、审查反馈或绿色检查循环;不等待人工批准、草稿状态或合并门禁。

881Star
45Fork
更新于 2026/7/21
SKILL.md
readonly只读
name
iterate-pr
description

迭代处理一个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] 终端标记加上制表符分隔的检查项
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] "添加文档字符串" - @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 可选:通过 MonitorTool 运行 uv run scripts/monitor_pr_checks.py,设置 persistent: false;超时时间设为仓库正常CI持续时间。每次推送后重新启动监控。

退出条件

退出 条件
成功 可操作CI通过;CI后反馈干净;低优先级选择已处理
询问用户 相同失败尝试2次后;反馈不明确;基础设施问题
停止 无PR;分支需要变基;无检查项;草稿无检查项;仅剩人工门禁

后备方案

如果脚本失败,直接使用 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