mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-16 20:02:45 +03:00
Restores `memory_id` to the `memory_fts_au` trigger's `WHEN` clause and adds an FTS5 rebuild to the memory cleanup pass. This repairs a regression that landed yesterday: migration 178 guarded the trigger with `old.content IS DISTINCT FROM new.content OR old.key IS DISTINCT FROM new.key`, which drops the `memory_id` term the insert path depends on. `createMemory` inserts the row, the AFTER INSERT trigger stores an auto-assigned FTS5 rowid, and the follow-up `UPDATE memories SET memory_id = rowid` is what re-syncs FTS — an update that touches neither `content` nor `key`. With 178 alone that update stopped firing, so newly created memories drifted out of the FTS index and keyword/hybrid search silently returned nothing for them. Migration 180 adds the third term back. Maintainer note before merge: the cleanup half now runs `rebuild` on every pass rather than `optimize` only when rows were deleted — accepted as-is; it is bounded by the memory table size and the trigger fix removes the bloat source that motivated it. Validated as a combined board first (this PR merged with the 11 siblings of the same batch on the release tip): eslint on every changed file with the suppressions file, typecheck:core, check:open-sse-typecheck, complexity, cognitive-complexity, changelog-integrity, i18n new-key coverage, docs-sync, migration-numbering, provider-consistency and a duplicate-identifier audit all green, plus 275 passing / 0 failing focused node:test cases across the 28 test files the batch touches. Then re-validated alone on the fresh tip before this merge: conflicts re-resolved, file sizes rebaselined for this PR's own growth, eslint and this PR's focused tests re-run. Thanks @HouMinXi!
🌐 Multilingual Documentation — OmniRoute
Translations of documentation into 65 languages; together with the English source, the UI supports 66 locales. Code blocks remain in English.
- 🇪🇹 አማርኛ (
am): Docs Root - 🇸🇦 العربية (
ar): Docs Root - 🇦🇿 Azərbaycan dili (
az): Docs Root - 🇧🇬 Български (
bg): Docs Root - 🇧🇩 বাংলা (
bn): Docs Root - 🇨🇿 Čeština (
cs): Docs Root - 🇩🇰 Dansk (
da): Docs Root - 🇩🇪 Deutsch (
de): Docs Root - 🇬🇷 Ελληνικά (
el): Docs Root - 🇪🇸 Español (
es): Docs Root - 🇪🇪 Eesti (
et): Docs Root - 🇮🇷 فارسی (
fa): Docs Root - 🇫🇮 Suomi (
fi): Docs Root - 🇫🇷 Français (
fr): Docs Root - 🇮🇪 Gaeilge (
ga): Docs Root - 🇮🇳 ગુજરાતી (
gu): Docs Root - 🇳🇬 Hausa (
ha): Docs Root - 🇮🇱 עברית (
he): Docs Root - 🇮🇳 हिन्दी (
hi): Docs Root - 🇭🇷 Hrvatski (
hr): Docs Root - 🇭🇺 Magyar (
hu): Docs Root - 🇦🇲 Հայերեն (
hy): Docs Root - 🇮🇩 Bahasa Indonesia (
id): Docs Root - 🇳🇬 Igbo (
ig): Docs Root - 🇮🇹 Italiano (
it): Docs Root - 🇯🇵 日本語 (
ja): Docs Root - 🇬🇪 ქართული (
ka): Docs Root - 🇰🇭 ខ្មែរ (
km): Docs Root - 🇮🇳 ಕನ್ನಡ (
kn): Docs Root - 🇰🇷 한국어 (
ko): Docs Root - 🇱🇹 Lietuvių (
lt): Docs Root - 🇱🇻 Latviešu (
lv): Docs Root - 🇮🇳 മലയാളം (
ml): Docs Root - 🇮🇳 मराठी (
mr): Docs Root - 🇲🇾 Bahasa Melayu (
ms): Docs Root - 🇲🇹 Malti (
mt): Docs Root - 🇲🇲 မြန်မာ (
my): Docs Root - 🇳🇵 नेपाली (
ne): Docs Root - 🇳🇱 Nederlands (
nl): Docs Root - 🇳🇴 Norsk (
no): Docs Root - 🇮🇳 ଓଡ଼ିଆ (
or): Docs Root - 🇮🇳 ਪੰਜਾਬੀ (
pa): Docs Root - 🇵🇭 Filipino (
phi): Docs Root - 🇵🇱 Polski (
pl): Docs Root - 🇵🇹 Português (Portugal) (
pt): Docs Root - 🇧🇷 Português (Brasil) (
pt-BR): Docs Root - 🇷🇴 Română (
ro): Docs Root - 🇷🇺 Русский (
ru): Docs Root - 🇱🇰 සිංහල (
si): Docs Root - 🇸🇰 Slovenčina (
sk): Docs Root - 🇸🇮 Slovenščina (
sl): Docs Root - 🇷🇸 Српски (
sr): Docs Root - 🇸🇪 Svenska (
sv): Docs Root - 🇰🇪 Kiswahili (
sw): Docs Root - 🇮🇳 தமிழ் (
ta): Docs Root - 🇮🇳 తెలుగు (
te): Docs Root - 🇹🇭 ไทย (
th): Docs Root - 🇹🇷 Türkçe (
tr): Docs Root - 🇺🇦 Українська (
uk-UA): Docs Root - 🇵🇰 اردو (
ur): Docs Root - 🇺🇿 Oʻzbekcha (
uz): Docs Root - 🇻🇳 Tiếng Việt (
vi): Docs Root - 🇳🇬 Yorùbá (
yo): Docs Root - 🇹🇼 中文 (繁體) (
zh-TW): Docs Root - 🇨🇳 中文 (简体) (
zh-CN): Docs Root