- chunk(): byte splits that landed mid multibyte char silently dropped
the whole chunk (accented/CJK lore). Back the boundary off to a char
boundary; regression test included.
- add_document(): DELETE the source first — re-adding a file no longer
doubles its chunks.
- chunks now record their embed_model (ALTER TABLE migration for old
DBs); search skips chunks from a different model; rag_list reports it;
new rag_reindex re-embeds everything, surfaced in the Lore panel as a
mismatch banner with a one-click Reindex.
set_llm_config only mutated an in-memory Mutex; lib.rs always started
from LlmConfig::default(). Config now round-trips through the same
dm-pal-prefs.json store as dataDir, with a defaults fallback so a
future shape change can't brick startup. Prefs consts now live in
lib.rs (pub) instead of being mirrored per-module.