-
subtask-planning 每个 step 新增 acceptance 字段(benchmark 段格式),createTask 强制 decomposed_work 子任务必须带验收契约并用 goal-contract.validateContract 校验, enqueueTaskRun 起轻量图前把契约落进新 run 的 artifacts/acceptance.json——解决 46号文档 Phase 3 v2 真实回归撞见的 org-validator 死锁(轻量图没有 org-planner 产出契约,退无可退)。 真实起 subtask-planning agent 验证时发现设计稿的字段形状假设有误(真实产出是 benchmark 段本身,不是三段式 wrapper),已按真实产出修正代码与文档,并用那次 真实调用的原始输出跑通完整链路验证。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H85SS5hVC4u1PbVhjmrhH8
-
真实回归暴露"认领后没有触发源"的真问题,讨论后发现"认领"(pull,CAS 抢占)要解决的"多方竞争同一条任务"场景根本不存在——只有 CEO 一个人拍板 要不要派、派给谁。CEO 心跳统一发现+直接派发(push)成本更低,还能顺带 控制派发节奏,不需要认领。 删除:claimSubtask/unclaimSubtask(work-graph-db.js)、POST /claim、 POST /unclaim(company.js)、CLAIMABLE_WORK_ROLES 白名单、 claimable/claimed 两个 status 值、claimed_at 列。 改名:subtask_kind 的 'claimable_work' → 'decomposed_work' (materializeClaimableSubtasks → materializeDecomposedSubtasks), "认领"这个词不再准确,物化出的行现在就是普通 draft task。 新增: - triggerSubtaskPlanning 加递归防护(task.parent_task_id 非空直接跳过) ——设计 v2 时发现的真实漏洞:CEO 对子任务调 /enqueue 会默认 withSubtaskPlanning=true,不挡会对已经是"第几步"粒度的子任务再拆一层。 - createDecomposedWorkGraph:现造一张两节点轻量 work graph (impl=org-coder、validate=org-validator,agent_call 不是 subgraph), 跳过公司完整 org graph 的 brd/prd/sdd 规划仪式——subtask-planning 已经 把"怎么做"拆到这个粒度了,再走一遍纯属重复劳动。含一条没有真实验证过 的假设(org-coder/org-validator 裸调用会不会读不到预期上下文),如实 写在代码注释和文档里。 - enqueueTaskRun 按 subtask_kind 选图:decomposed_work 走轻量图, 普通 task 行为不变(回归测试覆盖)。 - ceo/heartbeat.md、tools.md 补了巡检 decomposed_work 草稿 + 判断节奏 + 调用现成 /enqueue 的指令。 测试:删除 task-pool-claim.test.js(随 v1 代码作废),新增 task-decomposition-dispatch.test.js(12 条),更新 task-decomposition-validator-gate.test.js 措辞。全量单测 1191 条, 1189 passed(唯二失败与本次改动无关),零残留 CLI 子进程。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H85SS5hVC4u1PbVhjmrhH8
-
tasks 表新增 subtask_kind('acceptance_item'|'claimable_work',区分 43 号 文档的验收条目物化和 Phase 3 的可认领工作项物化,共用一张表不新开)+ claimed_at 列(批 6 迁移,ALTER ADD COLUMN,纯增量向后兼容)。 - work-graph-db.js:createTask 新增 subtaskKind/status 参数 + 校验; claimSubtask/unclaimSubtask 是全仓库第一个真正的"认领(pull)"CAS 写入 (之前 assignee_agent_id 全部写入点都是"派发 push",没有先例可抄,照抄 claimQueuedTask 的 changes 判据);materializeClaimableSubtasks 把 subtask-planning 的 steps[] 物化成可认领子任务,两阶段建法处理 depends_on_hint 的前向引用,幂等,与 acceptance_item 物化互不干扰。 - graph-engine.js:settleNode 的 SUBTASKS_INCOMPLETE 硬闸门收窄成只查 subtask_kind='acceptance_item'——这是必须同步改的一步,不收窄的话新物化 的 claimable_work 行会让所有开了 subtask-planning 的 task 验收判定失控 (已用回归测试固定住这个场景)。maybeMaterializeItemizedSubtasks 的 createTask 调用同步打上 subtask_kind='acceptance_item'。 - subtask-planning.js:triggerSubtaskPlanning 写完 artifact 后立刻物化 claimable_work 子任务,不等 org-planner 跑完。 - company.js:taskView 补 subtaskKind/claimedAt;GET /tasks 加 subtaskKind 过滤(?subtaskKind=claimable_work&status=claimable 就是可认领池查询); 新增 POST .../claim、POST .../unclaim 两个端点,角色白名单先写死 ['org-coder'](不做能力匹配,系统里没有结构化角色能力字段)。认领成功 同时把 executor 改成 'agent',复用既有的 executor='agent' 派单闭环 (/task/report 上报生命周期),不需要碰 graph-engine 的调度模型。 新增 task-pool-claim.test.js(23 条:DB 层校验/CAS/物化 + 路由层白名单/ 并发/放弃);task-decomposition-validator-gate.test.js 补一条回归测试 (claimable_work 子任务不影响 acceptance_item 的验收判定)+ 更新既有用例 显式打 subtaskKind;task-decomposition-materialize.test.js 补 subtask_kind 落库断言。全量单测 1202 条,1200 passed(唯二失败与本次改动 无关、改动前即存在)。 本轮明确不做:依赖顺序强制、能力匹配、graph-engine 调度模型改动、 Phase 4 的独立开发验证循环、Phase 5 看板 UI。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H85SS5hVC4u1PbVhjmrhH8
-
实现路径: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