OmO 并发波组装器(Concurrency Wave Assembler)对抗性复核实录:`MAX_TRACKED_CALLS` 内存闸门修复的独立验证 📅 发布时间:2026/9/20 1:15:42 👁 浏览次数: 人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址https://gitcode.com/gh_mirrors/oh/oh-my-openagent点击查看免费下载本篇指南围绕 OmOoh-my-openagentomo-senpi 遥测管线中一次真实的缺陷修复与对抗性复核展开并发波组装器wave-assembler.ts的跟踪上限缺陷从发现、修复到独立验证的完整闭环。读者将掌握该模块的区间图波组装原理、六类计数器语义、paired.length pending.size双结构闸门的正确性论证以及一套可复用的对抗性验证方法论——包括 RED 重构、变异测试mutation test、随机交错扫描与会计恒等式accounting invariant审计。一、背景为什么遥测需要并发波而非回合om -senpi 的并行度遥测要回答一个核心问题一个会话里有多少工具调用是真正并行执行的以及并行执行节省了多少墙钟时间。为此todo 1 在 wave-assembler.ts 中实现了纯函数assembleWaves把成对的tool_execution_start/tool_execution_end观测按toolCallId配对再按时间区间重叠关系区间图连通分量聚合成并发波。模块头注释wave-assembler.ts明确了三个关键设计决策波是区间图连通分量不是回合一个调用只要其[startMs, endMs]区间与波内任一调用重叠就加入该波因此链式执行 A(0-5)、B(4-9)、C(8-12) 会聚成一个波——A 与 C 从不直接重叠但通过 B 传递连接。spanMs maxEnd - minStart而非最长单次时长下游的 savings 公式需要真实的消逝窗口max(duration)在链式波上会高估。这正是验证文档中的核心守卫之一详见变异测试一节。驻留明细resident detail存在两处等待 end 的pendingMap 与已完成配对的paired数组二者之和才是真正的内存占用也因此成为容量闸门cap gate的管控对象。1.1 模块输入为什么观测必须自带时间戳task-1 证据文档task-1.md特别指出senpi 事件ToolExecutionStartEvent/ToolExecutionEndEvent本身不带时间戳字段因此 todo 4 的订阅者必须在到达时打上时间戳本模块只接受已打戳的ToolExecutionObservation记录export type ToolExecutionObservation { readonly kind: start | end readonly toolCallId: string readonly toolName: string readonly atMs: number }1.2 核心数据结构与输出export const MAX_TRACKED_CALLS 2000WaveCounters是全部会计出口wave-assembler.ts计数器语义observedCalls每个格式良好的 start 观测 1永不饱和pairedCalls成功配对的调用数incomplete组装结束时仍驻留在pending的 start 数pending.sizeclockAnomaliesend 时间早于 start 时间的调用数第四会计出口droppedCalls超过容量闸门被拒绝的 start 数malformed结构上无法解析的输入数输出WaveAssembly携带waves: ConcurrencyWave[]每个波含calls、spanMs、maxConcurrency与上述计数器。二、原始缺陷只拦paired.length的闸门形同虚设2.1 缺陷定位初始提交b8078d13a的容量闸门只检查已完成配对数组的长度// b8078d13a: wave-assembler.ts:69缺陷版本 if (paired.length MAX_TRACKED_CALLS) { counters.droppedCalls 1 continue }但调用明细首先累积在pendingMap 中——一个 start 只有等 end 到达后才会变成paired条目。因此对5000 个 start 全部先到、5000 个 end 全部后到的全并行到达顺序paired.length全程为 0pending无界增长闸门从未触发。独立对抗性验证verify-t1-t3.md实测5000 starts 5000 ends 得到tracked5000, dropped0而声明的上限是 2000。2.2 为什么原测试漏掉了它原 case (f) 夹具是严格交错的[start, end, start, end, ...]——恰好是paired.length闸门碰巧有效的唯一到达顺序因为每个 end 都在下一个 start 到来前清空了pending。而全 start 后全 end 恰恰是本遥测存在的意义所在测量全并行批处理计划文档的 MUST-NOT배열을 무한히 키우지 말 것即数组不得无限增长在最关键处未被强制执行。三、修复方案对两个驻留结构之和设闸3.1 一行代码的修复修复提交791437517将闸门改为对两个驻留结构之和施限wave-assembler.tsif (paired.length pending.size MAX_TRACKED_CALLS) { counters.droppedCalls 1 continue }正确性论证一个 start 在配对时会从pending迁移到paired迁移前后paired.length pending.size之和不变因此该和在整个组装过程中单调有界——无论到达顺序如何交错驻留明细都不会超过 2000。3.2 计数器语义不变observedCalls仍然统计每个格式良好的 startdroppedCalls统计超过上限被拒绝的 start。修复提交总 diff 仅 8 行6 行模块注释 1 行闸门变更 1 行删除纯逻辑改动是单行。四、独立复核三个声明形状全部精确重现独立验证者未参与实现verify-t1-repair.md从头编写了/tmp/vt1/probe.ts直接导入导出的assembleWaves与MAX_TRACKED_CALLS作者脚本被删除且未被复用SHAPE1 5000-starts-then-5000-ends tracked2000 paired2000 dropped3000 observed5000 incomplete0 anomalies0 malformed0 accounted(pairedincompletedropped)5000 residentDetail2000 CAP2000 INVARIANT_OKtrue BOUND_OKtrue SHAPE2 2500-starts-no-ends tracked0 paired0 dropped500 observed2500 incomplete2000 anomalies0 malformed0 accounted(pairedincompletedropped)2500 residentDetail2000 CAP2000 INVARIANT_OKtrue BOUND_OKtrue SHAPE3 2010-interleaved-pairs tracked2000 paired2000 dropped10 observed2010 incomplete0 anomalies0 malformed0 accounted(pairedincompletedropped)2010 residentDetail2000 CAP2000 INVARIANT_OKtrue BOUND_OKtrue三个形状与作者声明逐位一致原始缺陷tracked5000 dropped0、2500 驻留确认关闭。五、攻击不变式六种对抗到达顺序 400 次随机扫描验证者用resident trackedDetail incompletepaired 数组 pending Map作为真实内存占用构造了两种极端到达顺序都未覆盖的攻击集/tmp/vt1/probe2.ts探针场景结果(a)3000 starts → 1500 ends → 1500 更多 starts部分排空后重入resident2000BOUND_OK(b)3 starts : 1 end 比例 × 2000 轮pending 持续非零且 paired 增长resident2000BOUND_OK(c)2500 starts 后 2500 ends含被拒 starts 的 endsresident2000无损坏、无复活(c2)2100 startsends 仅针对 100 个被拒 startsresident2000dropped100(d)边界 n1999/2000/2001两种到达顺序n2000 全收、n2001 恰好拒 1比较符正确(e)时钟异常 正常配对anomalies1第四会计出口生效5.1 关键发现一被拒 start 的 end 静默丢弃无复活探针 (c)/(c2) 验证end 的 start 若已被拒绝命中pending.get(...) undefinedwave-assembler.ts后被静默丢弃——既不增加pairedCalls也不重新接纳明细且不计入malformed。这与既有文档化的孤儿 end 语义一致task-1 判定记录 3 曾专门澄清nan/negative的 end 是格式良好的观测其 start 被拒绝故按孤儿 end 处理而非 malformed 输入。5.2 关键发现二作者的不变式缺了第四出口探针 (e) 证明作者的paired incomplete dropped observed并非普遍成立时钟异常调用被从pending移除、永不进入paired、只落入clockAnomalies。正确的完整恒等式为paired incomplete dropped clockAnomalies observed这是b8078d13a就存在的既有行为本次修复未改变且每个调用都落在某个计数器中无静默丢失。验证者将其记录为对作者声明的一次精度修正而非修复本身的缺陷。5.3 随机化扫描构造不出反例/tmp/vt1/probe3.ts使用确定性 LCG 生成 400 次交错每次 2500-4500 条观测62% start 偏置乱序 ends400 randomized interleavings: worstResident2000 CAP2000 boundBreaks0 invariantBreaks0作者的正确性论证——start 从pending迁移到paired时二者之和不变、和单调有界——在攻击下成立验证者无法构造出反例。六、RED 重构与 GREEN修复是真实的不是伪造的6.1 RED 重构针对旧闸门验证者独立把修复前模块从 git 取出让当前测试文件指向它作者工件未复用$ git show b8078d13a:packages/omo-senpi/src/components/telemetry/wave-assembler.ts /tmp/vt1/oldgate/wave-assembler.ts $ bun test /tmp/vt1/oldgate/wave-assembler.test.ts (fail) #given every start arriving before any end beyond the tracking cap ... expect(trackedCalls).toBe(MAX_TRACKED_CALLS) Expected: 2000 Received: 2500 (fail) #given unmatched starts beyond the tracking cap ... expect(result.counters.incomplete).toBe(MAX_TRACKED_CALLS) Expected: 2000 Received: 2500 11 pass 2 fail与作者声称的 RED 完全一致11 pass / 2 failincompleteExpected 2000 Received 2500——两条新测试确实钉住了缺陷RED 捕获非伪造。6.2 GREEN已发布代码$ bun test packages/omo-senpi/src/components/telemetry/wave-assembler.test.ts 13 pass 0 fail 35 expect() calls6.3 变异检查span 守卫仍然非重言式把当前修复后模块复制到/tmp/vt1/mutant/将spanMs: maxEnd - minStart换成spanMs: max(endMs - startMs)即计划明令禁止的max(d)基准(fail) #given tool executions that overlap in time ... #then all three calls join one wave carrying a span (fail) #given a chained wave where the first and last calls never overlap ... #then one wave reports the full span and a concurrency of two expect(result.waves[0]?.spanMs).toBe(12) Expected: 12 Received: 5 11 pass 2 failmax(d)变异体仍被两条测试捕获而非一条——修复没有削弱 span 守卫。这印证了 task-1 的原始回归守卫链式 A(0-5) B(4-9) C(8-12) 中 A 与 C 从不重叠朴素最长时长会报 5朴素波大小并发会报 3实测是 12 和 2。6.4 指标逻辑零回归链式波用例不受修复影响1 个波、span12、maxConcurrency2spans、波划分、incomplete、clockAnomalies全部与先前确认值一致。8 行 diff6 行注释 1 行闸门 1 删除不存在扰动 span/波/并发计算的可能测量也证实未扰动。七、被点名的遗留问题incomplete少报与 schema 缺口7.1 模块内可接受线上不可审计一旦触顶被拒 starts 落入droppedCalls而非incomplete。2500-starts 用例上报incomplete2000但实际有 2500 个 start 未完成——incomplete在MAX_TRACKED_CALLS处饱和少报了被拒数量。模块层面可接受的理由incomplete定义为残差 pending 明细计划明确要求超限时카운터만 유지하고 상세는 버림只保留计数器、丢弃明细observedCalls精确且不饱和droppedCalls精确承载亏空完整会计恒等式在全部 400 个随机形状与每个手工形状上成立。持有全部五个计数器的消费者总能还原真相没有调用被静默丢失。7.2 真正的风险parallelism_summary不带dropped_calls验证者点名 omo-native-parallel-summary.tsbuildParallelismSummary在事件里暴露了incomplete_calls和clock_anomalies也暴露了dropped_calls——但验证文档写作时点所引用的注册 schemaparallelism-schema.ts尚未携带dropped_calls属性该文件现已包含dropped_calls: NUMBER_PROPERTY对应 todo 5 的演进。读取该事件的仪表盘若只看到incomplete_calls 2000将无从得知另有 500 个 starts 被拒绝、也无从判断该值是被截断的天花板而非测量值——会让仪表盘读到的指标静默损坏的失效模式只是被推迟了一层并未消除。验证者对 todo 6 的建议非 todo 1 的阻塞项要么为parallelism_summary增加dropped_calls数值属性使恒等式可在线上重建要么发出饱和标志saturation flag让读者区分真实的incomplete_calls 2000与被截断的值。schema 文件归 todo 5 所有本修复正确地未触碰。八、范围纪律与约定合规$ git show --stat 791437517 .omo/evidence/telemetry-parallel-latency-v2/task-1.md | 121 packages/omo-senpi/src/components/telemetry/wave-assembler.test.ts | 40 packages/omo-senpi/src/components/telemetry/wave-assembler.ts | 8 -提交恰好只触碰三个许可路径savings-math.ts、eval-classifier.ts、product-identity.ts、product-identity.test.ts、senpi-telemetry.md、packages/telemetry-core/、packages/omo-codex/、packages/omo-opencode/、plugin/extensions/、index.ts均未被该提交触碰范围 diff 中出现的其他文件来自中间提交d6dd78b4f与de7416776属其他 worker 的 todo 2/5。交错夹具被保留git diff b8078d13a 791437517 -- .../wave-assembler.test.ts的删除行计数为 0——原 case (f) 夹具逐字节未动未被重写来迁就修复。两条新用例纯为新增。这是正确之举保留严格交错夹具即保留了旧闸门唯一能处理的到达顺序测试套件现在同时覆盖两种顺序。约定检查verify-t1-repair.md 第 7 节given/when/then两条新用例均用嵌套describe(#given ...) describe(#when ...) test(#then ...)符合 AGENTS.md 约定代码卫生新增行中as any0 处、ts-ignore0 处、em dash 0 处、非 ASCII/emoji 0 处纯 LOCwave-assembler.ts 157 行、测试 204 行均低于 250 上限测试数据完全字面化无Date.now()、无定时器、无 sleep、无 async——两条新用例不可能靠时序运气通过。九、套件健康度$ bun test packages/omo-senpi/src/components/telemetry/ 133 pass 0 fail 491 expect() calls Ran 133 tests across 15 files. [2.67s] $ bun run --cwd packages/omo-senpi typecheck $ tsgo --noEmit -p tsconfig.json TYPECHECK_EXIT00 fail。133 而非作者记录的 118是因为其他 worker 并发落地了 todo 2/5 的提交及未跟踪的 todo-4 文件这些进行中的工作不在本次范围内且均为绿色。十、方法论沉淀对抗性验证的可复用清单从这份验证实录可以提炼出一套可复用的复核流程独立复现声明数字从头编写探针直接导入被测模块不复用作者脚本逐一核对每个声明值本文三个 SHAPE攻击不变式构造两种极端到达顺序都覆盖不到的场景部分排空后重入、被拒 start 的 end、纯被拒尾部、精确边界 n1999/2000/2001、时钟异常随机化扫描用确定性 PRNG 生成数百次任意交错验证最坏驻留与恒等式零破坏RED 重构git show取出修复前模块指向当前测试文件验证 RED 捕获真实11 pass / 2 failExpected 2000 Received 2500变异测试对守卫本身施加禁止的变异如max(d)span确认测试仍能击杀、守卫非重言式会计恒等式审计paired incomplete dropped clockAnomalies observed在每个形状上成立任何调用都不静默丢失范围与约定检查提交只触碰许可路径、夹具未被重写、约定扫描干净、套件零失败。结论verdict: confirmed。修复真实且完整闸门现在约束paired.length pending.size三个声明复现数字集全部精确重现上界在六种手工对抗到达顺序与 400 次随机交错下成立最坏驻留 2000零越界对旧闸门的 RED 精确重现11 pass / 2 fail交错夹具被保留而非重写指标逻辑未受扰动且其 span 守卫在变异下仍非重言式范围恰为三个许可文件约定干净套件 0 fail。两条带出的非阻塞修正作者不变式应写作paired incomplete dropped clockAnomalies observed——clockAnomalies是第四个会计出口既有行为非本次修复引入incomplete_calls在上限处饱和schema 是否携带dropped_calls决定了该权衡背后的恒等式能否被仪表盘重建——留待 todo 6该属性现已在 parallelism-schema.ts 中注册属 todo 5 的后续演进。想深入底层实现的读者可直接阅读 wave-assembler.ts区间图分组、sweepline 最大并发、解析边界拒绝与其测试套件 wave-assembler.test.ts13 条 given/when/then 用例以及上游证据 task-1.md初版实现与缺陷复盘和 verify-t1-t3.md首次对抗性验证7/7 变异击杀矩阵。赞分享人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排【免费下载链接】oh-my-openagentOmO: Just type mass ulw keyword with your prompt. Now you are the master of graph engineering.项目地址https://gitcode.com/gh_mirrors/oh/oh-my-openagent点击查看免费下载相关推荐omo-senpi 并行度遥测的对抗性验证实战从 wave 装配、注入时钟到会话状态泄漏的边界探测omo senpi 并行度遥测的对抗性验证实战从 wave 装配、注入时钟到会话状态泄漏的边界探测 导读 本文基于 .omo/evidence/telemet人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排OmO ulw-loop 批量 steering 独立评审修复实录审计持久化、CLI 冲突编码与验证批次错误码OmO ulw loop 批量 steering 独立评审修复实录审计持久化、CLI 冲突编码与验证批次错误码 本文基于 oh my openagentOm人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排OmO 发布门禁修复实录beta.8 release-state 双根因定位与 RED/GREEN 验证方法论OmO 发布门禁修复实录beta.8 release state 双根因定位与 RED/GREEN 验证方法论 本文以 oh my openagent 仓库中人工智能AI Agent代码智能体多智能体MCP ClientsAgent 编排创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考