Skip to content

fix(persistence): 修复并发与崩溃一致性 - #59

Merged
uvwt merged 2 commits into
mainfrom
fix/persistence-consistency
Sep 29, 2026
Merged

uvwt merged 2 commits into
mainfrom
fix/persistence-consistency

Conversation

@uvwt

@uvwt uvwt commented Sep 29, 2026 •

Copy link
Copy Markdown
Owner

变更

基于持久化 / 并发一致性专项审查,修复已通过可执行复现确认的问题:

  • Recall 使用 os.Root 约束真实文件读写、rename / delete、Lifecycle 与 embedding index,阻断 symlink 越界
  • Recall Embedding reindex 在共享 Store 上串行化,避免不同 service / prefix 并发重建发生 lost update
  • AgentDock 节点局部更新只写请求中出现的字段,避免 name / enabled 并发更新互相覆盖
  • Private Notes 以明文为事实来源:写入先密文后明文、删除先密文后明文;状态检查识别 missing / stale / orphaned 密文并实际解密比对
  • Workflow Publish 增加 durable publish intent,跨多个 JSON 文件的发布在 crash / restart 后可幂等前滚,不再残留多个 active
  • 补齐 Recall / Private Notes / MCP Token / runtime AI key 的目录持久化 hardening;MCP Token 首次创建改为完整临时文件 + hard link 发布
  • Private Notes 新增状态字段同步到 OpenAPI 与生成的前端 TypeScript 契约

没有新增 repository / transaction manager / provider / backend abstraction。

复现证据

修复前已在 main@9ac964c 的一次性快照中确定性复现:

  • Recall symlink 可读取根目录外文件
  • 两个不同 prefix 的 Recall reindex 并发后最终索引只保留一侧
  • Private Notes 明文已更新、密文仍旧时 EncryptedBackupOK=true
  • AgentDock name / enabled 并发局部更新发生 lost update
  • Workflow Publish 在新 active 已落盘、旧 active 尚未退役时崩溃,重启后保留两个 active

验证

  • make check ✅
  • make web-build ✅
  • make build-nexusdock ✅
  • go test -race ./... ✅
  • git diff --check main...HEAD ✅
  • 主模型最终逐项复核 diff 与持久化边界 ✅

范围

基于 main@9ac964c;不包含且不修改 PR #57。

@uvwt
uvwt merged commit e39e0f5 into main Sep 29, 2026
2 checks passed
@uvwt
uvwt deleted the fix/persistence-consistency branch September 29, 2026 11:16
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant