- 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.