-
- 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>
-
sweepStuckActiveGoals 候选查询多加了 archived_at IS NULL,把「goal 被归档但 status 从未跟着收口成终态」这类形状(G-mt1qwgt5-6b77:唯一 task cancelled+archived 时 goal 的 archived_at 被打上同一时刻,status 却留在 active)永久排除在扫描之外。去掉该过滤: settleGoalIfAllTasksDone 对空 task 列表/存在非终态 task 都是 no-op,不会误收口合法归档 但确实没收敛的 goal。同时手动收口了 e2e-demo 库里唯一命中该形态的 G-mt1qwgt5-6b77。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
settleGoalIfAllTasksDone 用 listGoalTasks 默认口径(includeArchived: false)取 task 列表,task 若同时被 cancelled+archived 会被过滤掉, tasks.length 提前归零直接 return null,goal 永远收不了口——僵尸扫描等 于没扫到。实证:G-mt0a6upq-a98e / G-mt0a6upq-52ee 两条 goal 卡在 active 超 17 小时未被收口,两条 task 均已 cancelled+archived。 改成 includeArchived: true 取全量后再按语义过滤:draft 任务归档(人删 掉的需求)继续不参与判定,但 cancelled/completed/failed 之后再归档 (结果已发生只是从界面收起)必须照样计入,否则会反过来破坏"归档掉的 草稿不参与判定"这条既有行为(拆分产出可删的验收用例钉住的就是这个)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
swept=0 时原来完全不打日志,导致"扫描确实跑过但没找到"和"扫描压根没 跑起来"在日志里长一个样——这正是本次要修的那类静默失败。改成不管 swept 是否为 0 都打一行,运维靠这行就能确认扫描器真正跑起来了。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
resumePendingGoalValidations 只补「收敛钩子跑过、卡在验收/汇报半路」的情形; 若钩子压根没被触发过(进程重启/异常吞掉/事件丢失),task 早到终态但 goal 永远停在 active,只能靠人工 OKR 巡检发现(e2e-demo 公司 G-mt2r62ia-73af 卡 了 48 小时)。新增 sweepStuckActiveGoals 开机全量扫描一次,并启动 5 分钟 周期性 startZombieGoalSweeper 兜底,把发现窗口从「天」压到「分钟」。 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>
-
run_b962ea87f58f 卡在 wallclock_ms 耗尽的锚点未结清问题上,需要人工追加预算 才能继续。extendBudget 只增不减、只加到已配额的维度上,追加时顺带结清卡死的 墙钟锚点(否则 startRunSync 一启动就把挂起时长记进新预算里)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
30 号文档记录的真实事故:org-coder-test 被上游 missing_required_input 打回后, 产出的是「建议重跑 org-coder-validator」的诊断文件而不是正常测试结果,引擎把诊断文件里 的 infra_flake 标记当成了这个节点自己的执行结果——infra_flake 原地重跑故意不烧 attempt/backward_count("这不是节点的错,不该烧它的重试额度"),代价是它是唯一没有 熔断线的失败路径,真撞上了一次每轮产出雷同、永不停止的死循环,眼看着把任务预算耗光。 新增 graph_run_nodes.infra_flake_count 列,只在 infra_flake 原地重跑时累加,真正发起 新一轮真实派发(bumpNodeAttempt)时清零;连续判 infra_flake 超过硬顶(3,与 LOOP_HARD_CAP_EDGE 同量级)就不再原地重跑,改判 blocked 交给人工——不猜该走哪条 fail 边(infra_flake 这个取值域通常没人给它连边)。新增回归测试锁死"永不恢复的 infra_flake 在硬顶后停止重跑"这条行为,graph-engine 相关 10 个测试文件 94/94 通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
招聘自动训练与「重新训练」按钮都是给 org-innovator 发消息、由它去执行训练, 所以对话记录一直落在 org-innovator 的会话库里,而不是被训练的那个 agent 自己—— conversationId 里带目标 agent 的名字只是命名巧合,容易让人在错的 agent 页面下找不到记录 (今天实测:手工模板训练页删除前产生的一条记录就复现过这个问题)。 - company.js /hire:训练 conversationId 提前算好并通过 res.json 带回给前端 (不再等 setTimeout 回调里才生成,那时响应早发完了) - CompanyDashboard.vue 重新训练按钮:发完请求立即 window.open 到正确的 /agent/org-innovator/{convId} - CompanyDashboard.vue 招聘弹窗:雇佣触发自动训练时,弹窗给出可复制的正确链接 (不自动开新标签页——这条训练要等 agent-creator 先写完定义,立刻打开大概率是空的) 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>
-
24h 的"取消超时"曾是刻意为之,但代价是子进程已产出终态判词、仅 session/result 消息迟迟不来时,sendPrompt() 的 promise 没有任何兜底会挂到 24h 耗尽 (T-mt5esage:T-mt5d3mi9-57cf 卡 50+ 分钟才被 COO 心跳巡检发现,且已连续 3 次)。 收紧到与 process-guard.js FRESH_DEFAULTS.maxMs(10min) 同一量级:对话态 8min (无工具执行理应持续有 token 流),工具执行态 15min(跑测试/构建允许更长静默)。 补测试复现"tool_use 开始后无输出"场景,验证 15min 兜底生效而非 24h。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
POST /:cid/tasks -> enqueueTaskRun 入队时从未写过 assignee_agent_id, COO 心跳巡检靠 tasks.assignee_agent_id(the "to" field) 判断任务有没有 人接手,读到永远的 NULL 就把正常跑图的任务误报成孤儿任务 (本周已发生两次:T-mt25asz4、T-mt5d3mi9-57cf)。 - enqueueTaskRun 入队时补写占位哨兵 'org-graph'(GRAPH_TAKEOVER_ASSIGNEE) - settleTaskFromRun 收敛时用 COALESCE 兜底,只在仍为空时补,不覆盖 派单式任务(agent-chat dispatch 流程)已经写好的真实 assignee - TASK_PATCH_COLUMNS 补上 assigneeAgentId,否则 updateTask 写不进这列 T-mt5dkvjm Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
侧栏 170px 太窄看不全 agent 名字,改成 260px 并把名字从省略号截断 改成允许换行;顶部加搜索框按 name/id 过滤列表,点击过滤结果复用 已有的 switchAgent() 跳转逻辑,不用额外写定位/滚动代码。 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>
-
system/templates/ 已在 28 号文档的合并里并入 system/agents/,「模板」作为独立 数据概念已经消失;确认后手工 CRUD 页面(创建/改名/删除骨架、触发生成与训练、 传 skill 文件、provision)也已经没人用,一并下线: - 前端:删 AppNav「Templates」菜单项、/templates 路由、TemplateAgents.vue - 后端:company.js 删掉只服务于该页面的写接口(PATCH/DELETE/POST /templates、 generate/train/skills-upload/provision/files 系列),保留 GET /templates (CompanyDashboard 招聘弹窗和 CLI `company templates` 命令仍依赖它列出可招角色) - CLI:bin/lemon.js 删 `template create`/`template train`(调用的是被删接口) - 修正两处过时注释(company-service.js / graph-service.js):不再声称 buildAgentDefinitionBrief 有两个调用方,/hire 是唯一派单点 - work-layer-body-paths.test.js 同步更新断言(2 处调用方 → 1 处) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
_scanConversationsDir 塞进 list 的字段是 conversationId,getTaskTimeline 过滤时却读 c.convId(始终 undefined),传进 _extractTaskId 后 convId.includes(...) 直接抛 TypeError,导致 /api/tasks/:id/timeline 每次调用都 500,前端任务详情页因此看不到任何日志。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
此前只有人类对话路径 agent-chat.js 会写 memory.md,图执行的验收反馈从不进 memory.md,Dream 天天扫全是空转。runClaimedNode 结算后新增 recordNodeOutcomeMemory 桥接点,只在真派发(isRealDispatch)且 systemAgentId 对应本体已雇佣(bodyDir 存在) 时才记一行 success/fail 摘要,避免测试夹具/假 executor 用例把假地址写进真实 system/agents/ 目录。memory-service.appendToMemoryMd 补 mkdirSync,因为这条新调用方 不像既有的 saveSessionSummary 那样先建过 memory/ 目录。 从原本混在墙钟看门狗改动里的工作区 diff 中拆出,两个特性互不相关。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
manual 模式没人点「下一步」、auto 驱动循环随进程重启丢失时,run_status='running' 的 run 再也不会触发 checkBudget,wallclock_ms 超时无人发现(实例:T-msx6toej 卡 135 小时才被人工揪出)。新增 sweepWallclockBudgets + 60s 兜底定时器 startWallclockWatchdog,复用既有 checkBudget/suspendRunTree 路径,接入点在 index.js DISABLE_BACKGROUND_AGENTS 早退之前。 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>
-
补记 commit fadb6fa 的实现记录:证据闸门选了"拦截"不是"降级"(降级等于还是采信 了分数,只是换个说法);goal-benchmark.json schema 完全不用改,evidence 早就是 benchmark-validator/agent.md 教的既有字段,只是从没被 goal-contract.js run 读过, 让 runBenchmark 多看一眼姊妹判词文件即可,没有发明新格式;C 的实现只更新了真正 写分数/证据的 benchmark-validator,不是最初以为的 coder/unit-tester。 §三推进顺序标注全部完成,并记录了样本量不足的遗留风险(只有一次真实回归验证过 证据闸门,关键词表覆盖度与拦截后的连带影响都还没有大量数据支撑)。 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>
-
补记 commit bab675c 的实现记录:按"第一版先做前者"落地(blocked 等人工, 装配自愈留后续),以及中途把测试套件炸穿 75 个用例又收窄回来的完整过程—— 根因是 missingBodyDefinition 查真实文件系统,测试夹具的假 systemAgentId 天然"缺失",改法是借用已有的 boundaryGuardApplicable 判据(只在真实执行器 下生效),不是发明新判据。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
runClaimedNode 派发真实调用之前,先查一次 agentLocator.missingBodyDefinition (systemAgentId)——此前这个判据只在招聘/建公司路径上被查过,图执行的核心路径 从没查过:本体因任何原因(装配没跑完、手工改坏、迁移遗留)仍是空骨架时,引擎 会原样把它当正常本体派发一次真实调用,静默产出一份没有角色指导支撑的结果 (真实样本见 34 号文档 §五:unit-tester 顶着 _base 骨架跑完了一整条真实任务)。 本体不完整时:新 fail_reason='body_not_ready'(与招聘路径的同名状态同义), 不扣预算(没有调用发生,"一次调用一定发生了"这条记账理由不成立)、不起边界 守卫、走正常的选边/兜底/熔断路径(不发明第二套重试语义)。 只在 agentExecutor === defaultAgentExecutor 时生效(与 boundaryGuardApplicable 同一判据)——第一版忘了这条,把全仓库几百个用假 systemAgentId + 注入假 executor 的用例全部判成 body_not_ready,跑单测直接炸穿 75 个用例;加上这条判据后收窄回来, 只在真会起 CLI 的路径上生效。 只查 agent_call 节点:subgraph 节点的 systemAgentId 不是即将被直接调用的本体, 它派发的是 workgraph-planning 去规划子图。 新增 graph-engine-body-not-ready.test.js(4 例)+ 更新 graph-engine-fail-reason.test.js 的取值域断言(五个→六个)。全量单测 1004/1004 通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
用户问"任务结果差是 agent 能力、架构、还是 graph workflow 问题",这份文档是 书面复盘:按发生顺序分四类——图/模板设计缺陷(31/33 号,已修)、招聘装配可靠性 bug(32 号已知问题的新样本)、一个复盘时新发现的架构缺口(missingBodyDefinition 完整性闸门只在招聘路径上调用,graph-engine.js 的执行核心路径 advanceOne 一次 都没查,本体不完整时没有第二道防线,静默拿空提示词跑真实 LLM)、agent 能力 (不是问题,两次订正过"没工具做不到"的误判,且有正面即兴发挥的例子)。 结论:主要是架构问题 + 一个具体可靠性 bug,不是模型能力问题。 提出两档改进方案供讨论: 低成本(建议直接做)——把完整性闸门接进图执行前置检查(提案 A)、 控制台展示验收证据可见性(提案 B,纯 UI 不改行为) 大改动(建议先讨论优先级)——标准化视觉验收工具(提案 C)、 引擎级证据闸门(提案 D) Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
§5.1 原来断言"没有浏览器工具,物理上做不到",复盘时对照 p-bkhylu 的 org-coder (同样只有 bash/read_file/str_replace(+write_file),没有专门的浏览器工具)却 真跑出了 Playwright + headless Chromium 测试,才发现这个判断错了:仓库自带 playwright 依赖,bash 里 `node verify.mjs` 沿目录树能 require 到仓库根的 node_modules,这条路今天的 coder/unit-tester 同样走得通。 真正的差异不是工具权限,是 unit-tester 的 agent.md 从未填充过(32 号文档那类 问题)、没有任何角色指导,而 org-coder/coder-validator 都是正常填充过的成熟 本体。根因从"平台缺工具"改判为"这次没有指导 agent 主动想到",是一个不一样、 也更能采取行动的结论。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
对比 e2e-demo 现有的三个项目根: p-v82tpc(今天的回归任务)—— 静态正则解析文本,零浏览器 p-bkhylu("做一个 lemonai 官网")—— 真实 Playwright + headless Chromium: 六档视口量 scrollWidth/clientWidth、getComputedStyle 量字号、手算 WCAG 对比度、 禁 JS/reduce-motion 验证、整体挪到 /tmp 用 file:// 重开验证可移植性 p-v1mpcl(31 号文档那条原始卡住任务)—— 无验证,任务在验收前就被取消 p-bkhylu 的 DELIVERY.md 里那句"未采信自证脚本,符合 SDD §0/§2 I-4 验收独立性 要求",搜遍 system/、docs/ 都找不到这条规则——它是那次任务的 sdd-planning 会话 自己写进那次 SDD 的,不是仓库级别的通用约束。也就是说三条任务里,要不要认真 验证、认不认自证脚本,完全取决于哪次任务规划时 agent 会话恰好这么想,没有系统 保证。这就是 34 号文档 §三"影响面"判断的实锤:任务显示"已完成"与"真的达成 原始需求"之间的落差,目前只能靠运气。 34 号文档 §四 checklist 全部查完,状态行同步更新。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
之前把这条 run 手动 patch required=0 + 重试推到 completed 那次操作,其实就是 "用真实回归任务验证 org-coder-validator 不再假阳性 blocked" 这条的证据,回来补记 (唯一没走到的是"由 workgraph-planning 全新规划一张图"这一环,端到端证据仍缺)。 复查了 validator.json 的 needs:[{kind:'artifact',required:false}]:不是同类潜伏 问题,是刻意设计——它验的 artifact 由另一张图产出,靠任务级共享索引找, 不依赖这条边的声明,required:false 与 33 号的 log 声明成因完全不同。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
34 号文档追加调查(§五): - coder-validator(预置 active 本体)的 agent.md 通篇是代码/契约正确性验证协议 (npx vitest run + 抓假绿五件套),压根不涉及视觉/交互检查;这次任务新招的 coder/unit-tester 两个本体 toolPolicy 都只有 bash/read_file/str_replace, 没有浏览器/截图工具——goal-benchmark.json 的 evidence_hint 要求"打开浏览器", 在给定工具权限下物理上做不到,不是 agent 偷懒。 - 但也不是纯粹空手套白狼:data/companies/e2e-demo/projects/p-v82tpc/tests/ unit-tester.check.js 是一份真实可运行的零依赖静态断言脚本,对维度 1-3 的检查 (字号比例真解析 CSS clamp() 算出数字、三个卖点区块标题顺序、锚点跳转/平滑滚动) 与浏览器版本基本等价甚至更精确;维度 4/5(响应式断点、资源完整性)的静态版本 明显更弱,会放过断点内样式写错、本地资源路径错误这类情况。 顺带发现:这份脚本很可能是 unit-tester 在提示词完全没有测试方法论指导的情况下 自己想出来的——它的 agent.md 还是没填充过的 _base 原始骨架(隔壁 coder 正常填充 过),是 32 号文档"招聘装配没填充完"那类问题的又一个真实样本(发生在方案 B 修复提交 6a18379 落地前 1 小时,是旧行为的证据,不是新机制的回归;新机制下 会不会正常完成,仍未验证)。32 号文档 §四追加第 6 条记录这次样本。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
用户反馈:控制台原来只能逐个节点点「输入输出」tab 看产物,缺一个全局入口。 新增 TaskFilesPanel.vue,挂在页头,跨节点/跨 run 一次性列出这个任务的全部产物。 做的时候发现分两类、且第二类之前完全没覆盖: · 节点产出索引(graph_files,按 company+task 检索)——规划笔记/日志/契约快照 · 项目根(W2 ensureProjectRoot,data/companies/{cid}/projects/{pid}/)—— 真实交付物代码写的地方,跨节点共享,indexNodeOutputs 从不扫它 后端补 readProjectRootRecord 导出 + GET /api/graph-runs/:id 挂 projectRoot 字段; 项目根的文件列表复用已有的 GET /:companyId/files(此前零调用方),不新开列目录端点。 新增 graph-run-route-io.test.js 两例(分配前 null、分配后原样透传 + 幂等)。 顺带订正 34 号文档:当时断言"index.html 从未被写出来"是错的——真实网站文件 其实在项目根里,只是没查那个目录。34 号文档 §零 记录了订正过程,问题收窄成 "validator 有没有真的做过浏览器级检查"(仍未解决,留待下次)。 全量单测 1000/1000 通过。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> -
真实回归任务 T-mt2r6fz0-125b 走到 completed 后回查产出,发现 org-coder-impl 从未写出任何 HTML/CSS/JS 文件(只有 _plan.md/_research.md/coder.log),但 org-coder-validator 给六个维度全打了 100 分。goal-benchmark.json 的 evidence_hint 里五个维度明确要求"打开 index.html/浏览器开发者工具检查", 这份评分显然没有真的执行过这些检查——是一次没有证据支撑的评分,不是 "查过但判错"。 不是 31/33 号修复引入的新问题,是那两次修复让这条本会一直卡死的任务真的跑到 completed 之后,才把这个一直存在的验收缺口暴露出来。只记现象与证据,根因 (提示词缺前置检查?validator 没有可用的浏览器/文件工具?是不是这次新招聘 本体特有的一次性现象)留给下次调查,这次不深挖。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
-
settleTaskFromRun 只写 status/finished_at,不清 blocked_reason —— 任务卡住时 noteTaskBlockedReason 写过的那句「节点 xxx 卡住(...)」会一直挂在 tasks 行上, 哪怕后来 run 真的恢复跑完转 completed。界面上因此出现「已完成」绿色状态旁边 还留着一句刺眼的红字,容易被读成还在报错。 真实复现:T-mt2r6fz0-125b 手动推过熔断点后 org run 收敛到 completed, 任务列表却仍显示 org-coder 卡住的旧归因文本。手动清了这条任务的残留数据, 代码层面在 settleTaskFromRun 的 UPDATE 里一并置 NULL——task 进终态时 「为什么卡着」这句话本来就该失效,不管进的是 completed/failed/cancelled 哪一种。 扩展了 goal-task-acceptance.test.js 里"预算耗尽→恢复→跑完"那条既有用例, 断言 blocked_reason 在完成后确实被清空。全量单测 998/998 通过。 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>
-
用真实 LLM 起了一条新任务(G-mt2r62ia-73af/T-mt2r6fz0-125b)回归验证 83afecb 的修 复:org-planner-sdd 自判失败后沿新补的兜底边自动回退 3 次、零人工介入,最终收敛到 completed,补上 31 号文档 §六此前用确定性测试代替的那步真实验收证据。 顺带在 org-coder 子图撞见一个独立的新 bug:inboundContracts()/requiredInputsMissing() 不按 role 过滤 graph_edge_contracts,把同一条边上声明的 produces(源节点自己产出什么) 也当成目标节点的必需输入,导致 org-coder-validator 被 missing_required_input 反复假阳 性 blocked(agent 自己判定 passed,引擎却强改成 fail)。已定位根因、写清复现证据与建议 修法,记在 33-needs-gate-role-filter-bug.md,留给下次实施。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>