diff --git a/docs/todo/system-design/27-graph-agent-architecture.md b/docs/todo/system-design/27-graph-agent-architecture.md index ded6ccc..154c8f4 100644 --- a/docs/todo/system-design/27-graph-agent-architecture.md +++ b/docs/todo/system-design/27-graph-agent-architecture.md @@ -2,7 +2,9 @@ > **版本**: v0.3(P0/P1 已实现;Org Graph 建模在 v0.3 修正为 company 级 workflow) > **日期**: 2026-08-15 -> **状态**: P0 ✅ 已实现(`graph-db.js` + `graph-seed-service.js`,见第七节);**P1 ✅ 已实现**(commit `226489d`,`graph-service.js`);P2 起 📝 设计中/未实现 +> **状态**(2026-08-18 校准,此前这一行落后两个阶段): P0 ✅ 已实现(`graph-db.js` + `graph-seed-service.js`,见第七节);P1 ✅ 已实现(commit `226489d`,`graph-service.js`);**P2 ✅ 已实现**(设计已归档 [27-P2](../../done/system-design/27-p2-org-graph.md));**P3 主体 ✅ 已实现**(`c3abf4a` 起七轮,见 [27-P3/P4](./27-p3-p4-work-graph-console.md) §十 实现记录 + 第六轮终验回填;收尾见 [27-P3B](./27-p3b-real-run-runway.md));**P4 📝 设计中/未实现**([27-P4](./27-p4-parallel-and-artifacts.md) 自述 v0.1 设计阶段) +> +> ⚠️ 这一行是别人判断「哪些文档能从 `docs/todo/` 搬去 `docs/done/`」的依据 —— 它过期会连累后面每一次迁移判断,改阶段状态时请顺手更新它。 > **命名**: 新增 agent id / 表名 / 字段名前先读 [27-NAMING 命名规范](./27-naming-conventions.md) > **前置**: [02 四层 Agent 架构](../../done/system-design/02-agent-architecture.md)、[24 公司层架构](../../done/system-design/24-company-layer-architecture.md)、[22 Agent 记忆系统](../../done/system-design/22-agent-memory-system.md)、`server/src/core/devloop/loop-controller.js`(现有 retry-with-reflection 实现) diff --git a/docs/todo/system-design/27-p3-p4-work-graph-console.md b/docs/todo/system-design/27-p3-p4-work-graph-console.md index 59ce162..d76b224 100644 --- a/docs/todo/system-design/27-p3-p4-work-graph-console.md +++ b/docs/todo/system-design/27-p3-p4-work-graph-console.md @@ -904,7 +904,10 @@ org graph: org-planner → org-coder → org-validator **为什么这不是「少打了一行日志」**:`org-validator` 的 `tools.md` 退出码表写着「1 = 判决为 fail,照它打印的 `fail_reason` 与 `failures` 走 Step 5」,`coder-validator` 同款。**按提示词照做的 agent 因此拿不到任何可归因的信息**——它只知道「失败了」,不知道是「产物不是 JSON」还是「真的没达标」,而这两者在 §四.D.2.2 里对应完全不同的 `fail_reason` 与不同的回退边。 **修法**:① 短路分支一律产出一条 failure(形状与正常比对完全一致:`case` / `expected` / `got` / `hint`,`hint` 里带 `reason` + 人话解释),于是 `executeContract` 的 `failures: active.flatMap(...)` 自然带上它们,**json 分支、落盘 verdict、人读输出三处同源**;② 人读输出改成按字段**是否真的存在**分别打,并且**只要有 `reason` 就一定打 `reason` + `detail`**;`test_script` 那行 `exit=... timed_out=...` 只在真起过进程(有 `duration_ms`)时才打,免得短路分支的 `exit=null` 被读成「跑了、返回 null」;③ 判决为 fail 却一条 failure 都没有时,明确打一句「无逐项明细」,而不是留一个空的 `failures:` 标题。 -21. **骨架悬空引用:目录补了、`_registry.json` 没登记,CI 因此是红的** 🔴 **【现存 blocker,第六轮终验回填】** +21. **骨架悬空引用:目录补了、`_registry.json` 没登记,CI 因此是红的** ✅ **【已关闭,2026-08-18 由 28 号 Agent 注册表统一顺带扫掉】** + - **关闭实测**:六个 id(`benchmark-validator` / `testdata-validator` / `brd-planning` / `prd-planning` / `sdd-planning` / `goal-benchmark`)现已全部登记在 `system/agents/_registry.json`;`server/tests/unit/template-refs.test.js` **4/4 通过**(全量 999/999 全绿)。注意本体目录已随 [28 号改造](../../done/system-design/28-agent-registry-unification.md) 从 `system/templates/` 并入 `system/agents/`,且 `_registry.json` **不再是数据源头** —— `seedAgents()` 直接扫目录,registry 只用于按 id 补 `benchmark_score`。 + - **「顺带查到的第二个隐患」也已关闭**:`usedCount` 已从 `_registry.json` 挪到 `data/template-usage.json`(27-P3B W13),`_registry.json` 只留人工维护的基线,跑完真 CLI E2E 后该文件 `git status` 干净。 + - 以下为原始记录,保留备查: - **控制操作那条线已关闭**:§四.C 控制操作表 + §六 验收 4 / 15 + §八.13 全部实测通过,见 §八.13 与 §六 验收 4/15。 - **骨架这条线只做了一半**。做了的:六个本体目录 `system/templates/{benchmark-validator,testdata-validator,brd-planning,prd-planning,sdd-planning,goal-benchmark}/` 已建齐,`graph-seed-service.seedTemplates()`(**按目录扫描**)能把它们 upsert 进 `system_agents`,`work_graph_nodes.system_agent_id` 的外键那一端因此成立——终验用真 server 跑 `org-validator`,`validator.json` 三个节点**原样落库、不再被 `reference` 打回**,这个 blocker 在 DB 这一侧确实消失了。 没做的:**`system/templates/_registry.json` 里这 6 个 id 一条登记都没有**。而同轮新增的防线 `server/tests/unit/template-refs.test.js` 第三条用例查的正是这个,实跑 **failed**(全量 `npx vitest run` = 718 passed / **1 failed**)。