Skip to content

v0.14.0

Choose a tag to compare

@tenequm tenequm released this 23 Jul 12:16
e618b41

Routes the MCP tool surface by intent, adds first-class OpenClaw ingestion, and makes local Lance stores crash-consistent (fsync on write + self-heal on open).

🛠 Breaking Changes

  • mcp: [breaking] route the tool surface - rename pond_sql, split pond_get into pond_get_session/pond_get_message (d72bd3b) - pond_sql_query is now pond_sql, and the single pond_get splits into pond_get_session (reads a whole session) and pond_get_message (expands one message), so each tool routes on caller intent instead of guessing what an id means.

🎉 New Features

  • OpenClaw integration - adapter, serve --with-sync, and openclaw-pond plugin (#114) (2f87e3f) - a native OpenClaw session adapter, a serve --with-sync mode that keeps the store fresh while the MCP server runs, and the openclaw-pond plugin to wire it up.

🐛 Bug Fixes

  • substrate: self-heal crash-poisoned local stores and fsync local writes (#118) (05b9f24)
    • Local writes now fsync the file and its parent directory after every put/copy/rename (unix, local stores only), so a crash can't leave a manifest published but unflushed. Measured cost is +4.2% (130.86s -> 136.40s) on the heaviest local path - a full 3.78M-row store copy with index rebuild - and effectively nil on routine incremental syncs, since Lance writes few large files and fsyncs amortize per file, not per row.
    • A failed open now self-heals instead of staying wedged: it walks _versions/ head-down, scan-verifies each manifest by draining a full-column scan, quarantines any crash-poisoned manifest by atomic rename to *.manifest.corrupt (never deletes), then retries the open once. Scan-verify projects every column because a column-update commit (embed's vector write) puts new columns in their own per-fragment data files a narrow scan would skip; file+uring:// stores are healed too.
  • embed: two-step backlog gate - manifest-only lag fast path, exact-count confirm (#73) (464f954) - the embedding-backlog check first reads a cheap manifest-only lag signal and only falls back to an exact count_rows confirm when that signal says work may be pending, avoiding a full count on every gate.

Full Changelog: v0.13.2...v0.14.0