MentisDB 0.10.6.51 — Permanent Skill Delete, Sidecar WAL, Search Persist Wins
This release lets operators remove a skill for good — not just revoke it — from the crate, REST, MCP, and the web dashboard. The Skills page now shows how many skills you have and how many are active, revoked, or deprecated. Under the hood, vector sidecars stop rewriting their full JSON snapshot on every append, and MCP/REST no longer hold the chain write lock across that derived I/O.
cargo install mentisdb --locked --force
(or let the daemon self-updater install the tag). Restart the daemon after install.
Existing sidecars keep working: the next append starts a sibling
*.json.wal. Older binaries that only read JSON will treat a
sidecar with a pending WAL as stale and rebuild it.
Skills: revoke vs delete
Revoke still keeps every version for audit. Agents should refuse to
execute a revoked skill. Permanent delete is the explicit exception to
the registry’s append-only lifecycle: SkillRegistry::delete_skill
removes the entry, indexes, and latest summary from
mentisdb-skills.bin. After delete, list/search/read miss the
id and the same skill_id can be uploaded again as Active.
- REST:
POST /v1/skills/deletewith{ "skill_id": "…" } - MCP:
mentisdb_delete_skill - Dashboard:
DELETE /dashboard/api/skills/{id}
Crate, REST, and MCP will delete any existing skill. The dashboard UI matches bearer-token delete: Revoke on active or deprecated rows, then Delete on the revoked list row or Delete Permanently… on the detail pane (type the skill id to confirm).
The Skills list now has a summary bar: total, active, revoked, and
deprecated. Those counts come from SkillRegistry::counts()
— deleted skills are gone and are not counted.
Vector sidecar WAL
Managed sidecars used to serialize the entire JSON snapshot on every
append. Large chains paid O(n) write I/O for one new embedding.
0.10.6 writes one integrity-chained WAL record instead
(magic MDBVWAL1, digest
SHA-256(prev || entry)). Load verifies the snapshot, then
replays *.json.wal. After 32 records the snapshot is
compacted and the WAL is deleted.
The append-only thought log is still the source of truth. A corrupt WAL fails verification and the sidecar is rebuilt from the chain.
Search and dashboard persist
- MCP/REST append releases the chain write lock before sidecar WAL and overlay I/O so ranked search can proceed. Crate
append_thoughtstill flushes derived files before returning. - Implicit-edge first build stays pairwise for N ≤ 128 (exact tests) and uses a temporary HNSW top-k search above that.
- Dashboard
get_or_open_chainreopens a cached handle only when the on-disk thought count is ahead of the live handle. query_rankedscores the cached Exact/HNSW backend withsearch_filteredinstead of cloning vectors into a throwaway index.- Exact cosine top-k uses
select_nth_unstable_by; adjacency, stemmer, thesaurus slices, HNSWef_search, webhookClient, and bearer-token registry loads are cached.
Verification
make clippy(warnings as errors)cargo test --all-featurescargo package --features local-embeddings- Criterion
search_rankedsmoke (sample-size 10) - Full LoCoMo / LongMemEval not re-run: BM25/vector fusion weights are unchanged. Overlay construction is approximate only for first builds with N > 128.
Links
- GitHub release 0.10.6.51
- crates.io/mentisdb
- docs.mentisdb.com — Skills Registry and vector sidecars