• 新增 join-status.js(+ .check.js 可运行检查,web/ 不在 vitest include 里,
    同款手法照抄 io-model.check.js):resolveJoinWait/joinWaitLabel,判据与引擎
    activateSuccessTargets/allIncomingSatisfied 同源——只看 forward 的 success
    入边,backward/fail 边不算「等待对象」。只有 2+ 条入边的真 fan-in 才出徽标,
    单一入边的普通顺序等待不加噪声。
    
    WorkGraphCanvas.vue:pending 节点在等哪几个上游时画一枚「⏳done/total」徽标,
    悬停看完整明细(谁 success / 谁还在 running / 谁 fail 了)。
    
    nextNodeId(单数)→ nextNodeIds(数组):advanceBatch(27-P4 T4)一次最多
    认领 max_concurrency 个 ready 节点,并行分支下真实会被同批拾取的可能是好几个,
    标一个会误导。这个 prop 之前在全仓库没有任何调用方真正传值(NEXT 徽标从未
    渲染过),顺手把它接上:GraphRunPane 按 run.max_concurrency 截取候选,
    手动模式仍显示单数提示,自动模式显示批量提示。
    
    并行运行中的多节点高亮不需要新代码——.dot.running/.node.running 已经是
    按每个节点各自状态渲染,多个节点同时 running 时天然一起亮,这条在 T4/T6
    落地时就已经生效。
    
    验证:join-status.check.js 6 条断言全过;`npm run web:build` 编译通过、
    零告警。没有做的:没有起真实浏览器点一遍——搭一张真的并行 fan-in 图需要
    起完整服务 + 建公司 + 跑真图,这次没做,逻辑侧的验证到 check.js + 编译为止。
    
    Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
    yibo authored
     
    Browse File »