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