Superpowers 并行代理分发与条件等待:6 个测试故障一次修完的完整路径
Superpowers 并行代理分发与条件等待6 个测试故障一次修完的完整路径【免费下载链接】superpowersAn agentic skills framework software development methodology that works.项目地址: https://gitcode.com/GitHub_Trending/su/superpowersSuperpowers 是面向 AI 编码代理的技能框架与软件开发方法论。本文深入拆解它的两个高级能力——并行代理分发与条件等待瞄准两个高频痛点多测试文件失败时串行排查慢、时序猜测导致测试时红时绿。 先踩坑再修路6 个红着测试散在 3 个文件里一次大重构之后全量测试跑出来 6 个用例挂了散在 3 个文件里agent-tool-abort.test.ts3 个失败全是时序问题batch-completion-behavior.test.ts2 个失败工具调用没执行tool-approval-race-conditions.test.ts1 个失败执行计数返回 0逐个排查的代价不只是6 个问题每个文件都要花时间重新建立上下文时序类 bug 更是恶心——本地看着正常CI 上变红再跑一次又绿根因很难锁定。 拆开看并行代理分发怎么干活并行代理分发的核心是三步数据流可以一句话说清按故障域拆输入3 个测试文件对应 3 个互不相关的子系统——abort、批量完成、竞态条件没有共享状态查任何一个都不需要另外两个的上下文。并行派发在同一个响应里一次性派出 3 个子代理每个代理只拿到文件范围、明确目标和约束条件不继承主会话的历史。同一响应里的多次派发并行执行一个响应派发一个就是串行——这是整个机制最关键的一处细节。整合输出每个代理返回发现了什么、改了什么的摘要主代理核对没有两个代理动过同一处代码再跑全量测试验证。什么时候用3 个以上测试文件因不同原因失败、彼此没有共享状态、代理不会碰同一文件。什么时候别用失败之间相互关联修好一个可能连带修好另一个或必须先看懂整个系统状态那就先串行排查。决策树和代理提示词模板都在 skills/dispatching-parallel-agents/SKILL.md 里。条件等待解决的是另一半问题——时序。它的数据流同样简单输入一个判断函数比如事件列表里出现 DONE 事件处理端每 10ms 轮询一次重新求值满足立即返回撞上 5000ms 超时还没满足就抛一个带清晰描述的错误。项目附带 3 个现成封装waitForEvent等某类事件、waitForEventCount等某类事件凑够 N 个、waitForEventMatch按自定义谓词等。两种写法的对比非常直观// 改前猜时序 await new Promise(r setTimeout(r, 50)); // 改后等真实条件 await waitFor(() getResult() ! undefined);什么时候用测试里有任意 sleep、或本地绿 CI 红的用例。什么时候别用被测对象本身就是计时行为比如防抖间隔那时应先等触发条件再按已知周期加一段有注释说明的固定延时。 跟着走一遍从一轮报错到全绿以 2025-10-03 的一次真实会话为线索。大重构后 6 个失败散在 3 个文件里先看到报错按域拆分abort、批量完成、竞态条件是三个独立子系统判断可以拆 3 路并行。随后在同一响应里派出 3 个子代理每个只带上测试文件路径、失败用例名和别动其他代码的约束。三个代理几乎同时返回修复路径各不一样Agent 1: 把任意 setTimeout 换成事件式等待 Agent 2: 发现 threadId 放错了事件结构的字段 Agent 3: 给异步工具执行补了完成等待最后主代理依次读完 3 份摘要确认没有同文件改动跑全量测试——全绿。 数据说话条件等待替代 setTimeout 之后指标修复前修复后通过率3 个文件共 15 个不稳定测试60%100%测试套件执行时间基准快 40%6 个故障逐个串行排查3 个代理并行同时返回竞态条件CI/高负载下频繁红消除以上数据来自 2025-10-03 调试会话的记录见 skills/systematic-debugging/condition-based-waiting.md。⚠️ 避坑清单并行分发与条件等待的 5 个坑任务派太宽给代理把所有测试修好它会在全局里打转。范围收窄到一个文件报错信息和用例名直接贴进去。有共享状态还硬派两个代理改同一文件回来就是冲突。派发前先确认故障域独立不独立就先串行。轮询太快或没超时1ms 轮询烧 CPU忘记超时则条件不满足时测试永久挂起。轮询间隔定 10ms超时和错误信息必给。等之前缓存了数据循环前把事件列表读进局部变量轮询查到的是旧快照永远为假。getter 要在轮询循环里现查。靠加大超时掩盖问题50ms 改 500ms 只是把竞态藏起来负载上来还会红。先修真实原因而不是抬超时。并行代理分发只对真正独立的故障才划算问题彼此关联时拆并行只是串行的换皮。条件等待也是一笔交易用 10ms 轮询的间隔换稳定性。如果手头正好有测试多文件失败、或时红时绿的场景可以试试拆成独立的并行任务再把 sleep 换成条件判断。【免费下载链接】superpowersAn agentic skills framework software development methodology that works.项目地址: https://gitcode.com/GitHub_Trending/su/superpowers创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻