关于 iterate-pr
面向开发者的 PR 迭代技能,用于修复可处理的 CI 失败及高中优先级评审反馈,并持续监控检查。它区分可自动处理的事项与需报告的人为审批、草稿及合并就绪门槛。
主要功能
- 01获取 PR 检查和评审反馈
- 02优先处理高中优先级反馈
- 03指导根因修复与本地验证
- 04循环监控检查和反馈
- 05报告人为与草稿就绪门槛
适用场景
- 01处理开放 PR 的 CI 失败
- 02跟进可处理的评审反馈
- 03推送修复后监控检查
- 04进展受人为门槛阻塞时报告
MCP 相关
该技能通过经过身份验证的 `gh` 和附带脚本检查 PR、获取检查及反馈,并发布讨论串回复。输入未说明 MCP 功能。
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ getsentry/ skills --skill iterate-pr安装后在 Claude Code 中输入/iterate-pr确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
SPEC.mdagents/openai.yamlscripts/fetch_pr_checks.pyfetch_pr_feedback.pymonitor_pr_checks.pyreply_to_thread.py详细介绍
迭代处理 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] | 终端标记及以制表符分隔的检查项 |
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
草稿规则:仅检查现有检查项和反馈。除非收到要求,否则不要将 PR 标记为可供审查。
2. 处理反馈
运行 uv run scripts/fetch_pr_feedback.py [--pr NUMBER]。
| 分类 | 操作 |
|---|---|
high | 修复 |
medium | 修复 |
low | 询问用户要处理哪些内容 |
bot | 跳过信息性评论 |
resolved | 跳过 |
反馈修复清单:
- 确认根本原因
- 搜索相关代码
- 修复所有实例
- 对于
review_bot: true:修复实际问题,并说明误报情况
低优先级反馈提示词格式:
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 should I address? ("1,3", "all", or "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 <files>
git commit -m "fix: <descriptive message>"
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 运行 uv run scripts/monitor_pr_checks.py,并设置 persistent: false;将超时设为仓库 CI 的正常耗时。每次推送后都重新启动监控器。
退出条件
| 退出 | 条件 |
|---|---|
| 成功 | 可执行的 CI 检查已通过;CI 后的反馈无问题;已处理低优先级选择 |
| 询问用户 | 同一失败尝试 2 次后仍然存在;反馈不明确;基础设施问题 |
| 停止 | 没有 PR;分支需要 rebase;没有检查;草稿 PR 无检查;只剩人工关卡 |
后备方案
如果脚本失败,请直接使用 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