OpenProgram · SessionStore consistency

merged_heads 原子更新

mark_merged(session_id, head_ids) 是集合并集操作。并发 merge 可以来自子 agent 完成、task runner 和 Web 分支操作;两个调用必须保留双方写入,不能由后写者覆盖先写者。

状态合同

属性要求
原子性读取现有列表、去重追加、写回 idx.meta 在同一个 idx._lock 临界区完成。
顺序保留既有顺序;每个调用按输入顺序追加此前不存在的非空、strip 后 ID。
幂等重复 ID 不产生重复项;没有新增值时不写磁盘。
持久化锁内只更新内存;_persist_meta 在锁外执行,避免文件 I/O 持有 index 状态锁。并发调用最终至少有一个持久化快照包含完整并集。
本任务只修复 mark_merged 的 read-modify-write。它不扩展为通用 transaction API,不修改 branch naming、DAG 节点删除或 session index flush 协议。

验收