Theme / v3.9.0

MemPalace

本地優先的 AI 記憶宮殿

基礎觀念

v3.7.1:完整性與重連修復補丁

v3.7.1 是 v3.7.0 之後的 integrity patch,說明 mine 卡死、re-mine 完整性與 Chroma 重連的修正。

這是補丁,不是新功能

v3.7.1(2026-08-14 發布,正式版)是 v3.7.0 之後的完整性修正補丁(post-3.7.0 integrity patch):不改 logstream、CLI 或 MCP 工具表面,只修四類會造成卡死、資料漏建或索引倒退的路徑。已在使用 v3.7.0 的使用者建議升級;v3.7.0 的 logstream 與單一 writer 說明(v370-agent-logstream)仍然適用。

不再被 named pipe 卡死

minesweepinitcompresssplit 的讀取改帶 O_NONBLOCK,讓「拒絕非 regular file」的型別檢查得以執行;遇到 FIFO 這類檔案會印出 SKIP: <name> (not a regular file) 並跳過,不會因為 pipe 沒有 writer 而永遠等下去。regular file 讀回內容與先前逐 byte 相同;唯一 flag 不惰性的情境(reader 破壞 write lease)會重新檢查檔案型別後再重試,不會因此掉檔(#2221)。

re-mine 不再假裝完成

  • process_filechunk_total 標記每一批 upsert,file_already_mined 能區分「N/N 已提交」與「batch 1 之後崩潰」。
  • source_mtime 與內容讀取共用同一次 fstat,讀取後被 append 的新尾段不會被後續 re-stat 永久藏住。
  • 失敗的 stale-drawer purge 會中止該檔,而不是半覆寫;mid-file upsert 失敗會先刪除該來源的部分 drawers/closets 再 re-raise,下次 mine 才能重試(#2088/#2122/#2151)。
  • convo mine 適用相同規則:drawers 標記 chunk_total、失敗刪除部分 drawers、prefetch_mined_set 跳過未完成群組,避免中斷的 transcript mine 造成永久缺漏(#2183)。

Chroma 重連與租約釋放

peer 或 rebuild 變更 chroma.sqlite3 後,MCP 與 ChromaBackend 會先清除 chromadb 的 path-keyed SharedSystemClient cache 再重開,避免沿用舊的 in-memory HNSW segment 而讓 index count 倒退(#2002/#2026/#2028/#2032)。另外,MCP 在收到 SIGTERM/SIGHUP 時也會釋放 palace writer lease:main() 安裝 handler 改走 sys.exit,讓既有 atexit 釋放路徑在 SSH 斷線、container/systemd stop 時仍會執行,不再留下指向死 PID 的 mine_palace_*.lock(#2205)。

來源:MemPalace v3.7.1 release