mirror of
https://github.com/diegosouzapw/OmniRoute.git
synced 2026-09-17 20:32:25 +03:00
Merged after a maintainer rework that kept every one of @HouMinXi's commits intact. **What the rework added on top of the contribution:** the new DB health-check behaviour is gated behind a default-off feature flag (`src/shared/constants/featureFlagDefinitions.ts`, `defaultValue: "false"`), documented in `docs/reference/FEATURE_FLAGS.md` with the description key carried into all 66 locales, so the release default is unchanged and the new bounds only apply when an operator opts in. The optional-FTS5 migration set was reconciled by hand with the "180" entry that landed meanwhile (`src/lib/db/migrationRunner/constants.ts`). **Carried from your rebased head:** the `/api/db/health` local-only classification in `src/server/authz/routeGuard.ts` plus its `routeGuard` assertion — `runManagedDbHealthCheck()` forks native diagnostics into a child process, so Hard Rules #15/#17 apply. Re-verified here: 37 pass / 0 fail. Validated as a combined board first (this PR merged with the 21 siblings of the same wave on the release tip): eslint with the frozen suppressions, typecheck:core, check:open-sse-typecheck, complexity, cognitive-complexity, changelog-integrity, i18n new-key coverage, docs-counts, docs-sync, migration-numbering, provider-consistency and a duplicate-identifier audit all green, plus 176 passing / 0 failing focused node:test cases across the 25 test files the wave touches and the dashboard test under Vitest (2/0). 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. Thank you for the depth of this one — the resource-bounds suite and the sql.js startup/backup coverage are the kind of tests that keep a database layer honest.
🌐 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