Skip to content
Discussion options

You must be logged in to vote

磁盘上 5 个会话目录都在、只有 sessionIds 从 5 条变成 1 条 —— 这个形状基本可以排除"数据损坏",更像是索引文件的 read-modify-write 被一次"空读"覆盖:

  1. 启动时读 workspace.json 失败或读到空/半写状态(Windows 上常见原因:上次退出时写到一半被杀、杀毒软件/索引服务短暂锁文件、或非 ASCII 路径在某条代码路径上解析失败后走了 fallback 默认值)
  2. 代码把它当成"没有历史",用默认 [] 起步
  3. 新建/打开当前会话时 push(currentId) 然后整份写回 → 历史 4 条被静默抹掉

我们在另一个 agent 记忆存储里踩过完全同类的问题(单次写入不报错,但条目被一点点或一次性"写丢"),最后落地的是两层:

① 写入侧:净减少守卫 + 原子替换

// 写回前对比:只增不减是正常路径;净减少 ≥2 条必须显式声明意图
const before = new Set(onDisk.sessionIds);
const after  = new Set(next.sessionIds);
const dropped = [...before].filter(id => !after.has(id));
if (dropped.length >= 2 && !opts.allowDrastic) {
  log.warn('ESUSPECT_EROSION', { dropped });   // 完整 delta 记日志
  return;                               …

Replies: 1 comment

Comment options

You must be logged in to vote
0 replies
Answer selected by reeer1054-code
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Category
Q&A
Labels
None yet
2 participants