a0efd92192
- direct_tool_calls.rs:把 preserve_started_at(只管 startedAt)换成 merge_tool_call_snapshot, 同一 id 的多条快照按 updatedAt 单调合并:updatedAt 更旧的快照不得覆盖更新的 status 与 updatedAt, updatedAt 相同时终态优先,startedAt 仍取最早的非零值 - upsert_direct_tool_call_once(逐条快照落盘)与 persist_direct_tool_calls_at(回合末整批落盘) 两条竞争路径共用同一合并函数,后到的旧快照不再把 completed / failed 打回 running - normalize_tool_calls(回读归并)同 id 的重复行同样按 updatedAt 合并,磁盘上留下的旧快照不得回退状态 - 新增单测:tool_call_persist_keeps_newest_snapshot_per_item(单条 + 整批两条路径)、 tool_call_read_merges_duplicate_rows_monotonically(回读重复行)