From 1eadf74358843c1958b4311f3bc47450e6953464 Mon Sep 17 00:00:00 2001 From: yibo Date: Sun, 23 Aug 2026 15:41:53 +0800 Subject: [PATCH] docs(30): 标记 infra_flake 熔断线已修 --- docs/README.md | 2 +- docs/todo/system-design/30-task-delegation-reliability-gaps.md | 15 +++++++++------ 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/docs/README.md b/docs/README.md index 382aec8..85fb02c 100644 --- a/docs/README.md +++ b/docs/README.md @@ -47,7 +47,7 @@ Graph Agent 架构重构(27 系列)。**已完成的阶段文档已移入 `d | [27-p4-parallel-and-artifacts.md](./todo/system-design/27-p4-parallel-and-artifacts.md) | **P4(回收编号)并行执行与产物索引** — 📝 设计中,未实现。fan-out 真并发 + 同 agent 多实例隔离 + `files.json` 产物索引。三个 Phase,C 可插队 | | [28-followups.md](./todo/system-design/28-followups.md) | 28 号(Agent 注册表统一)的遗留清单 — 主文档已在 `done/`,这份装没做完的:dream 机制(设计见 29 号,已实现,见下)、`source_kind`(✅已删)/`legacy_path`(不能删)删列、三项「已实施未验证」。任务态清理(✅已实现,见下)。§五 是**已立起来的守卫清单**(别重复造,也别删) | | [29-dream-design.md](./todo/system-design/29-dream-design.md) | **dream(经验汇流)**— ✅ 已实现。定时整理所有 agent 在所有公司的记忆,提炼后跨公司沉淀(不泄漏公司信息)。四条取舍已拍板并实现:去敏独立判定、四落点分层写入(经验/`SKILL.md`/`soul.md`/`agent.md`,受管区块+三道闸门)、每日定时(串行+空转保护)、引用真伪自动查、REST+控制台入口(`/api/dream/*`、`/dream`)。`innovator-evolver` 真 CLI 跑通一次。**仍缺的**:「结论对不对」只能人抽查;「套进 org/work graph 来跑」评估后用户选了不做(作用域不匹配,见文内 §5.7) | -| [30-task-delegation-reliability-gaps.md](./todo/system-design/30-task-delegation-reliability-gaps.md) | **任务委派可靠性现状**— 📝 调研记录,非设计方案。DevLoop `runUnit`、Company 招聘装配、Graph 执行三条链路核对结论一致:都是「失败预算耗尽 → 停等人工」,没有「卡住了主动通知人」这一层;DevLoop 当前还默认走 mock,真实 CLI 成功率无实证数据。2026-08-23 追加真实实例:`infra_flake` 原地重跑没有熔断线,真撞上过一次确定性死循环(节点把诊断结论误判成自己的执行结果,反复重跑却从不路由到诊断建议的目标节点),比本文档原先的模式更隐蔽——连"卡住"本身都不容易从节点状态看出来 | +| [30-task-delegation-reliability-gaps.md](./todo/system-design/30-task-delegation-reliability-gaps.md) | **任务委派可靠性现状**— 📝 调研记录,非设计方案。DevLoop `runUnit`、Company 招聘装配、Graph 执行三条链路核对结论一致:都是「失败预算耗尽 → 停等人工」,没有「卡住了主动通知人」这一层;DevLoop 当前还默认走 mock,真实 CLI 成功率无实证数据。2026-08-23 追加真实实例并已修:`infra_flake` 原地重跑没有熔断线,真撞上过一次确定性死循环(节点把诊断结论误判成自己的执行结果,反复重跑却从不路由到诊断建议的目标节点);已加 `infra_flake_count` 列 + 硬顶 3 次熔断,连续判 infra_flake 超过硬顶就改判 blocked 交给人工 | | [31-work-graph-fail-fallback-coverage.md](./todo/system-design/31-work-graph-fail-fallback-coverage.md) | work graph 兜底边覆盖不全 — ✅ 已完成(除入口节点外强制兜底边,`planner.json`/`executor-fanout.json` 补 6 条边),978/978 单测通过;2026-08-21 又用真实 LLM 起了一条新任务做端到端回归验证,`org-planner-sdd` 自判失败后自动打回 `org-planner-prd`(3 次,零人工介入),修复确认生效 | | [36-prd-agent-methodology-training-feasibility.md](./todo/system-design/36-prd-agent-methodology-training-feasibility.md) | 📝 **调研 + 阶段一/二均已完成**。回应"落地页太单薄是不是该用 Innovator 先训练专业 agent、再用 Dream 持续迭代"——认同方向。**阶段一**:`graph-engine.js` 结算节点后把 `success`/`fail:` 写进本体 `memory.md`(此前只有人类对话路径会写,Dream 天天空转)。**阶段二**:新建独立试验节点 `prd-methodology-trial` 走真实 Hunt→Digest→Evolve,2 轮收敛(96/97 分,真实基线 50 分),三个真实历史项目反推验证方法论有效;过程中连带修复同一个 2026-08-16 改名批次遗留的 5 处 `innovator`→`org-innovator` 死链(后端两处硬编码、前端"重新训练"按钮、`/api/agent/list` 展示 id 来源的四个 `config.json`),以及 `AgentScaffold` 默认模板一处裸相对路径缺陷。结论:FDE 对方法论类角色确实管用,但收敛速度/验收严谨度依赖任务书显式写明的自纠正要求,非免人工黑盒。环节 3(训练产物 → 雇佣本体转换)尚未开工 | | [35-validation-rigor-and-body-readiness-proposal.md](./todo/system-design/35-validation-rigor-and-body-readiness-proposal.md) | 📝 **复盘 + 改进方案,四条提案全部已实施**。承接 31/32/33/34 号的复盘结论:任务结果差主要是架构问题(完整性闸门 `missingBodyDefinition` 只在招聘时查、图执行侧完全没有第二道防线——新发现)+ 一个具体的招聘装配可靠性 bug,不是 agent 能力问题。提案 A:本体不完整时图执行前置判 `fail_reason=body_not_ready`,不扣预算。提案 D:`goal-contract.js` 的 `evidence_hint` 命中浏览器类关键词的维度必须有证据支撑,否则判不过。提案 C:新增 `scripts/visual-acceptance-check.mjs` 复用检查工具。提案 B:控制台「验收证据」小节展示每个维度有没有证据支撑 | diff --git a/docs/todo/system-design/30-task-delegation-reliability-gaps.md b/docs/todo/system-design/30-task-delegation-reliability-gaps.md index e35974f..9552c9a 100644 --- a/docs/todo/system-design/30-task-delegation-reliability-gaps.md +++ b/docs/todo/system-design/30-task-delegation-reliability-gaps.md @@ -103,12 +103,15 @@ backward_count"分支。因为每次重跑产出的诊断内容都一样(同æ  本身都不容易从节点状态一眼看出来(`ready`↔`fail`↔`ready` 快速循环,轮询间隔稍长就会 误判成"在正常推进")。 -**没有当场修**(这次实测是手动叫停 + 转去直接读实际产出物评估,绕过了这个节点,没有改 -`graph-engine.js` 的 `infra_flake` 处理逻辑)。真要修,方向大概两个:① `infra_flake` 加一层 -"连续 N 次产出内容雷同"的去重熔断;② 让 `routeFailure` 认得这类"triager"schema 里的 -`target_node` 字段,真的路由过去而不是重跑产出诊断的节点本身——后者更像是把 `org-coder-test` -临时客串"triager"这个用法本身该不该存在的问题,需要先搞清楚这条 backward 边的设计意图 -是"重测"还是"诊断转发",不确定的情况下不要贸然改引擎通用逻辑。 +**2026-08-23 已修(① 熔断线,不是 ② 路由)**:新增 `graph_run_nodes.infra_flake_count` 列, +`routeFailure` 的 infra_flake 分支每次原地重跑前先加计数,连续超过硬顶(3,与 +`LOOP_HARD_CAP_EDGE` 同量级)就不再重跑、改判 `blocked` 交给人工;真正发起新一轮真实派发 +(`bumpNodeAttempt`)时清零,不会误伤"这次真是基础设施抖动、之前刚好也抖过"的正常场景。 +**刻意没做**②(让 `routeFailure` 认得 `target_node` 真的路由过去)——`org-coder-test` 临时 +客串"triager"这个用法本身该不该存在,需要先搞清楚这条 backward 边的设计意图是"重测"还是 +"诊断转发",没查清楚之前不改选边的语义,只堵住"没有熔断线"这个不管设计意图是什么都算 +缺陷的口子。新增回归测试锁死"永不恢复的 infra_flake 在硬顶后停止重跑",见 +`server/tests/unit/graph-engine.test.js`。 ## 参考 -- libgit2 0.21.4