名称: 迭代PR 描述: 在PR上迭代直到CI通过。使用当您需要修复CI失败、地址评审反馈或持续推送修复直到所有检查变绿时。自动化反馈-修复-推送-等待循环。
在PR上迭代直到CI通过
持续迭代当前分支直到所有CI检查通过并评审反馈被地址。
要求: GitHub CLI (gh) 已认证。
重要: 所有脚本必须从仓库根目录运行(.git所在位置),而不是从技能目录。通过 ${CLAUDE_SKILL_ROOT} 使用脚本的完整路径。
捆绑脚本
scripts/fetch_pr_checks.py
获取CI检查状态并从日志中提取失败片段。
uv run ${CLAUDE_SKILL_ROOT}/scripts/fetch_pr_checks.py [--pr NUMBER]
返回JSON:
{
"pr": {"number": 123, "branch": "feat/foo"},
"summary": {"total": 5, "passed": 3, "failed": 2, "pending": 0},
"checks": [
{"name": "tests", "status": "fail", "log_snippet": "...", "run_id": 123},
{"name": "lint", "status": "pass"}
]
}
scripts/fetch_pr_feedback.py
使用LOGAF scale获取并分类PR评审反馈。
uv run ${CLAUDE_SKILL_ROOT}/scripts/fetch_pr_feedback.py [--pr NUMBER]
返回JSON,反馈分类为:
high- 合并前必须地址(h:、阻塞、变更请求)medium- 应该地址(m:、标准反馈)low- 可选(l:、细节、样式、建议)bot- 信息性自动化评论(Codecov、Dependabot等)resolved- 已解决线程
评审机器人反馈(来自Sentry、Warden、Cursor、Bugbot等)出现在high/medium/low中,带有review_bot: true — 它不放在bot桶中。
工作流
1. 识别PR
gh pr view --json number,url,headRefName
如果当前分支没有PR,则停止。
2. 收集评审反馈
运行 ${CLAUDE_SKILL_ROOT}/scripts/fetch_pr_feedback.py 获取已发布的分类反馈。
3. 按LOGAF优先级处理反馈
自动修复(无提示):
high- 必须地址(阻塞、安全、变更请求)medium- 应该地址(标准反馈)
这包括评审机器人反馈(带有review_bot: true的项目)。像处理人类反馈一样处理:
- 真实问题找到 → 修复它
- 误报 → 跳过,但简要评论解释原因
- 从不静默忽略评审机器人反馈 — 始终验证发现
提示用户选择:
low- 呈现编号列表并询问哪些要地址:
找到3个低优先级建议:
1. [l] "考虑重命名这个变量" - @reviewer 在 api.py:42
2. [nit] "可以使用列表推导" - @reviewer 在 utils.py:18
3. [style] "添加文档字符串" - @reviewer 在 models.py:55
您想地址哪些?(例如,"1,3" 或 "all" 或 "none")
静默跳过:
resolved线程bot评论(仅信息性 — Codecov、Dependabot等)
4. 检查CI状态
运行 ${CLAUDE_SKILL_ROOT}/scripts/fetch_pr_checks.py 获取结构化失败数据。
如果待处理则等待: 如果评审机器人检查(sentry、warden、cursor、bugbot、seer、codeql)仍在运行,等待再继续—它们发布可操作的反馈,必须评估。信息性机器人(codecov)不值得等待。
5. 修复CI失败
对于脚本输出中的每个失败:
- 阅读
log_snippet以理解失败 - 在更改之前阅读相关代码
- 用最小化、针对性的更改修复问题
不要仅基于检查名称假设失败原因—始终阅读日志。
6. 提交和推送
git add <文件>
git commit -m "fix: <描述性消息>"
git push
7. 等待CI
gh pr checks --watch --interval 30
8. CI后重新检查反馈
评审机器人通常在CI检查完成后几秒钟发布反馈。短暂等待,然后再次检查:
sleep 10
uv run ${CLAUDE_SKILL_ROOT}/scripts/fetch_pr_feedback.py
以与步骤3相同的方式地址任何新的高/中反馈。如果新反馈需要代码更改,返回到步骤6以提交和推送。
9. 重复
如果CI失败或步骤8中出现新反馈,返回到步骤2。
退出条件
成功: 所有检查通过,CI后反馈重新检查干净(没有新的未地址高/中反馈,包括评审机器人发现),用户已决定低优先级项目。
请求帮助: 3次尝试后相同失败,反馈需要澄清,基础设施问题。
停止: 没有PR存在,分支需要变基。
回退
如果脚本失败,直接使用 gh CLI:
gh pr checks --json name,state,bucket,linkgh run view <run-id> --log-failedgh api repos/{owner}/{repo}/pulls/{number}/comments