• 自动模式的驱动原语 advanceTree 里 advanceOne 换成 advanceBatch:树上「最深
    active run」的选取逻辑不变,但推进这一步现在能一次并发 claim 一批 ready 节点,
    而不是每 tick 只推一个。核实过 advanceTree/runAuto 的返回值全仓库只被读 .ok,
    不依赖 .node/.results 的具体形状,不需要兼容层。
    
    顺带抓到并修了一个真 bug:advanceBatch 的 no-ready-node / taken-by-other 分支
    原来写的是 ok:true,跟 advanceOne 用 result() helper 的惯例(这两种情形一律
    ok:false)不一致。不修的话接进 runAuto 后,一个已经收敛的 run 会被自动循环
    一路空转到 maxSteps 才停——旧测试从没对已收敛的 run 连续调 advanceBatch,
    所以这条一直没被撞出来。
    
    新增两条测试:ok:false 语义与 advanceOne 对齐(直接绕开引擎构造边界状态);
    runAuto/advanceTree 端到端确实吃到并行(用真实 setTimeout 延迟证明并发窗口
    重叠,不是同步假象)。全量 vitest 147 文件 / 1350 用例,零回归。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »
  • planner 骨架(brd→prd→sdd→goal-benchmark→validator)复现:三个 planning 节点
    声明了 produces 却没真落盘,executor 没抛异常就被引擎判 success;goal-benchmark
    的入边 needs:[brd,prd,sdd] 只用来拼提示词里的 ⚠️ 提示,agent 视而不见照样产出
    合法 acceptance。下游 validator 永远读不到三份文档,backward 重试撞循环硬顶后
    只能人工兜底。
    
    settleNode 判 success 之前新增两道闸门(均只对 agent_call 节点生效,subgraph/org
    节点的契约由子 work run 自己的节点过闸):
    - unsatisfiedRequiredProduces:声明的 required produces 一个候选文件都没落盘 →
      fail_reason=produces_missing,不再放行
    - requiredInputsMissing:声明的 required needs 在 graph_files 里查不到实例 →
      fail_reason=missing_required_input,不采信 agent 自报的 success
    
    两者都只判「有没有」,不判「分类对不对」——ambiguous 归类留给下游 ⚠️ 提示词处理,
    避免把「写了东西但引擎猜不出对应哪个 kind」误判成没执行。
    
    包含此前已完成但未提交的 27-P4 T3(graph_runs.max_concurrency 落库)及配套
    advance-batch 测试。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »