-
subtask-planning 改成两段式:先查 experience-lookup(扫已雇 agent 的 dream 沉淀经验,关键词打分)拼进提示词,agent 自评 confidence;经验为空或 confidence low 时触发 deep-research(图外直接调用 org-hunt 轻量提示词, 不套用其训练场景三件套契约,默认关闭,需 ENABLE_DEEP_RESEARCH=1)。 reasoning_source/experience_refs/research_used 增补进 subtask-plan.json, 向后兼容旧注入桩。 范围收窄:不做"历史同类 goal 检索"(需要语义检索基础设施);Phase 3-5 (任务池认领/子任务预算/看板 UI)涉及核心调度引擎范式级改动,另起设计。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H85SS5hVC4u1PbVhjmrhH8
-
47号:itemized 子任务物化在当前 workgraph-planning 常见子图形状下因 acceptance.md 永远产不出来而形同虚设;maybeMaterializeItemizedSubtasks 新增兜底,缺失时改读 已被 44 号文档证实稳定产出的 goal-benchmark.json 的 dimensions[]。 46号 Phase 1:新 agent subtask-planning,钩在 enqueueTaskRun(显式 opt-in,只在 goal 批量下达/单条 task 下达两处触发,保住 quick task 零 LLM 调用的既有保证); 产物写共享 artifacts/subtask-plan.json,复用 R-19.3 任务级共享索引对接下游。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
新增两条经验:阻塞任务事件驱动唤醒需周期性兜底扫描、校验失败重试边应指回产出方而非上游规划方。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
真实事故:h3video 公司 h3-story-draft 节点卡在 status=running,背后 CLI 会话已死但服务器 进程没重启,开机一次性孤儿扫描/goal-task 巡检/wallclock 看门狗均看不到,ceo 被转发问题后 绕过引擎自己拉会话,陷入死循环。 - sweepStaleRunningAgentCalls + startStaleAgentCallWatchdog:运行时长超阈值(默认 25 分钟) 的 agent_call 节点判 infra_flake 原地重跑,5 分钟一次巡检,挂进 server/index.js - ceo/tools.md 补 force-fail 端点(已有,未改代码)的使用文档 + 禁止自拉会话的规则 - ceo/heartbeat.md 同步更新"不用管的"一节 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WjFL1nfPDqZnJeuskYHwvs
-
44 号:writesArtifacts 节点产出闸门永远打不过 - goal-benchmark 按设计把产物写进 root run 共享 artifacts/ 目录(三个节点合成同一份 acceptance.json,天然不可能落在某节点私有目录),但 unsatisfiedRequiredProduces 的 R-19 逃生口 readDeclaredProduces 的 allowedRoots 只认节点私有目录 + 项目根,够不到 共享区——这条契约在当前实现下无论 agent 表现多好都无法通过。 - 修法(44 号文档方案 1,改动面最小):allowedRoots 加入 runRootDir(run)/artifacts/; goal-benchmark 的 agent.md/tools.md 补上"写完共享产物后在自己节点私有目录声明一份 contract.json"这一步。 - 回归:graph-files-index.test.js 新增用例 ⑭。 41 号:routeFailure 的 infra_flake 分支完全无视 target_node - 30 号文档记录过一次真实死循环:节点自称 infra_flake 并点名 target_node,引擎原来 一律原地重跑该节点自己,从不看 target_node。 - 修法(最保守方案,用户确认):新增 infraFlakeTargetEdge——target_node 只有在图上 真有一条从本节点出发的 backward fail 边指向那个节点时才生效,命中就改走正常的 backward 边路由(计入 backward_count/双层熔断),不再享受"原地重跑、只受 infra_flake_count 约束"的免账本待遇;没命中维持原有行为。 - 重要澄清:这条修复堵不住 30 号文档那次真实事故——事故里点名的目标是下游节点, 而 org-graph-service.js 规则 4(backward-labeled)从图结构上就不允许 backward 边 指向非祖先,那次事故本来就不是"有边不认",是"诊断内容在打图结构不允许表达的 主意",已经靠 INFRA_FLAKE_HARD_CAP 熔断收敛,不在这条修复范围内。 - 回归:graph-engine.test.js 的 infra_flake describe 块新增两条用例。 44 号文档移入 done/,41 号清单项相应更新,43 号文档的交叉引用一并修正。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CwGcvMfUcgCcweN5vjhTkn
-
实现路径:task-planning 判断是否 itemized(硬规则 5 开例外让 LLM 写这 一个字段)→ org-planner 收尾把 acceptance.md 物化成子任务 → coder-validator 用新工具 task subtask-result 逐条上报,settleNode() 新增闸门强制核对 子任务全部 completed 才认这一轮 success。 - work-graph-db.js: tasks 加 acceptance_mode 列,createTask 支持 parentTaskId(复用既有列),新增 settleSubtaskResult 条件更新 - graph-engine.js: maybeMaterializeItemizedSubtasks(org-planner 结算 success 后物化子任务,agent_call/subgraph 两种形态都认,subgraph 场景 扫子 run 全节点找 acceptance.md,找不到优雅降级不阻塞主产出); coder-validator 判 success 前新增子任务完整性闸门 (ENGINE_FAIL_REASONS.SUBTASKS_INCOMPLETE) - task-planning.js / company.js: acceptance_mode 字段透传链路 - bin/lemon.js: 新增 task subtasks / task subtask-result 两个子命令 - coder-validator/agent.md、task-planning/agent.md: 对应提示词更新 真实回归验证过(新建公司走完整链路),过程中发现两个跟本次改动无关的 预存在问题:一次瞬时的 produces_missing 误判(重试即愈)、一个结构性的 writesArtifacts 产出闸门不匹配 bug(另立 44 号文档记录,未修复)。 全量单测 1120/1123 通过,3 个失败与本次改动无关(git stash 验证过)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U7xYyvv3pzuV9diMVUH5QL
-
test/integration 类节点从不产出一个能被 indexNodeOutputs() 认作 kind='log' 的文件(落盘的都是 coder.log/test.log,归入 kind='artifact'), required 的 log 契约永远无法满足,把节点卡进 missing_required_input 死循环。33 号文档修过一次模板文件,但 workgraph-planning agent 实际 照抄的是 tools.md 里一份没同步更新的旧范例,同一个坑复现(snakegame-co T-mtfh2kuf-7c31)。这次把底线收到 declareEdgeContract 唯一落库口, 不再依赖每个模板/每次 LLM 规划都记得写对;顺带同步 tools.md 范例。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01U7xYyvv3pzuV9diMVUH5QL
-
之前几轮全量跑一直有 3 个失败,当时判断是环境耦合/pre-existing、跟本次改动无关就没细查, 这次逐个真查了一遍,三个都是真 bug: - system/agents/sdd-planning/SKILL.md:Evolve 训练产出从 train/evolve/SKILL.md 提升到 生产位置时,"训练依据"引用的相对路径没跟着调整(少了 train/ 前缀),指向了不存在的 system/agents/hunt/、system/agents/digest/;真实文件其实在同一个 agent 自己的 train/hunt/、train/digest/ 下,补前缀即可。 - graduation-criteria-reality.test.js:断言死等 code-planner 的状态回到 'active',但 该本体的 config.json 早已从曾经踩坑的 "training" 改成了真正毕业态的 "enabled"—— seedAgents() 把 DB 同步成 'enabled' 是设计如此(同为毕业态,不是降级),不该被判失败。 改成用 isUngraduatedStatus() 判断"没被打回未毕业域",不再钉死具体状态值;顺手把 graph-seed-service.js 里那句会随源码变化过期的注释也改成不点名具体值。 - graph-engine-extend-budget.test.js:一颗时间炸弹——用硬编码绝对时间戳 '2026-08-23T05:23:52.886Z' 模拟"卡住很久了",但被测代码真的调 Date.now() 算经过时长, 写这条用例时"经过时长"确实超过 2h 上限、又低于追加后的 6h 上限;现在真实时间已经过去 178 小时,连追加后的上限都超了,测试注定要红,跟被测代码毫无关系。改成 Date.now() - 3小时 相对计算,不再随时间推移漂移。 全量 vitest 131/131 文件、1089/1089 用例通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
冲突在 docs/README.md:并行会话在真实端到端测试里发现 boss agent(39 号文档)还有 三个单测没覆盖的真问题,把 39 号重新留在 todo/ 并拆出 42 号跟进文档;与我这边把 39 号挪进 done/ 的判断冲突——采纳对方判断(39 号文档物理路径挪回 todo/system-design/, докс/README.md 用对方更新的行 + 补 42 号一行),因为他们是基于更新的真实测试结果。 顺带把 29-dream-design.md 这次会话移到 done/ 后遗漏的引用修掉: system/agents/{dream-distiller,dream-screener}/agent.md、 server/{routes/dream.js,services/dream-service.js}、 server/tests/unit/dream-routes.test.js 六处 docs/todo/system-design/29-dream-design.md 路径改成 docs/done/system-design/29-dream-design.md(no-dead-path-references.test.js / agent-md-refs.test.js 两条守卫测试之前没扫到这几处,这次真跑测试才暴露)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
Conflicts: system/agents/innovator-evolver/agent.md system/agents/innovator-evolver/soul.md system/agents/master/agent.md system/agents/master/soul.md system/agents/org-innovator/agent.md system/agents/org-innovator/soul.md
-
第 11 轮真跑:给 org-evolve 规划验收节点时,按名字语义匹配选了 benchmark-validator ("对评分结果做验收判决"),但该本体硬编码读 artifacts/goal-benchmark.json(只有 planner.json 的 goal-benchmark 节点才产),Hunt→Digest→Evolve 链路里没有这个节点, 两轮都判 blocked。benchmark-validator / testdata-validator / validator-triager 不是 通用验收工具,是 validator.json 骨架专属、绑定任务级共享契约文件的本体。 workgraph-planning/agent.md 加第三条硬规则:判据从"名字像不像"改成"这条链路里有没有 节点产 goal-benchmark.json/acceptance.json"。deliverable.json 的 whenToUse 补上"自带 自评分收敛逻辑的节点也不需要外部验收节点"例外条款并点名这次事故。 第 12 轮真跑验证:org-evolve 的规划记录原文引用新条款选中 deliverable.json, backward_count=0,评分 83/行业均线 78 收敛,全流程干净跑完。41 号文档收尾—— 11 轮真跑挖出的 6 个独立缺陷全部修复并逐条验证生效。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
核心修复:indexNodeOutputs() 此前只扫节点私有目录,不扫项目根——但引擎自己的写入边界 明确允许交付物写项目根,导致内容型交付物节点(产出写进项目根时)永远进不了 R-19 产物 索引,下游 needs 声明永远查不到实例。新增 readDeclaredProduces():agent 可在 contract.json 里显式声明 produces:{kind: 绝对路径},校验(绝对路径/落在项目根或私有目录内/ 文件真实存在)通过才登记,不满足就整个 kind 判「没产出」,不静默放过。全局提示词 (describeArtifactContract)同步更新,所有 org/work 节点自动学到这个新字段。 新增 org-hunt / org-digest / org-evolve 三个 graph 原生 agent(方法论抄 innovator-hunt/digest/evolver,协议原生兼容 graph 引擎),配套新增 work-graph-templates 的 deliverable.json(内容型交付物骨架,不引入验证 agent)。11 轮真实试跑挖出并修复 5 个 独立缺陷(详见 41 号文档问题 7):建公司自动规划与手写图的竞态、work-graph 模板库缺内容型 交付物骨架、验收节点任务描述范围溢出、两个规划 agent(orggraph-planning/workgraph-planning) 的路径口径写错、以及上述 R-19 索引缺口。最终产出与原生 FDE 对比:内容骨架可迁移、质量不 打折,但可靠性差距悬殊。 补充说明:system/agents/{ceo,innovator-evolver,master,org-innovator}/{agent,soul}.md 是 本会话开始前已存在的 dream 自编辑改动,随本次提交一并收进去,不属于本次改动范围。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
排查「前端刷新不及时/没有打字机效果」发现现状已是 SSE,不需要换 WebSocket, 真正缺的是三件独立的事: - 打字机平滑:后端把 ACP chunk 按 10 字符切片再发 SSE,前端用定时器队列 (agentChatEvents.js 的 createTypewriterQueue)匀速吐出,抹平网络突发。 - 打断并发送:执行中解锁输入框,新增 ⤴ 按钮与 ⏹ Stop 视觉区分;stop 端点 改为轮询确认 agentChatLocks 真正释放(3 秒预算)再返回 cleaned 字段, 前端据此决定直接发送还是走"强制发送"兜底。顺手修了一个真实并发漏洞: 同一 agentId + 同一 convId 的并发请求过去完全没有闸门,只是一直靠前端 textarea 的 disabled 属性侥幸没被触发。 - 串台加固:把 handleEvent 分发逻辑抽成不依赖组件实例的纯函数 (agentChatEvents.js),补上 9b1c3f1 那条不变式的回归测试。 已用真实 Claude CLI 会话(非 mock)在浏览器里验证打字机效果、打断并发送 全流程、以及纯 Stop 无回归。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01HDtmdnE6pay9BhwZDAKK6M
-
按 39 号设计文档落地 ceo 常驻监督:company.js 的 goals/tasks 端点 放行内部令牌自环调用,POST /tasks 支持 draft 模式(agent 自主提任务 不再立刻烧预算),ceo 补雇进公司创建流程;task-settle 新增事件驱动 唤醒 + 30 分钟兜底轮询;graph-engine 的回退熔断收敛时顺手回写一条 draft task,形成"卡住 → 自动/ceo 判断 → 重新规划"闭环。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01BwG4b7Nq1NLR9eeE3M9Us9
-
- system/agents/deep-research/: 新 Agent 本体(agent.md/prompt.md/soul.md/config.json) 及 train/hunt 调研结论(knowhow_v1 + sources_v1.json,含 sha256 信源母本) - h3-video-prompt: train/digest、train/hunt、train/evolve 的 v2/v3/v4 全套训练产物, SKILL 升级 v0.5.0(习语甲/乙分轨 + prompt/block/clarify 三轨计分) - org-innovator: docs/ SKILL 模板库与 soul.md 更新(外网访问 SOP R1-R5、lark-cli 能力) - master / innovator-digest / innovator-evolver / innovator-hunt: 本体文件更新 - packages/agent-core/base/common/tools-base.md: 收录 lark-cli 入口与「搜得到≠读得到」边界 - bin/lark-cli: 飞书 CLI 入口脚本(wrapper) - .gitignore: 排除 .pnpm-store/、.env.bak*(防密钥入库)、train/hunt/sources_raw/ 与 train/evolve/_v*_artifacts/(中间产物沿用既有裁决,只留磁盘) Co-Authored-By: Claude <noreply@anthropic.com>
-
dream-distiller/dream-screener 定时任务的自动产出,全部落在 <!-- dream:begin/end --> 受管 区块内,区块外内容未改动。覆盖 agent-creator/coo/cto/innovator-digest/innovator-evolver/ innovator-hunt/org-innovator/orggraph-planning 共 8 个本体,纯新增无删改。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
独立试验节点(parent_id: null,不接入任何真实公司/图,不碰生产 system/agents/unit-tester/), 四段式训练全部完成:真实基线 32.2 分(不合格)→ Hunt 挖出 7 条现状缺口 → Digest 建出 7 维度 benchmark_v1.md → Evolve 产出可执行操作手册 SKILL.md,独立样本压力测试拿到 94.4 分, 超过 80 分目标线。 追加一轮 Round 2 复测(round2_verification.md):Evolve 阶段两处修正(D2 固定模板要求"不采信" 锚点词、D5(a) 可复现性核对)落到 SKILL.md 之后从未重新打分,94.4 分测的其实是被淘汰的 Round 1 草稿。复测拿两份样本验证:①对已用过的样本做假设性套用,98.0 分,确认 D2 修正干净有效,同时 发现 D5(a) 有 rubric 自身的结构性天花板("全新任务非中断恢复"场景最高只能到 4 档,与修正力度 无关);②对一份此前从未打过分的真实样本做非假设性打分,90.4 分(优秀档),过程中还纠正了上一轮 一处未经核实的事实错误(误判某样本缺配套 _research.md/_plan.md,实际齐全)。 按用户明确要求本轮不做 Deploy:config.json 的 status 仍是 training、benchmark_score 仍是 null, 生产 system/agents/unit-tester/ 未被触碰,训练产物等待人工审查后决定是否合并。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
三者是 heartbeat-service 里唯一 enabled=true 的系统级 Agent 本体, 不管有没有公司雇佣都会挂心跳定时器(每 5/10 分钟打一次),跟公司数据无关。 当前没有实际公司在运作,先关掉避免空转。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
- Hunt→Digest→Evolve→Deploy 全流程,8场景测试均分98.71/最低97,status enabled - 飞书标杆文档访问受阻(登录墙),改用 MiniMax 官方 GitHub 仓库原文替代,如实记录在 train/fde_report.md Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
coder/config.json 长期停在 status:training,从没真正毕业,也从没做过 FDE 训练——是这次 "哪些 agent 该训"排序里排第一的节点,因为它是实际写代码、决定最终产品质量天花板的执行节点。 独立试验 coder-methodology-trial 训练产出(89.6/100,及格线65/目标线80)已手工合并进 agent.md 四段式生命周期:RESEARCH 阶段新增两张必建清单(接口契约锚点表 + SDD明确禁止清单); EXECUTE 阶段新增"三支自问"机械动作(踩中禁止项/SDD未提及/引入新标识符,各自怎么处理写死); VERIFY 阶段新增信号词检查(判定依据出现"代码走查/规则推导"等字样即不算数,必须真跑命令)+ 可重放性三要素检查 + 一页纸自检表。全部配了真实历史反例:p-cgfdcr 的 currentScrollTarget 状态变量偏离 SDD 却未留痕、p-v82tpc 独立验证时新发现的 header→nav 语义标签改动未标注。 诚实说明(agent.md 开头 + soul.md 原则7/8 都写了,别在别处混说):89.6 是这套操作手册的 文本质量分,训练全程没有真的把 SKILL.md 喂给一次真实 coder 会话跑任务再打分,回答的是 "手册写得够不够具体",不回答"照做真的能拿多少分"——这是训练报告自己指出的方法论局限, 不是自谦,照抄保留,避免后续把这个数字误用成"已验证的执行可靠性分"。 coder-methodology-trial 完整训练材料(agent.md/soul.md/SKILL.md/train/{hunt,digest,evolve}) 随本次一并提交。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
org-planner/agent.md 原来固定要求 workgraph-planning 只能画 brd/prd/sdd/benchmark/ validator 五节点链,不管任务是不是需要外部信息支撑。现在把"必须交出 brd/prd/sdd/ acceptance 四份"重新定义为交给 org-coder 的固定契约,但产出这四份东西的中间步骤不再 写死——按信号词(调研/竞品分析/市场行情 → web-search/deep-research 类节点;视频/广告 投放素材 → video-search 类节点;对接XX API/拉取实时数据 → api-integration 类节点) 明确授权在 brd 之前插入调研类节点,产出喂给 brd/prd/sdd。 顺手删掉了一段从未被真正执行过的死代码:文件里原有"四段式生命周期 RESEARCH→PLAN→ EXECUTE→VERIFY / task transition 命令行流转"的执行脚本,是把 org-planner 当成会被 直接派单执行的单体 agent 来写的,跟当前"org 层节点永远是 nodeKind:'subgraph',实际 由 workgraph-planning 规划子图执行"的架构对不上,从来没跑过。 真实测试验证:给一个"调研竞品YouTube广告 + 对接定价API拉实时数据 + 产出竞争分析报告" 的任务,workgraph-planning 真的规划出了 7 节点图(比标准 5 节点多两个调研节点), 其中 pricing-api-integrator 是全新按 hired_from_base 分支现场造的本体,经 agent-creator + FDE 训练流水线异步补全(96.00分),随本次一并提交。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
code-planner:status training→enabled,benchmark_score 96.35(行业基准82+14.35), 六节输出模板与53判据写作规则落进 SKILL.md。 sdd-planning:benchmark_score 89.3,新增两处「深挖」小节——接口契约的可独立复现性 四类雷区(自证式验收/结论句代替实测值/风格描述无上限/占位内容也能通过)+ data_shapes 字段约束与业务术语映射规则,随附完整 hunt/digest/evolve 训练材料。 goal-benchmark:补一条自查项——pass_threshold 落档不能和 rubric 里"不达标"的文字 描述用同一个分数区间,否则及格线形同虚设(2026-08-23 抽查 3/5 样本命中此模式)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
独立试验节点,不接入任何真实公司/图。真实 Hunt→Digest→Evolve 训练"planner.json 五节点该不该裁"这类元规划判据,2 轮收敛 100/100(真实基线 34 分不合格,同义反复式 判据 15 分反而更低)。训练自验证时发现两处真实结构漏洞(裁 brd 遗留失效 backward 边、 S5 复用门在当前仓库数据下无法触发),均已如实记录并给出兜底方案。判定表已手工套进 生产 workgraph-planning/agent.md(见上一条提交)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
在 agent.md Step 4 加了具体的裁剪判据(对应训练出的 SKILL.md:S1-S5 五个复杂度信号 + G2/G3 两道门 + planner.json 五节点逐个判定表),替换掉之前只有"你可以裁剪"这句孤立授权 (真实回归验证过只打 34/100,不合格)。同时补上训练自验证时发现的真实结构漏洞——裁掉 brd 会留下一条指向不存在节点的失效 backward 边,连带修正清单写进了裁剪判据里。 Step 5 的规划记录模板新增"1.5 复杂度信号取值"一节,为 G3 复用门积累历史数据(当前 仓库还没有任何历史记录标注过信号取值,这道门会一直走 fallback,直到开始积累)。 soul.md 加一条对应工作原则:裁剪判据要具体,同义反复式判据("任务简单就裁")训练 验证过反而只有 15 分,比不判断还糟。 1411/1414 测试通过(3 个失败是其他自主进程遗留、与本次改动无关的既有问题)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
两个独立的小修复,都是这次 e2e 回归 + 用户讨论"workgraph-planning 该怎么训练"时发现的: 1. workgraph-plan-<taskId>.md 撞名:一个任务里 org-planner/org-coder/org-validator 各自调 workgraph-planning 一次、各自的规划记录却共用同一个文件名,落在同一个项目根下, 后写的原样覆盖先写的——真实撞见过(org-planner 当时的规划记录被 org-validator 覆盖, 事后一个字都找不回来)。改成 workgraph-plan-<taskId>-<宿主orgNode节点名>.md。 2. subgraph 节点结算 → workgraph-planning 自己的 memory.md 桥接:阶段一的 recordNodeOutcomeMemory 明确排除了 subgraph 节点(那是给 agent_call 记的),导致 workgraph-planning 每次规划出的图最终跑得好不好,完全没有可积累的历史——这正是它 "允许裁剪却没有具体判据"这个问题一直无法通过真实反馈自我改进的原因之一。新增 recordWorkgraphPlanningMemory,在 subgraph 节点结算时把结果记进 workgraph-planning (全局唯一规划本体,不是宿主 org node 自己的身份)的 memory.md,只在真实规划 (planWorkGraph===defaultPlanWorkGraph)时记,避免测试夹具污染真实目录。 新增 3 条回归测试,graph-engine 相关测试文件全绿。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
在 prd-planning/agent.md 加了「描述性语言扫描」+「内容深度下限」+「业务度量翻译」三段 具体操作(对应 36 号文档训练出的 SKILL.md Step 4/5),soul.md 加一条对应工作原则。 用同一个 e2e-demo 首页任务重新跑了一次端到端回归验证:新 PRD 把"大图/简洁大气"等形容词 逐条翻译成量化规则,最终产出的 index.html/style.css 精确对应这些数值(视觉元素 min-height:320px、区块间距 96px/56px 等),文案不再卡在"非空"这条线——训练效果在 真实任务里得到验证。 回归过程中发现一个新的、独立于本次改动的引擎缺陷:org-coder-test 被反向打回后产出 「建议重跑 org-coder-validator」的诊断文件,引擎把诊断文件里的 infra_flake 标记当成 了这个节点自己的执行结果,导致原地重跑但从不路由到诊断建议的目标节点,陷入没有熔断线 的确定性死循环。记进 30 号文档,留待后续修复。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
新建独立试验节点 prd-methodology-trial,走真实 Hunt→Digest→Evolve 训练 PRD 撰写方法论: 2 轮 Small Loop 提前收敛(96/97 分,真实基线 50 分),用三个真实历史项目反推验证方法论 有效,Deploy 范围限定在该独立节点,未触碰生产 prd-planning。结论:FDE 对方法论类角色 确实管用,但收敛速度/验收严谨度依赖任务书里显式写明的自纠正要求,非免人工黑盒。 过程中连带修复同一个 2026-08-16 改名批次(innovator→org-innovator 等)遗留的 5 处死链: company.js 两处硬编码调用、CompanyDashboard.vue「重新训练」按钮,以及四个本体各自 config.json 内部 id 字段从未随目录改名同步更新,导致 /api/agent/list 展示层用假 id 显示成死卡片。顺手修了 AgentScaffold 默认 tools.md 模板一处裸相对路径缺陷(对应 agent-md-refs.test.js 里已登记多时的已知缺陷)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
用户问"当前 company 用到的所有 agent 骨架是不是都完整",顺手全量核对了一遍 e2e-demo 实际会用到的 18 个本体(org 层三个 + 三张 work graph 骨架的全部节点 + 四个元规划本体),揪出两处: - unit-tester:这次真实回归测试撞见过的那个空骨架(32/34/35 号文档记录的样本), agent.md/soul.md/SKILL.md 三份全是没填充过的 _base 原始内容。照 coder 的规格 (同一张 executor.json 骨架的实现节点)写了一份对应的自测节点定义——四段式细则、 网页/代码两类产物的检查手段选择(网页类点名用 scripts/visual-acceptance-check.mjs, 不许用正则解析文本冒充浏览器检查)、数据契约、硬规矩。 - org-coder:完全独立于本次回归测试撞见的一处更早的缺口——soul.md 从 8/18 创建 agent.md 起就没写过,这个本体已经在多个真实任务里跑过。照它自己 agent.md 里 "实现节点"这个身份定位、比着 coder/soul.md 的规格补上,顺带记了一句它是跨公司 共享本体(P1 虚拟引用),别把单个公司的业务细节写进去。 agentLocator.missingBodyDefinition() 核对过,18 个本体全部通过。全量单测 1012/1012 通过(本身不涉及后端逻辑改动,只是确认没有连带影响)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
e2e-demo 公司真实回归任务(T-mt2r6fz0-125b,31/33 号文档验证用)跑 org-coder 支线时新招的两个本体,system/agents/ 是全部 agent 本体的唯一目录,理应入库。 coder/agent.md 正常填充过(角色专属内容)。 ⚠️ unit-tester/agent.md 仍是未填充的 _base 原始骨架(带 LEMONBOSS_BASE_SKELETON 哨兵标记)——这正是 32/34/35 号文档反复分析的"招聘装配没填充完"问题的真实样本, 如实提交,不假装它是完整的。它已经在真实图执行里跑过一整条任务(见 34 号文档 §五),提案 A(35 号文档,commit bab675c)落地后,这类未填充本体会在图执行前 被 body_not_ready 闸门拦下,不会再静默拿空提示词跑真实调用。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
35 号文档剩下的三个提案,彼此直接相关(C 产出 D 消费的证据,B 展示 D 算出的结果), 一次做完。 提案 D(goal-contract.js 引擎级证据闸门): `runBenchmark` 新增 evidence 检测——`evidence_hint` 命中"浏览器/视口/开发者工具/ console/network/截图"类关键词的维度,必须在 evidence.<dim> 有真实字符串支撑, 否则该维度判不过(哪怕分数达标)。证据来源两处都认:`--target` 文件自带的 `evidence.<dim>`,或同目录姊妹判词文件 `attempt-<n>.json` 的 `dimensions[].evidence` ——后者是 benchmark-validator/agent.md 早就在教的既有写法,不用 agent 多写一份。 新增 `dimensions[].evidence_required` 字段随判决落盘。6 条新单测。 提案 C(可复用视觉验收工具): 新增 scripts/visual-acceptance-check.mjs,四个子命令(overflow/style/console/ contrast),封装最常见的几类真实浏览器检查(Playwright),agent 通过 bash 直接 调用,不用每次自己临时想办法(真实撞见过两个极端:一次真写了 Playwright 认真测, 一次只写了正则解析文本)。配一份不进 vitest 快速循环的独立冒烟脚本(起真 Chromium,几秒量级)。benchmark-validator/agent.md Step 2 加了引用说明。 提案 B(控制台证据可见性): GET /api/graph-runs/:id 新增 benchmarkVerdicts 字段(只读 goal-contract.js 已落盘 的判决,不重新计算)。NodeDetailPanel 概览 tab 新增"验收证据"小节:逐维度显示 分数 + 是否有证据支撑,evidence_required 且缺证据的标 ⚠️。纯展示,不改判定逻辑。 2 条新单测。 全量单测 1012/1012 通过;控制台功能用 Chrome 实测过(截图确认"验收证据"小节正确 渲染)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
org-coder-validator 在真实回归任务里被 missing_required_input 反复误判 blocked: executor.json/executor-fanout.json 的 test/integration→validator 边声明 produces:["log"](required 默认 true),但 test 类节点从不写出能被 indexNodeOutputs 认作 kind=log 的文件(coder.log 实际属于 impl,test 自己的 _plan.md/_research.md 认不出 kind 也没有一对一无歧义可猜),这个 kind 因此永远不会被索引到, requiredInputsMissing 每次都判缺失——不是时序问题,是结构性、每次重试都复现的硬伤。 改成 { kind: 'log', required: false },对齐 validator.json 已有的写法(它的 needs:artifact 早就标了 required:false)。真正必需的 needs:artifact 不变, 仍受硬闸门保护。 中途走了一段弯路:最初以为该改 inboundContracts() 按 role 过滤只留 needs, 改完单测炸了 9 个用例——大多数边只声明 produces(无配对 needs),这条链路 正是 T-mt25ecbd 产出闸门依赖的数据源,按 role 过滤会静默削弱那次修复。 已撤回(work-graph-db.js 这次只加注释,没有逻辑改动),细节记在 33 号文档。 新增回归用例 graph-files-index.test.js ⑪:produces required:false 且该 kind 从未被索引到时不拦下游成功,同边 needs:artifact(required:true) 依旧受保护。 全量单测 998/998 通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
## 起因 e2e-demo 真实任务卡住:org-planner-sdd 自己判 input_underspecified 并点名 org-planner-prd,但这张图里 sdd 没有任何 fail 出边——精确匹配、 兜底边两条路都接不住,节点直接 blocked,靠人工点了「重试」才续上。 ## 根因 fail-fallback-edge 校验(27-P3/P4 §三.7 第五项)只在节点已经画了别的 fail 边时才检查兜底边齐不齐。一条 fail 边都没有的节点完全不受约束—— workgraph-planning/agent.md 原文明说这是「合法设计」。但系统里所有本体 共用 _base 的四段式协议,VERIFY 阶段任何 agent_call 节点都可能自判 失败,不止专职判词节点。四个骨架模板审计后发现 6 个中间节点存在同一个 漏洞(sdd 只是撞上的那一个)。 ## 决策 除图的唯一入口节点外,每个节点必须留一条兜底边(判据是 forward 入度, 不是节点名字模式)。org 层暂不动——node 全是 subgraph 类型,失败来源 机制不同,且套用同一条规则会让三个 org 模板立刻不合法,属于 27-p3b 「验收9」还没收口的链路,留给那边一起做。 中途发现无条件收紧会炸 46 个用例/13 个文件(createWorkGraph 被大量 测试当成建最小图的通用工具)。改法是加 strict 开关,默认关闭(行为 不变),只在 workgraph-planning 真实提交图落库的那个唯一入口 (createWorkGraphSafely)打开。 ## 改动 - work-graph-db.js / graph-engine.js:新规则 + strict 开关 - planner.json / executor-fanout.json:补 6 条兜底边 - workgraph-planning/agent.md:约束三等四处措辞同步 - 新增单测:strict 模式 7 例 + 真实链路回归用例(真实引擎代码+真实 DB+只换最外层 CLI 子进程,复现 sdd 自判失败后引擎自动路由到 prd, 全程零 retryNode 调用)——比重跑一次真实任务更严格,可回归、进 CI 978/978 单测通过。需求与决策记录见 docs/todo/system-design/31-work-graph-fail-fallback-coverage.md。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
## 两个本体(都过得了毕业闸门) · dream-distiller —— 把一批原始记录提炼成可复用经验,交 ```json 数组 {title, body, sources};没有值得留的就交 []。 · dream-screener —— 逐条判「这条能不能给别家公司看」,交 {shareable, reason}。 **决策 A 的独立性写在两处,缺一不可**: · 代码层:判定**一条一次调用**,提示词里只放 title + body,**不放原料**; · 本体层:dream-screener/agent.md 明写「你看不到原料,也看不到是哪家公司 —— 这是故意的」。守卫里有一条专门断言这句话在 —— 否则下一个人会顺手把原料 塞进提示词「让它判得更准」,而那恰好把独立性拆掉了。 soul.md 也承担判据的一半:screener 的人格写的是「你是一道闸门,不是审稿人。 审稿人的本能是帮它改好,闸门的本能是不确定就不放」。 ## 两处失效方向都是硬的 · 提炼取不出 JSON → **抛**,不是静默返回空。「产出格式坏了」和「没提炼出东西」 是两件事,混为一谈会让前者以后者的形式永远藏下去 —— 每天显示「今天没经验可沉淀」,而真相是解析一直在失败。 · 判定解析不了 / shareable 不是布尔(比如给了字符串 "true")→ 判否, 并把原文片段带进 reason,让人看得出是「判否」还是「判炸」。 ## 纠了自己两次 ① 测试第一版把解析与失效分支**在测试里重抄了一遍**再断言 —— 那是在验一份复制品, 代码改了它照样绿。改成加一条 setDreamAgentCaller 缝,只换掉「真起 CLI」那一层, 解析、判空、失效方向全走真代码。 ② agent.md 的相对引用按 **cwd 深度 3**({aid}/{cid}/{taskId}/)解析,不是按文件 自身位置 —— 仓库根是 ../../../../../。我按文件位置写了 ../../../, agent-md-refs.test.js 当场判红。**守卫替我抓的,不是我自己发现的。** ## 还没做的,写进文档 §5.4(别当成 dream 上线了) · 定时挂载没做(决策 C 说每日一次):现在只有 dreamOnce(agentId) 这个可调用单元, 没挂调度、没 REST 入口。 · 还没写定义文件:只写本体根的 memory/experience.md(纯经验积累,删掉无副作用)。 三个 git 跟踪的定义留给下一步,闸门与 definitionWritability() 已就位, 缺的是「往里写什么、写成什么形状」那半边设计。 · **没有一次真 CLI 验收**:CI 里换掉的是 callDreamAgent 那一层,验的是解析与失效方向, 不是模型写得好不好。两个本体的提示词**至今没有被任何模型读过** —— 这正是 P3B W4 记过的形态(mock 从不读提示词)。 · 决策 D(提炼质量怎么评)仍未定;可追溯是它的便宜起步,不是替代品。 全量:144 文件 / 1323 测试全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> -
## ① system/tasklog/ 改名保留(§十二.5) 派单存储统一进 tasks 表后,旧目录改名为 system/tasklog.bak-unify/ 而不是 直接删 —— 跑顺一个版本再清。回填脚本改成**两处都认**(先原位置再备份位置, 顺序不能反:万一有人从备份恢复出一份新的 tasklog,那份才是要回填的)。 ## ② agent 提示词里的端口 3000 → 3010 packages/agent-core/base/ 下那几份是**所有 agent 的工具说明**,印着 curl http://localhost:3000/... 而实际端口是 3010。agent 照着打拿到的是 连接被拒、不是「端口错了」,它多半会去猜别的原因。 这不是假想:批 5 回填出来的历史派单正文里,有人手写了「(端口 3010, 不是 3000)」在纠正它 —— 靠人肉在每条任务书里打补丁。 守卫 agent-docs-port.test.js:扫 base 模板与 agent 本体,禁 localhost:3000。 判据刻意宽松(不校验「必须等于 config.port」—— 端口可被 PORT 覆盖,写死会在 部署环境误报)。带「样本非空」前置断言。第一版扫出 5 条误报,全是某 agent 目录下 Python venv 里 playwright 的 ThirdPartyNotices —— 那是第三方文件不是 提示词,已把 venv/site-packages/workspace/conversations/train 一并跳过。 ## ③ 边界守卫不再把并行会话的改动算到 agent 头上(§15.5 第 1 条) 守卫的前提是「窗口内新增的仓库改动 = 这个节点写的」。多会话共用 worktree 时 这个前提是假的 —— git status 的差集里没有「谁写的」这一维。实测已发生: 批 3 的开发改动把一条 run 判成 boundary_escape 卡住。 可检测的信号:节点**开跑那一刻**仓库就已经有源码目录的未提交改动 → 有人正在 这个 worktree 上开发 → 窗口内新增的源码改动无法归属 → **降级为只记证据、 不判罚**(与既有的 unattributable 桶同一语义),而不是关掉守卫:证据照留, 人一眼看得出「这次没判罚,因为当时仓库是脏的」。 BOUNDARY_GUARD=strict 强制判罚(CI / 干净环境),=record 一律只记。 守卫 8 例,含关键对照:仓库脏时不判、干净时同样一处越界仍判 fail —— 守卫没被削弱,只是不再乱扣帽子。 ## ④ TaskTimeline 的标签不再撒谎 conversationCount 在批 5 之后只会是 0/1(「有没有起过执行会话」),而界面 写的是 "Convs: N" —— 读的人会以为这条任务只有一次对话。改成有/无的表达。 agents 的语义变化在注释里说明。 注:innovator-hunt/todo.md 与 reddit-scraper/todo.md 里的端口也改了, 但它们是 gitignored 的运行态文件,不入库。 全量:134 文件 / 1268 测试全绿,web:build 通过。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
goal 从「人写一句话」变成「agent 拆成一张 task DAG、人确认后下达」, 收敛时由 org-validator 在 goal 层再验一次。 ## 交付 - task-planning 本体(毕业判据实测通过:agent.md + soul.md 一次写完、 不带 _base 哨兵、路径按 cwd 深度 3 实算核对) - 拆分链路:3 轮 errors 原样回喂 → 不过就降级成 1 条同描述 task, goal 绝不卡在 planning;token 记 goals.planning_tokens - goal 级 org-validator 验收:≥2 条 task 全 completed 才调,单 task 跳过, 有 failed 直接 failed 不调(省一次真花钱的调用) - 控制台四栏 + GoalTaskPane 两级树 + 两步表单(拆分中给逃生口) - 中断恢复:启动时补跑验收与汇报 ## 三条跨进程竞态,全部用真探针实跑复现后才判定修好 1. runGoalSplit 无条件把 goal 写回 draft,抹掉逃生口刚下达的 active —— 而触发它的正是表单自己推荐的那个逃生口。后果是一个正在烧钱的 goal 显示成「草稿」,且从此永不收敛(OKR 不写、上级不唤醒、无日志) 2. CAS 把最终态提前写进库,验收窗口内重启即丢,且 verdict=NULL 与 「单 task 合法跳过」形态相同,查不出来 → 占位判词 + 启动重推 3. 认领语句 SET verdict=RESUMING WHERE verdict IN (PENDING, RESUMING) —— 写进去的值就在 WHERE 里,changes 恒为 1。而函数注释白纸黑字 写着「认领写的是另一个占位值」。注释是对的,代码没兑现。 实测:org-validator 调 2 次 / OKR 写 2 条 / token 双记 → claim 带唯一 token + 时间戳租约,回写条件更新决胜,主路径同闸门 ## 与设计正文的偏离(已记进文档 §十四) 拆分后 goal 落 draft 而非 active(active 的语义已被 markGoalDispatched 钉死为「已下达」);mode 三级继承对显式 tasks[] 同样生效;占位判词不出 API;新增 planning_error / reported_at 两列,后者迁移带回填(否则升级后 第一次启动会把历史终态 goal 全部重报一遍)。 ## 过程 四轮 26 个 agent,复核报出 22 条缺陷,其中 6 条是修复自己引入的。 第四轮修完挂了 3 条测试,全是测试在钉住缺陷本身 —— 其中一条的注释 写着「模拟进程死后重启」,构造的却是新鲜占位值:注释描述 A 场景、 代码构造 B 场景、断言按 A 场景写。 全量:118 文件 / 1112 测试全绿,web:build 通过。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
-
sessions 里存的是**常驻**的 claude CLI 子进程(stream-json 模式,不是一次性的 `claude -p`),此前只有四条回收路径:协议 error / 子进程 disconnected / 手动删对话 / 手动 stop —— 「正常跑完的对话」不在其中。 而两路心跳都用一次性 convId 打进 /api/agent/:id/chat: - heartbeat-service:`heartbeat-${Date.now()}`,cto / coo 各 5 分钟一次 - company-heartbeat-service:_sendAgentChat 的五个调用点(CEO 巡检 / Pipeline 步骤 / 日程 / 告警 / 日报)convId 也全是一次性的,且无差别带 isHeartbeat:true 于是每次心跳新起一个进程且永不释放。实测单次运行 2h43m 攒到 82 个进程 / 17.5 GB RSS。 改法: - 心跳会话跑完立刻 closeSession(一次性 convId,会话复用对它零价值) - 普通对话上空闲 TTL(默认 30 分钟,AGENT_SESSION_IDLE_MS 可覆盖),复用 engine/idle-timer - 计时器只在「没有在途请求」的间隙走:getOrCreateProtocol 命中复用时 cancel,请求结束时 重新上弦。所以再长的单次生成也不会被 TTL 打断,比在流式回调里 touch() 少一个调用点 - 删对话 / stop 两处手抄的 disconnect+delete 收敛到 closeSession,否则它们不停表 守卫:agent-chat-session-reclaim.test.js 用现成的 /chat/:convId/stop 当黑盒探针 (查得到会话才返回 success:true),不为测试加导出口。对 HEAD 版本跑过:2 红 1 绿 —— 两条回收断言修前失败,「普通对话保留会话」修前修后都绿,证明复用能力没被顺手砍掉。 线上验证:重启后第一轮心跳 2 触发 / 2 回收,server 名下 claude 子进程数 0。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> -
system/templates/ 已随 28 号改造整体并入 system/agents/,目录在磁盘和 git 里都已不存在。 但引用还散在各处,其中几处是 agent 运行时真会照着读写的: 本体提示词(读不到就静默降级,不报错) workgraph-planning/agent.md system/templates/base/ ×3、模板库路径 ×1 orggraph-planning/agent.md 同上 ×1 orggraph-planning/tools.md ×1 org-innovator/agent.md 四条产出落点 system/templates/weibo-scraper/train/* skill 代码里的硬编码目标 evolver-youtube-crawler 的 refactor.js / mock_setup.js / evolve.js 共 4 处 innovator-hunt/collect_seed.js —— 这处是真 bug 且已发作过: 写的是裸相对路径 'system/templates/…',相对 cwd 解析,于是在 agent 自己目录下 造出一棵野生嵌套树 system/agents/innovator-hunt/system/templates/… 现在改成由 __dirname 推导,不再依赖 cwd(cwd 已经是深度 3 的任务态目录) 图模板契约(work-graph-templates / org-graph-templates 的 README) CI 防线的三条规则写的还是「在 system/templates/ 下必须有目录」「在 system/templates/_registry.json 里必须有条目」,与实际执行的检查已经对不上 DevLoop PRD(13 份 HTML + 重新生成的 52 份 _spec + build-manifest + search-index) 写的是 system/templates/devloop-pm.md(扁平 .md)。根和形状都错: loop-controller.js:166 实际读的是 system/agents/{agentName}/prompt.md。 按真实形状改,然后跑 spec:extract / extract-manifest / build-search-index 重新生成。 顺带订正两处早于本次改造就已过期的内容: - 「避开 6 个命名冲突 id」这条约束列的 digester / evolver / hunter / innovator 四个 id 根本不存在(早已改名),而它的理由(两个目录下各有一份、内容不同步) 也已随合并消失。约束保留(元 agent 本来就不该进执行流),理由与清单按实际本体重写。 - orggraph-planning/agent.md 里「真相源是 company.json.agents[]」—— 28 号起真相源是 company_agents 表,company.json.agents[] 仅作兼容保留。 刻意不动的三类(改了是净损失): 历史说明 server/ 下解释「原来指向 X、批次 1 并进了 Y」的注释、docs/done/、tasks/ 完成证明 server/tests/ 里断言该目录已不存在的守卫 运行态记录 未跟踪的 workspace/ conversations/ 与 train/ 下的历次训练报告 新增 server/tests/unit/no-stale-templates-path.test.js 守住活定义这一档: 扫 system/ 与 fixtures/ 下被 git 跟踪的文件(跟踪=人工维护的定义, 未跟踪=运行态产物),零例外。带「样本非空」前置断言防 git 失灵时退化成永远通过。 改坏一处实测能精确点名到文件行号。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>