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: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
草稿规则:仅检查现有的检查项/反馈。除非被要求,否则不要标记为准备审查。
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 > 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 <文件>
git commit -m "fix: <描述性消息>"
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;分支需要变基;无检查项;草稿无检查项;仅剩人工门禁 |
后备方案
如果脚本失败,直接使用 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






