-
两类回填合在同一个脚本里(§十二.5 的要求):同一次数据形态变更分两个 脚本,只会让「跑了哪个没跑哪个」变成新问题。 **沿用原 taskId,不新发一个** —— 这是这一步最要紧的判断。conversations 目录名是 task-{taskId}、汇报链路按 taskId 找回这条派单、summary 里互相 引用。换 id 等于把这些引用全断掉,而回填的目的恰恰是「别让历史消失」。 落点: - executor='agent'、assignee_agent_id ← dispatch 的 to、parent_task_id ← 派单链 - company_id 落 _global:tasklog 的行没有 company 这一维(from/to 都是本体 id), 全局 agent 的会话本来就落在这个保留 id 下(28 §5.1)。不去猜某条派单 「其实属于哪家公司」—— 猜错会让它出现在错误的公司列表里,比都归 _global 更难发现 - 每条派单自带一个 goal:tasks.goal_id 是 NOT NULL 真外键,而派单没有「人提的需求」 那一层。与 §六.3 给 POST /:cid/tasks 设计的兼容路径同一条,不给 goal_id 开可空口子 - 标题把 <br> 还原成换行再取首行,否则整条正文糊成一长条 - dispatched → running(派出去了还没回话,不是终态) 实跑:4 条派单全部回填成功、零失败;再跑一次全部跳过、零新增。 回填后 executor='agent' 的行指向 hunter / digester / master / agent-creator, 原 taskId 一个没变。 守卫:server/tests/unit/tasklog-backfill.test.js(4 例) 顺带修掉自己踩的一个:新测试用 Date.now() 拼临时库路径,撞了 test-id-stability 那条守卫 —— 和另一个会话昨天踩的是同一个。改用 fs.mkdtempSync(仓库既有写法,graph-engine.test.js 的 runsDir 就是它)。 全量:131 文件 / 1251 测试全绿。 Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>