
关于
迭代 PR 直到 CI 通过。适用于修复 CI 失败、处理审查反馈或持续推送修复直到所有检查通过。自动化反馈-修复-推送-等待循环。
name: iterate-pr description: 迭代 PR 直到 CI 通过。当你需要修复 CI 失败、处理评审反馈或持续推送修复直到所有检查变绿时使用。自动化反馈-修复-推送-等待循环。 risk: critical source: community
迭代 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 量表 获取并分类 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、CodeQL 等)出现在 high/medium/low 中并带有 review_bot: true — 不会放入 bot 分类。
每个反馈项还可能包含:
thread_id- 内联评审评论的 GraphQL 节点 ID(用于回复)
工作流
1. 识别 PR
gh pr view --json number,url,headRefName
如果当前分支没有 PR 则停止。
2. 收集评审反馈
运行 ${CLAUDE_SKILL_ROOT}/scripts/fetch_pr_feedback.py 获取已发布在 PR 上的分类反馈。
3. 按 LOGAF 优先级处理反馈
自动修复(无需提示):
high- 必须处理(阻塞、安全、请求更改)medium- 应该处理(标准反馈)
修复反馈时:
- 理解根本原因,而非仅表面症状
- 检查附近代码或相关文件中的类似问题
- 修复所有实例,而非仅修复提到的那个
这包括评审机器人反馈(带有 review_bot: true 的项目)。与人工反馈同等对待:
- 发现真实问题 → 修复它
- 误报 → 跳过,但在简短评论中解释原因
- 永远不要默默忽略评审机器人反馈 — 始终验证发现
提示用户选择:
low- 展示编号列表并询问处理哪些:
Found 3 low-priority suggestions:
1. [l] "Consider renaming this variable" - @reviewer in api.py:42
2. [nit] "Could use a list comprehension" - @reviewer in utils.py:18
3. [style] "Add a docstring" - @reviewer in models.py:55
Which would you like to address? (e.g., "1,3" or "all" or "none")
静默跳过:
resolved讨论串bot评论(仅信息性 — Codecov、Dependabot 等)
回复评论
处理每个内联评审评论后,在 PR 讨论串中回复以确认所采取的操作。仅回复带有 thread_id 的项目(内联评审评论)。
何时回复:
high和medium项目 — 无论是已修复还是确定为误报low项目 — 无论是已修复还是被用户拒绝
如何回复: 使用 addPullRequestReviewThreadReply GraphQL mutation,输入 pullRequestReviewThreadId 和 body。
回复格式:
- 1-2 句话:更改了什么、为什么不是问题、或确认拒绝的项目
- 每条回复以
\n\n*— Claude Code*结尾 - 回复前检查讨论串是否已有以
*- Claude Code*或*— Claude Code*结尾的回复,避免重复循环中的重复 - 如果
gh api调用失败,记录并继续 — 不要阻塞工作流
4. 检查 CI 状态
运行 ${CLAUDE_SKILL_ROOT}/scripts/fetch_pr_checks.py 获取结构化的失败数据。
等待挂起中的检查: 如果评审机器人检查(sentry、warden、cursor、bugbot、seer、codeql)仍在运行,等待后再继续 — 它们会发布需要评估的可操作反馈。信息性机器人(codecov)不值得等待。
5. 修复 CI 失败
对于脚本输出中的每个失败:
- 阅读
log_snippet并从错误向后追溯以理解失败的原因 — 而非仅仅是什么失败了 - 阅读相关代码并检查相关问题(例如,如果一个调用点有类型错误,检查其他调用点)
- 用最小的、有针对性的更改修复根本原因
- 查找现有测试
