- indexer.rs: embedder mutex is now locked only around each chunk's
embed_document() call instead of the whole file's chunk loop, so a slow
MIGraphX JIT compile on one file no longer blocks every query for minutes
- sync_ext.rs (new)/indexer.rs/main.rs/serve.rs: added MutexExt::lock_recover(),
replacing every .lock().unwrap() so a panic on one thread (poisoning the
mutex) logs a warning and recovers instead of cascading into every future
lock().unwrap() call
- store.rs: save_index now writes to a .tmp sibling and renames atomically
into place; Store::open recovers from an index that fails to load by
wiping it and the SQLite files/chunks tables so the next scan rebuilds
from scratch, instead of refusing to start at all. Note: this recovery
only catches corruption usearch's loader reports as Err — verified
experimentally that sufficiently garbled input segfaults the process
instead, which no Rust-side handling can catch; the atomic save is what
actually prevents the realistic mid-crash corruption case from arising
- breadsearch/src/main.rs: GUI query-result wait switched from
glib::idle_add_local (re-invoked every main-loop tick, pegging a core for
the whole wait) to a 15ms glib::timeout_add_local poll
- breadsearch/Cargo.toml: bread-theme pin bumped v0.2.8 -> v0.2.10 to match
the rest of the family