-
46 号文档 Phase 4:decomposed_work 子任务的父子生命周期管理。 - 父任务被 subtask-planning 成功拆分后让位给子任务(新状态 decomposed), 取消自己排队中的完整 org graph run - 父任务预算按拆出的步数均分给每条子任务 - 父子终态汇总(settleParentTaskIfAllChildrenDone),子任务全部完成后 自动结算父任务并联动 goal 收敛 - 同父子任务独立并发坑位(上限 3),判据钉在 updateRunStatus 的唯一准入 事务里,不占用公司级 max_parallel_tasks 槽位 - 前端(Phase 5):decomposed 状态样式 + 子任务进度展示,复用已有的 parentTaskId 通用树形逻辑,未改后端接口 真实回归当场撞出一个几乎必现的真缺陷:markTaskDecomposed 原本只认父任务 还是 queued,但 task-scheduler 抢坑是毫秒级、subtask-planning 是数十秒的 真实 LLM 调用,等它拆完时父任务几乎必然已经 running,接管必然失败,而 stopRun 依然会把真实在跑的 org graph 取消掉。已修复(接管条件放宽 + 调整先接管再取消的顺序)并用真实公司数据验证;同父并发坑位也用真实数据 确认生效(两条子任务真实同时 running 20+ 分钟)。 回归过程中牵出一个独立缺陷:org-validator 对同一种 benchmark 契约判断 不稳定(5 次里 1 次误把源码路径当 --target 判 target_not_json,反手把 责任推给 subtask-planning)。根因是 decomposed_work 轻量图当时只有一条 前进边、没有失败边,validator 判 fail 后无路可退。已补 validate --fail--> impl 退回边(复用引擎已验证过的 backward_count 双层硬顶 + remediation_note 反思闭环),新增 3 条单测覆盖边形状、真实退回重试、硬顶熔断三个场景。 全量单测 1229/1231 通过(2 个失败改动前即存在、与本次无关)。 Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01H9Mq8rViHp8xuj6zTy76hh
-
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
-
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>