Multi-Loop Collision:当 CI Sweeper 与 PR Babysitter 同时修改同一个 PR——来自 loop-engineering 的真实事故复盘与分支锁解决方案
人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务【免费下载链接】loop-engineeringPractical patterns, starters CLI tools for loop engineering with AI coding agents. Design systems that prompt and orchestrate agents (inspired by Addy Osmani and Boris Cherny). Includes loop-audit, loop-init, loop-cost.项目地址https://gitcode.com/gh_mirrors/lo/loop-engineering点击查看免费下载本文基于 loop-engineering 仓库中的真实生产事故记录 stories/multi-loop-collision.md 展开。它记录了两个独立调度的 AI 行动循环CI Sweeper 与 PR Babysitter在同一分支上各自生成互相冲突的修复提交最终造成约 5 倍 token 消耗和 45 分钟人工解耦的完整经过。读完本文你将掌握行动循环为什么需要分支锁branch lock、acting_on状态约定如何在多个循环之间实现碰撞检测、以及 loop-worktree 的lock/unlock命令如何把这一约定从靠人自觉升级为机械化的咨询式锁。事故背景两个循环盯上了同一条分支事故场景非常简单却极具代表性。团队同时在同一个仓库里运行着两个具备自动修复能力的行动循环L2循环配置职责CI Sweeper/loop 15m最多重试 3 次监控失败 CI诊断并提交最小修复PR Babysitter/loop 10m同一仓库盯守活跃 PR 的 CI、review、rebase 与合并两者共享的目标是fix/auth-token-refresh分支对应 PR #318。按照 patterns/ci-sweeper.md 的定位CI Sweeper 负责对 main 或活跃分支上的失败 CI 快速响应而按照 patterns/pr-babysitter.md 的定位PR Babysitter 负责把 PR 从开题推到可合并状态。当一条 PR 的分支上同时出现失败的 CI 测试时两个循环的职责范围天然重叠——这正是事故的温床。什么在正常工作两个循环的判断都没错复盘首先要诚实记录做得对的部分。根据 stories/multi-loop-collision.md 的记录两个循环都独立且正确地定位到了失败的auth测试test_refresh_token_expiry一类的鉴权令牌刷新用例说明各自的 triage 分类逻辑工作正常周二早上审计时两个循环的状态文件都如实记录了这次重叠ci-sweeper-state.md与pr-babysitter-state.md说明状态文件作为可观测性载体是有效的。问题从来不是循环不会发现问题而是两个循环没有互相感知。什么坏了两套互相冲突的修复提交事故链条如下时间戳来自原文档14:02CI Sweeper 在fix/auth-token-refresh分支上拉起一个 worktree开始实施它认为的最小修复14:07PR Babysitter 在同一个 PR上拉起了另一个不同的最小修复方案结果是两个提交、两种互斥的修复思路同时出现在 PR 上reviewer 完全被搞糊涂了不知道哪个是真正的修复更糟的是成本失控该 PR 的合并 token 消耗约 40 万 token而正常水平约 8 万 token——一个 PR 花了平时 5 倍的预算。这两个循环各自遵循了自己的模式文档CI Sweeper 打开 worktree、起草修复、等待 verifier 与人工确认见 patterns/ci-sweeper.md 的Typical CyclePR Babysitter 对失败检查项拉起minimal-fix子代理见 patterns/pr-babysitter.md 的典型循环。单个循环看每一步都是规范动作整体看缺了一道互斥检查。量化指标原文档给出了完整的事故度量表指标数值重复修复尝试2 次人工解耦耗时45 分钟根因缺少acting_on碰撞检查结合 patterns/ci-sweeper.md 的成本画像可以进一步理解为什么这么贵一次典型的 L2 修复尝试worktree implementer verifier本身就接近 20 万 token两次独立修复叠加后token 消耗落到 40 万量级完全符合成本模型的推算而 45 分钟的人工解耦时间本质上是把两个 AI 循环各自产生的错误上下文重新对齐的代价。教训行动循环需要状态层面的分支锁原文档给出的教训只有一句话但它是整套 multi-loop 协调机制的核心Action loops need abranch lockin state.行动循环会实际改动分支、提交代码的循环L2 及以上必须在状态文件中声明自己正在处理哪条分支/哪个 PR即写入acting_on: branch-or-pr-id。随后这一约定被固化为 docs/multi-loop.md 的碰撞检测流程每个行动循环在状态文件中写入acting_on: 分支名或 PR id在拉起 worktree 修复之前先读取所有其他模式的状态文件如果发现另一个循环的acting_on与自己的目标匹配则跳过本次执行并把跳过原因记入 loop-run-log.md。落到这次事故的具体职责划分是CI Sweeper 拥有红色 CI的处理权PR Babysitter 在读到ci-sweeper-state.md显示某个 PR 已被acting_on标记时跳过对该 PR 的修复动作。多循环协调的五条原则docs/multi-loop.md 把上述事故上升为通用原则。在一个仓库里跑多个循环是常态但没有边界的多循环就是循环互殴。协调原则如下每条分支一个属主One owner per branch——最多只有一个循环在一小时内改动某条分支状态文件相互分离——STATE.md用于 triage优先级与人工收件箱行动循环使用各自专属的状态文件Triage 只报告行动循环才执行——Daily Triage 在 L1 阶段永不与 CI Sweeper 的修复竞争共享 denylist——把同一份路径 denylist 复制进每个LOOP.md聚合 token 预算——参见 templates/loop-budget.md.template。推荐的仓库根目录状态布局如下来自原文档STATE.md # Daily Triage优先级、人工收件箱 pr-babysitter-state.md # PR 观察者 ci-sweeper-state.md # 活跃 CI 失败 尝试次数 dependency-sweeper-state.md # 进行中的依赖更新 post-merge-state.md # 合入后清理积压 loop-run-log.md # 只追加的可观测性日志循环冲突时的优先级栈当多个循环目标重叠时docs/multi-loop.md 定义了明确的优先级栈冲突时由高优先级循环先执行优先级循环理由1CI Sweeper红色 main 阻塞一切2PR Babysitter活跃 PR 对时间敏感3Dependency SweeperCI 红色时暂停4Post-Merge Cleanup非高峰、紧急度最低5Daily TriageL1 只出报告负责调度其他循环调度协调应在根目录LOOP.md中显式文档化。原文档给出了可直接复制的示例## Multi-loop schedule - CI Sweeper: /loop 15m (active hours) - PR Babysitter: /loop 10m (active hours, skip if CI Sweeper acting on same PR) - Daily Triage: /loop 1d 08:00 - Dependency Sweeper: /loop 6h (skip if main CI red) - Post-Merge: /loop 1d 22:00注意 PR Babysitter 一行的括号注释skip if CI Sweeper acting on same PR——这就是本次事故后补上的调度契约对应本仓库实际运行的多循环调度表见 LOOP.md 的 Multi-loop coordination 一节。从状态约定到机械化锁loop-worktree lock/unlock纯靠状态文件 人工阅读的碰撞检测有一个致命弱点它依赖循环的控制脚本自觉去读别人的状态文件。仓库给出的更强方案是用工具把约定机械化——tools/loop-worktree 的lock/unlock命令把docs/multi-loop.md的acting_on约定实现为一个咨询式锁advisory lockloop-worktree lock --paths package.json,package-lock.json --owner dependency-sweeper --ttl 6h \ || exit 2 # 另一个属主持有重叠路径的锁 —— 跳过本次运行 loop-worktree create --run-id $RUN_ID --pattern dependency-sweeper # ... 执行修复工作 ... loop-worktree unlock --owner dependency-sweeper控制脚本在拉起 worktree之前执行loop-worktree lock工作完成后执行loop-worktree unlock。关键设计是loop-worktree create本身不检查锁两者靠控制脚本中的配对约定来保持同步——这正与loop-context --check和loop-worktree mark --status escalated的配对方式一致见 docs/multi-loop.md 与 tools/loop-worktree/README.md。同样的约定也通过--lock-paths选项存在于 tools/loop-sandbox一次性沙箱 agent 运行也属于可能撞车的控制脚本但它是可选开启的——不带--lock-paths的loop-sandbox run不受锁保护。锁的源码级原理路径重叠、TTL、等待与死锁检测在 tools/loop-worktree/src/lock.ts 中可以读到这个锁的完整实现几个关键设计值得注意锁文件即状态每个属主一个 JSON 文件存放在.loop-worktrees/locks/owner.json字段包括owner、paths、lockedAt与可选的expiresAt不传--ttl则永不过期必须显式unlock见 lock.ts。这个文件的物理存在形式就是acting_on约定的机械化版本——只不过它锁定的是路径 glob而非分支名因此还能捕捉跨模式的冲突比如 CI Sweeper 与 Dependency Sweeper 同时要改package.json。按路径段比较的重叠判断pathsOverlap把两个 glob 按/切分成段逐段比较通配段*/**与该位置任意内容兼容因此src/**与src/foo.ts重叠而docs/api与docs/apidocs.md不重叠不同字面段不是简单的前缀匹配。实现注释明确说明这是故意简单的咨询式锁而非完整 glob 引擎lock.ts。跨进程互斥lock的检查-再写入临界区通过一个独占创建的 mutex 文件.loop-worktrees/locks/.mutex串行化5 秒超时避免两个同时发起的lock调用都在对方写入前通过重叠检查——这正是本功能要防的竞态本身lock.ts。等待与死锁检测带--wait 15m时锁被占用会进入等待队列并写入.wait.json等待图一旦成环立即抛出Deadlock detected: A - B - Alock.ts不会无限挂起。过期清理loop-worktree locks --sweep只报告过期锁加--force才删除孤立锁属主崩溃未解锁会被显式暴露而非静默忽略与gc命令默认只报告的仓库惯例一致lock.ts。这些行为都有测试用例背书。tools/loop-worktree/test/lock.test.mjs 覆盖了路径段边界docs/apivsdocs/apidocs.md不重叠、相同属主重复加锁会替换而非叠加、过期锁不再阻塞新锁、非法--owner含路径分隔符、可逃逸锁目录被拒绝、并发lock竞争时恰好只有一个获胜以及--wait排队与死锁环检测如Deadlock detected: B - A - B。落地示例把碰撞检测写进两个循环的状态文件对于不引入锁工具的场景原文档与模式文档给出了纯状态文件的做法。CI Sweeperpatterns/ci-sweeper.md在ci-sweeper-state.md中跟踪commit SHA、失败 job、尝试次数、worktree/PR 链接、结果。将acting_on写入后形如## CI Sweeper — Active Failures Last run: 2026-06-09 14:30 UTC ### fix/auth-token-refresh (PR #318) — acting_on - Job: test-auth - Failure: AssertionError in test_refresh_token_expiry - Attempts: 1/3 - Last action: Minimal fix proposed in worktree fix/ci-auth-refresh - Status: Waiting for verifier humanPR Babysitterpatterns/pr-babysitter.md在pr-babysitter-state.md中记录每个被盯守 PR 的状态并在读到ci-sweeper-state.md中对应acting_on标记后跳过修复- #318 (fix/auth-token-refresh) Checks: test-auth FAILING (owned by CI Sweeper — skipping fix) Last action: no-op, logged skip to loop-run-log.md每次跳过都要写入 loop-run-log.md只追加、按 run 一条 JSON字段含pattern、outcome、tokens_estimate保证这次为什么没动手对人工完全透明。对于无法自动判定属主的歧义情况docs/multi-loop.md 建议在STATE.md中开一个共享的Human Inbox## Human Inbox (ambiguous / cross-loop) - [ ] PR #42: CI Sweeper and PR Babysitter both flagged — human pick owner同类事故佐证优先级锁与预检PR #318 并非孤例。仓库里的姊妹篇事故 stories/dependency-vs-ci-sweeper-collision.md 记录了一次跨模式碰撞CI Sweeper 正在 main 上修复回归时Dependency Sweeper 把一次安全的 minor 依赖升级直接合入红色 main引入传递性回归CI Sweeper 在环境已经变化的情况下继续修原 bug一小时内烧掉约 150 万 token且两个循环同时写loop-run-log.md导致 git push 冲突。它的教训与 PR #318 互补高优先级修复活跃时低优先级变更循环不得执行。据此 docs/multi-loop.md 补上了优先级栈Dependency Sweeper 现在运行预检——先读ci-sweeper-state.md确认 main CI 是否绿色非绿则跳过并在 2 小时后重试同时用错峰的 cron 调度避免状态文件写冲突。两起事故合起来给出完整的防碰撞策略状态层的acting_on声明 工具层的咨询式锁 优先级栈 预检pre-flight 错峰调度。实操清单给仓库新增一个行动循环前结合原文档与本次复盘部署任何新的 L2 行动循环前建议逐项核对声明分支属主状态文件写入acting_on: branch-or-pr-id行动前读取所有其他模式的状态文件用锁机械化约定控制脚本在create前loop-worktree lock --paths globs --owner pattern完成后unlock冲突时exit 2跳过并记入loop-run-log.md遵守优先级栈确认自己的循环在冲突时的优先级CI Sweeper PR Babysitter Dependency Sweeper Post-Merge Cleanup Daily Triage设置预算与熔断行动循环要配loop-guard熔断loop-context --check与尝试上限防止同一条失败反复重试烧 token成本画像与每日上限见 patterns/ci-sweeper.md 与 patterns/pr-babysitter.md安全细则见 docs/safety.md共享 denylist 与聚合预算把同一份路径 denylist 复制到每个LOOP.mdtoken 预算按 templates/loop-budget.md.template 聚合保持可观测跳过、等待、升级都要落 loop-run-log.md歧义冲突进STATE.md的 Human Inbox。参考事故原始记录stories/multi-loop-collision.md协调规范docs/multi-loop.md工具实现tools/loop-worktreelock.ts、cli.ts、lock.test.mjs循环模式patterns/ci-sweeper.md、patterns/pr-babysitter.md同类事故stories/dependency-vs-ci-sweeper-collision.md本仓库实际调度与优先级LOOP.md赞分享人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务【免费下载链接】loop-engineeringPractical patterns, starters CLI tools for loop engineering with AI coding agents. Design systems that prompt and orchestrate agents (inspired by Addy Osmani and Boris Cherny). Includes loop-audit, loop-init, loop-cost.项目地址https://gitcode.com/gh_mirrors/lo/loop-engineering点击查看免费下载相关推荐PR Babysitter Loop 实战指南用 loop-engineering 模式自动化 PR 审查、CI 修复与合并就绪判定PR Babysitter Loop 实战指南用 loop engineering 模式自动化 PR 审查、CI 修复与合并就绪判定 导读 本文基于 pat人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务Codex 上的 PR Babysitter基于 Loop Engineering 的 PR 看护与自动修复实践Codex 上的 PR Babysitter基于 Loop Engineering 的 PR 看护与自动修复实践 PR BabysitterPR 看护循环人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务loop-engineering 多循环优先级冲突实战复盘Dependency Sweeper 与 CI Sweeper 在同一分支上互踩的根因、损失与修复方案loop engineering 多循环优先级冲突实战复盘Dependency Sweeper 与 CI Sweeper 在同一分支上互踩的根因、损失与修复方人工智能AI AgentAgent 工作流CLI研发协作AI 技能MCP 服务上一篇Buzz如何在本地实现完全离线的专业级语音转文字下一篇探索GleanFacebook Incubator中的高效数据收集框架创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

TypeScript 交叉类型(Intersection Types)完全指南:用 `` 组合类型、合并对象形状的权威实战手册

TypeScript 交叉类型(Intersection Types)完全指南:用 `` 组合类型、合并对象形状的权威实战手册

TypeScript 交叉类型(Intersection Types)完全指南:用 & 组合类型、合并对象形状的权威实战手册 【免费下载链接】typescript-book The Concise TypeScript Book: A Concise Guide to Effective Development in TypeScript. Free and Ope…

2026/9/24 16:25:29 阅读更多 →
Valetudo 与 Home Assistant 集成实战:MQTT 自动发现、仪表盘与分段清洁

Valetudo 与 Home Assistant 集成实战:MQTT 自动发现、仪表盘与分段清洁

物联网后端前端 【免费下载链接】Valetudo Cloud replacement for vacuum robots enabling local-only operation 项目地址: https://gitcode.com/gh_mirrors/va/Valetudo 点击查看 免费下载 本文是一份以 Valetudo 官方 Home Assistant 集成文档(docs/…

2026/9/24 16:24:29 阅读更多 →
西安 24 小时自助健身房系统软件开发实战指南

西安 24 小时自助健身房系统软件开发实战指南

西安 24 小时自助健身房系统软件开发实战指南 在智慧体育与共享经济深度融合的背景下,西安作为西北地区的科技与消费中心,涌现出大量24小时自助健身房的落地需求。开发一套稳定、高效、易扩展的 西安 24 小时自助健身房系统软件,不仅需要过硬…

2026/9/24 16:24:29 阅读更多 →

最新新闻

如何挑选靠谱的AI创业项目机构?资源评估与避坑实操指南

如何挑选靠谱的AI创业项目机构?资源评估与避坑实操指南

想找靠谱的AI人工智能创业项目机构,我建议你先把“找机构”这三个字放一放。过去两年我陪不少团队聊过孵化器、加速器、产业平台,见过真给资源的,也见过把“AI”当挂件的。这篇文章不吹不黑,聊聊什么样的AI创业机构值得进、怎么判…

2026/9/24 22:01:05 阅读更多 →
Python校园一卡通消费行为分析:从数据清洗到KMeans分群实战

Python校园一卡通消费行为分析:从数据清洗到KMeans分群实战

简介:这是一份面向高校学生与数据分析初学者的Python校园消费行为分析完整项目包,适用于毕业设计、期末大作业与课程设计场景,帮助读者从零完成数据采集、清洗、分析与可视化全流程。包内共21个文件,以7个ipynb交互式笔记、3个py脚…

2026/9/24 22:01:05 阅读更多 →
基于IEEE标准节点系统的潮流计算程序开发与算法实现

基于IEEE标准节点系统的潮流计算程序开发与算法实现

1. 潮流计算程序项目的整体拆解1.1 为什么偏偏是IEEE标准节点系统搞电力系统的人,对IEEE 14、30、57、118、300这几个数字一定不陌生。这些都是国际通用的标准算例网络,从14节点到300节点,规模从小到大,几乎覆盖了科研、教学、工程…

2026/9/24 22:01:05 阅读更多 →
系统日志分析与错误代码定位实战:从单机排查到Graylog集中化管理

系统日志分析与错误代码定位实战:从单机排查到Graylog集中化管理

1. 系统日志分析到底在解决什么问题很多人第一次接触系统日志,都是被一个具体的报错逼到墙角:软件装不上、服务起不来、系统蓝屏、共享文件夹打不开,屏幕上弹出一串十六进制代码,搜索引擎搜出来的答案五花八门,照着做还…

2026/9/24 22:01:05 阅读更多 →
训练慢别急改代码:GPU性能体检与瓶颈定位实战指南

训练慢别急改代码:GPU性能体检与瓶颈定位实战指南

训练慢,几乎是每个碰过深度学习的人都绕不过去的一句话。昨天还有同事跑来找我,说YOLOv8训练自己的数据集,一个epoch快一个小时了,loss明明在降,但就是慢得像在爬,问我要不要换backbone、改loss。我拦住了他…

2026/9/24 22:01:05 阅读更多 →
大模型训练原理、参数调优与Agent开发实战指南

大模型训练原理、参数调优与Agent开发实战指南

1. 大模型训练原理:从“死记硬背”到“揣测意图”的底层逻辑很多人第一次接触大模型,脑子里冒出来的问题都差不多:它到底是怎么“学会”说话的?为什么有时候像背书,有时候又像真的懂我在问什么?我刚开始折腾…

2026/9/24 22:00:04 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →