mcpField
B
babysit-pr

babysit-pr

github.com/timschoch开发1581 次安装今天更新
代码仓库

关于 babysit-pr

babysit-pr 是一项持续监控单个 GitHub 拉取请求的技能,直到其合并、关闭或需要用户介入。它循环处理评审意见和 CI 失败,在明确限制下修复或提出处理方案,并持续轮询,而不把检查变绿视为结束。

主要功能

  1. 01轮询 PR 状态和新评审意见
  2. 02处理前分类 CI 失败
  3. 03修复真实失败或重跑偶发失败
  4. 04回复人工评审前要求确认
  5. 05跟踪尝试次数限制和终止状态

适用场景

  1. 01持续跟进拉取请求的评审和 CI 更新
  2. 02处理机器人反馈和已确认的 CI 失败
  3. 03在检查通过后继续等待后续评审

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/timschoch/skilly --skill babysit-pr

安装后在 Claude Code 中输入/babysit-pr确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

README.md
scripts/
classify-failure.sh
classify-failure.test.sh
pr-state.sh
pr-state.test.sh
resolve-thread.sh
watch.sh
watch.test.sh

详细介绍

在 PR 达到可合并状态前持续跟进:轮询、分类、修复、推送,再次轮询。终态为 已合并、已关闭、需要用户处理。除此之外,任何情况都不能结束循环;推送、检查通过或报告都不行。

循环

每轮:

  1. 获取快照。 运行 bash scripts/pr-state.sh <pr> [--since <lastPushAt>]。将上一轮的 lastPushAt 传给 --since,这样只会显示上次推送之后的新审核事项。
  2. 优先检查终态。 如果 state 为 MERGED 或 CLOSED,报告状态并停止。
  3. 先处理审核事项,再处理 CI。 修复提交会触发 CI,因此先回复审核意见,可以避免在即将被替换的 SHA 上浪费一次重跑。
  4. CI。 对于每项 conclusion 为失败的检查,在修改代码前运行 bash scripts/classify-failure.sh <check-url>。
  5. 推送。 在 PR 的头部分支上提交并推送,然后返回第 1 步,检查新 SHA。
  6. 等待。 bash scripts/watch.sh <pr> 会阻塞,直到检查结果稳定,然后输出新的快照。请用它代替休眠。等待时长上限由 BABYSIT_MAX_MINUTES 控制,默认为 60。

规则

  • 只处理已发布且最新的事项。 仅处理 submittedAt 或 createdAt 晚于 lastPushAt 的审核事项。pr-state.sh 会忽略 PENDING 审核:审核者仍在撰写时,还没有发表意见。上次推送前已回复的事项仍视为已回复。
  • 先分类失败,再按类别处理。 classify-failure.sh 会根据日志证据输出 flaky 或 real,然后显示前 20 行失败日志。real:修复分支。flaky:使用 gh run rerun <run-id> --failed 重跑。只要失败仍被判定为 flaky,就不要改动测试、构建脚本、CI 配置和依赖版本固定项。只为掩盖基础设施问题而提交修复,会让下游所有人都看不到真实信号。
  • 每个 PR 的 CI 预算:3 次尝试。 对红色检查进行的一次修复推送或重跑算作一次尝试;审核修复推送不计入。检查再次稳定为红色时,即为失败。
    • 第三次尝试失败:即使还有想法,也要停止并标记为需要用户处理。
    • 告知用户哪些检查失败、每次尝试修改了什么,以及前 20 行失败日志。
  • 向人类传达用户原话,而不是你的话。 人类审核者是 reviews[].author 中既非 PR 作者、也未标记为 isBot 的任何人。将其审核事项转达给用户,并附上建议回复;在用户明确确认前,不要向 GitHub 发布任何内容。机器人审核事项由你自行处理并解决。
  • 解决已修复的事项。 推送修复后,运行 bash scripts/resolve-thread.sh <threadId>,其中 threadId 来自快照中的 threads[].id。
  • 是否合并由用户决定。 完成规则(.claude/rules/workflow-done.md):已提交表示完成,已推送表示已获认可。只有使用 --merge,或用户在本次会话中提出合并时,才进入合并模式。否则,检查通过后停止并报告。
  • 合并模式只能在检查通过后合并,绝不能提前。 运行 gh pr merge <pr> --squash --match-head-commit <headSha>;若使用 --merge=merge,则用 --merge 替代 --squash。然后再获取一次快照:MERGED 表示循环结束。
    • headSha 来自检查通过时的快照:若之后有推送落地,就不能合并。
    • 绝不要使用 --auto:如果仓库没有必需检查,它会立即合并,而不是等 CI 稳定。
    • 绝不要使用 --delete-branch。
  • 检查通过是一个里程碑,不是退出条件。 没有失败检查、mergeable: MERGEABLE、没有未解决的讨论串时,报告“已准备好合并”,然后继续轮询。PR 开启期间仍可能收到新的审核事项。合并模式则在此处合并。

审核者集合

pr-state.sh 会从 git 根目录下的 .skilly/config.json 读取机器人登录名:

{ "review": { "bots": ["chatgpt-codex-connector[bot]", "some-reviewer"] } }

以 [bot] 结尾的登录名也会被视为机器人。缺少键或文件时,列表为空;除 PR 作者外的所有审核者都会被视为人类审核者。每次运行都读取配置;不要记住任何登录名。

CI

检查项以 PR 报告的内容为准。.skilly/config.json 中的仓库层级决定检查项集合(verify 技能会说明各层级)。所有层级都会运行 verify 这一项检查,因此 verify 失败总是说明此分支存在问题。

提交

使用约定式提交,并按内容添加前缀:检查未通过时使用 fix:,小的 lint 或配置问题使用 chore:。添加一行正文,便于检索变更来源:

Babysit-pr: fixes review thread <thread-url>

报告

每轮结束时都注明:HEAD SHA、检查统计、是否可合并、推送了什么、已使用的 CI 尝试次数(最多 3 次),以及仍待处理的事项。

评论

支持 Markdown