4bfa2b59a1
Introduce a `ru_en` FTS configuration (english_stem over ascii token classes, russian_stem over Cyrillic ones) and flip every stored + query side to it IN LOCKSTEP (acceptance #13): - new migration creates ru_en, swaps the pages.tsv trigger + reindexes existing rows (row-lock UPDATE, no ACCESS EXCLUSIVE), and swaps the page_embeddings.fts generated column (documented rewrite/lock trade-off for large tenants, mirroring the #443 trgm migration). down() reverts tsv/fts to english BEFORE dropping the config (dependency order). - page-embedding.repo.ts hybridSearch query config english -> ru_en, so the RAG lexical leg's query config matches its fts column config. - search.service.ts current query literals english -> ru_en so the column and query configs stay paired (this commit is independently revertable; the engine itself is rewritten in the A2-A9 commit). The reindex is atomic within the single migration transaction (this repo's Migrator wraps all pending migrations in one tx), so no morphology-desync window exists and no dual-config read path is needed. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>