• 两类回填合在同一个脚本里(§十二.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>
    yibo authored
     
    Browse File »