fix(i18n): backfill locale translations#2588
Conversation
|
Warning Review limit reached
Your plan includes 5 reviews of capacity. Refill in 17 minutes and 2 seconds. Your organization has run out of usage credits. Purchase more in the billing tab. ⌛ How to resolve this issue?After more review capacity refills, a review can be triggered using the We recommend that you space out your commits to avoid hitting the rate limit. 🚦 How do rate limits work?CodeRabbit enforces hourly rate limits for each developer per organization. Our paid plans have higher rate limits than trial, open-source, and free plans. In all cases, review capacity refills continuously over time. Please see our FAQ for further information. ℹ️ Review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: 📒 Files selected for processing (8)
📝 WalkthroughWalkthroughThis PR adds comprehensive localization for 11 languages by translating UI strings across core features: navigation, settings, developer options, provider configuration, onboarding flows, MCP integration, skills, and billing interfaces. Strings updated across 40 i18n chunk files (5 files per locale: ar, bn, de, es, fr, hi, id, it, ko) plus test coverage expansion. Changesi18n Translation Updates
Estimated code review effort🎯 2 (Simple) | ⏱️ ~12 minutes Possibly related PRs
Suggested labels
Suggested reviewers
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. Comment |
There was a problem hiding this comment.
Actionable comments posted: 5
Note
Due to the large number of review comments, Critical, Major severity comments were prioritized as inline comments.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
app/src/lib/i18n/chunks/hi-5.ts (1)
1-697: 🛠️ Refactor suggestion | 🟠 Major | 🏗️ Heavy liftSplit this module to stay under repository size guidance.
This file is ~697 lines, above the ~500-line threshold.
As per coding guidelines "
**/*.{ts,tsx,rs}: File size should not exceed approximately 500 lines. When a module grows beyond this threshold, split it into smaller, more focused modules with clear responsibilities."🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/hi-5.ts` around lines 1 - 697, This file (const hi5: TranslationMap / export default hi5) is oversized; split the large translation map into multiple smaller modules (e.g., hi-5-a.ts, hi-5-b.ts) each exporting a partial TranslationMap (named exports or default), then create an index module that imports those partials and merges them into the single hi5 TranslationMap (using object spread or Object.assign) and re-exports the combined hi5 as the default; update any imports that currently point to this file to import the new index so consumers see the same default export.
🟡 Minor comments (18)
app/src/lib/i18n/chunks/bn-2.ts-403-403 (1)
403-403:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winReplace corrupted localization artifacts in Bengali strings.
Line 403 and Line 422 include malformed placeholder/artifact text, which will leak directly into the UI.
💡 Suggested patch (safe fallback values)
- 'devOptions.menuToolsDesc': - 'টুলগুলি [[I18N_SEP_92731] BR__7 সক্ষম করতে সক্ষম]__3 সক্ষম করতে পারে। আপনার পক্ষে ব্যবহার করুন', + 'devOptions.menuToolsDesc': + 'Enable or disable capabilities OpenHuman can use on your behalf', @@ - 'devOptions.menuComposioRoutingDesc': - 'আপনার নিজের Composio এবং Composio Composio __বিরুট সরাসরি কল করুন।', + 'devOptions.menuComposioRoutingDesc': + 'Bring your own Composio API key and route calls directly to backend.composio.dev',Based on learnings: “Only flag problems related to key structure/validity (e.g., missing exports, syntax/type errors), not the use of English fallback text in these locale chunks.”
Also applies to: 422-422
app/src/lib/i18n/chunks/bn-3.ts-220-220 (1)
220-220:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix malformed Bengali copy for
welcome.localSessionDesc.Line 220 has corrupted token text (
skips__ BR__Ans) that will render broken UI copy.💡 Suggested patch (fallback-safe)
- 'welcome.localSessionDesc': 'একটি অফলাইন skips__ BR__Ans স্থানীয় প্রোফাইল ব্যবহার করে।', + 'welcome.localSessionDesc': + 'Uses a local offline profile and skips TinyHumans OAuth.',Based on learnings: “Only flag problems related to key structure/validity … not the use of English fallback text in these locale chunks.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/bn-3.ts` at line 220, The value for the localization key welcome.localSessionDesc contains corrupted token text ("skips__ BR__Ans"); update the string for welcome.localSessionDesc to a clean, valid Bengali sentence (e.g., replace the corrupted fragment with an appropriate Bengali phrase meaning "uses a local offline profile") so the UI renders correctly while preserving the key name welcome.localSessionDesc and surrounding punctuation/quotes.app/src/lib/i18n/chunks/ko-3.ts-218-218 (1)
218-218:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix broken OAuth sentence punctuation in localized copy.
Line 218 splits the phrase (
...건너뜁니다. OAuth.), which reads as a broken sentence and can confuse users.Suggested fix
- 'welcome.localSessionDesc': '오프라인 로컬 프로필을 사용하고 TinyHumans를 건너뜁니다. OAuth.', + 'welcome.localSessionDesc': '오프라인 로컬 프로필을 사용하며 TinyHumans OAuth를 건너뜁니다.',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/ko-3.ts` at line 218, The localized string key 'welcome.localSessionDesc' contains a broken sentence ("...건너뜁니다. OAuth.")—replace the value with a single coherent Korean sentence by removing the stray period and connecting the clauses (for example: "오프라인 로컬 프로필을 사용하고 TinyHumans를 건너뛰며 OAuth를 사용합니다.") so the copy reads naturally and includes OAuth as part of the sentence.app/src/lib/i18n/chunks/id-5.ts-603-603 (1)
603-603:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix
notAvailablevalue typo (t/a→n/a).
't/a'looks like an accidental typo and creates inconsistent status text in two places.Suggested patch
- 'settings.localModel.download.notAvailable': 't/a', + 'settings.localModel.download.notAvailable': 'n/a', ... - 'settings.localModel.status.notAvailable': 't/a', + 'settings.localModel.status.notAvailable': 'n/a',Also applies to: 623-623
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/id-5.ts` at line 603, Typo in the translation value for the key 'settings.localModel.download.notAvailable' (and the duplicate occurrence) — replace the incorrect 't/a' string with the intended 'n/a'. Locate the entries for settings.localModel.download.notAvailable in the id-5.ts chunk (both occurrences) and update their values from 't/a' to 'n/a' so status text is consistent.app/src/lib/i18n/chunks/id-5.ts-687-687 (1)
687-687:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winCorrect the Teams URL example domain.
team.microsoft.comis not the standard Teams host; this example should useteams.microsoft.com.Suggested patch
- 'skills.meetingBots.platformHints.teams': 'team.microsoft.com/...', + 'skills.meetingBots.platformHints.teams': 'teams.microsoft.com/...',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/id-5.ts` at line 687, The i18n entry for 'skills.meetingBots.platformHints.teams' uses the wrong domain; update the value string to use the correct Teams host by replacing "team.microsoft.com/..." with "teams.microsoft.com/..." so the example URL is accurate.app/src/lib/i18n/chunks/bn-4.ts-303-303 (1)
303-303:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winReplace malformed
authHeaderLabeltext.
'2th head]9'is unreadable and looks accidental; please replace it with a valid label (native translation or English fallback).Based on learnings: in `app/src/lib/i18n/chunks/*.ts`, English fallback values in non-English locale chunks are acceptable placeholders when native translations are pending.Suggested patch
- 'settings.ai.openAiCompat.authHeaderLabel': '2th head]9', + 'settings.ai.openAiCompat.authHeaderLabel': 'Auth header',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/bn-4.ts` at line 303, The value for the i18n key 'settings.ai.openAiCompat.authHeaderLabel' contains a malformed string; replace the existing value `'2th head]9'` with a readable label (use an English fallback such as `'Authorization header'` or an appropriate Bengali translation) so the key maps to a valid user-facing string; update the literal in the bn-4.ts chunk where 'settings.ai.openAiCompat.authHeaderLabel' is defined.app/src/lib/i18n/chunks/es-2.ts-100-100 (1)
100-100:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUse canonical technical labels for mode/auth terms.
Line 100 (
'devOptions.local': 'locales') and Line 105 ('devOptions.token': 'ficha') read as non-technical Spanish and can confuse core mode/auth UX. Prefer stable technical terms (Local,Token) here.Suggested fix
- 'devOptions.local': 'locales', + 'devOptions.local': 'Local', ... - 'devOptions.token': 'ficha', + 'devOptions.token': 'Token',Also applies to: 105-105
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/es-2.ts` at line 100, Update the Spanish i18n entries for the technical mode/auth labels so they use canonical technical terms: change the value for 'devOptions.local' from 'locales' to 'Local' and change the value for 'devOptions.token' from 'ficha' to 'Token' in the es-2.ts chunk so the UI displays stable, technical labels for these options.app/src/lib/i18n/chunks/es-3.ts-95-95 (1)
95-95:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winNormalize technical terms to avoid misleading UI labels.
A few changed strings now use non-technical words in technical contexts:
- Line 95
localesfor local mode- Line 101
garrapatasfor scheduler ticks- Line 395 / Line 405
fichafor bot tokenThese should use stable terms (
Local,ticks,token) for clarity.Suggested fix
- 'backend.local': 'locales', + 'backend.local': 'Local', ... - 'subconscious.ticks': 'garrapatas', + 'subconscious.ticks': 'ticks', ... - 'channels.discord.fields.bot_token.label': 'Ficha de robot', + 'channels.discord.fields.bot_token.label': 'Token del bot', ... - 'channels.telegram.fields.bot_token.label': 'Ficha de robot', + 'channels.telegram.fields.bot_token.label': 'Token del bot',Also applies to: 101-101, 395-395, 405-405
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/es-3.ts` at line 95, Replace the misleading non-technical Spanish strings with stable technical terms: update the translation value for the key 'backend.local' from "locales" to "Local"; update the scheduler/tick-related key(s) (e.g., the key referencing scheduler ticks) to use "ticks" instead of "garrapatas"; and update the bot token label key(s) (e.g., 'bot.token' or the token field labels) to use "token" instead of "ficha"; keep casing consistent with surrounding translations and run a quick grep for those keys to ensure all occurrences are normalized.app/src/lib/i18n/chunks/fr-4.ts-191-191 (1)
191-191:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winUse a semantic equivalent for “embeddings,” not “integrations.”
Line 191 maps
pages.settings.ai.embeddingstoIntégrations, which changes the feature meaning. Please use a term aligned with vector embeddings (e.g.,EmbeddingsorVectorisations).🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/fr-4.ts` at line 191, The translation for the key pages.settings.ai.embeddings incorrectly uses "Intégrations" which changes the meaning; update the value for pages.settings.ai.embeddings in the fr-4.ts translations to a semantic equivalent for vector embeddings such as "Embeddings" or the French "Vectorisations" (matching capitalization/locale style used elsewhere in the file) so the label reflects vector embeddings rather than integrations.app/src/lib/i18n/chunks/bn-5.ts-492-493 (1)
492-493:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winRemove corrupted i18n separator artifacts from rendered copy.
These values include broken marker text (
[[I18N_SEP_...]]) and a malformed token tail, so users will see raw artifacts instead of readable labels.🛠️ Suggested fix
- 'settings.developerMenu.mcpServer.desc': '[[I18N_SEP_92731]] OpenHuman', + 'settings.developerMenu.mcpServer.desc': + 'Configure external MCP clients to connect to OpenHuman', ... - 'skills.meetingBots.platforms.gmeet': 'zoom.us/j/... [[I18N_SEP_92731]__7]92', + 'skills.meetingBots.platforms.gmeet': 'Google Meet',Based on learnings, English fallback values are acceptable in non-English locale chunks when native translation is pending.
Also applies to: 688-689
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/bn-5.ts` around lines 492 - 493, Remove the corrupted I18N separator artifacts from the i18n values for the affected keys (e.g., 'settings.developerMenu.mcpServer.desc' and the similar keys around the 688-689 region) so the rendered copy shows a clean fallback string; replace values containing patterns like '[[I18N_SEP_92731]] OpenHuman' with a plain human-readable fallback (e.g., 'OpenHuman') or the proper translated text, ensuring no stray marker text or malformed token tails remain.app/src/lib/i18n/chunks/it-1.ts-933-933 (1)
933-933:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winCorrect the STT provider label value.
voice.providers.sttProvidercurrently says “Provider di sintesi vocale” (TTS wording), which mismatches the STT key and can mislead users in settings.🛠️ Suggested fix
- 'voice.providers.sttProvider': 'Provider di sintesi vocale', + 'voice.providers.sttProvider': 'Provider di trascrizione vocale',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/it-1.ts` at line 933, The Italian translation for the key voice.providers.sttProvider is incorrect (it uses TTS wording); update the value for voice.providers.sttProvider to an STT-appropriate label such as "Provider di riconoscimento vocale" (or "Provider di trascrizione vocale") so the key matches its intent and users see the correct label in settings.app/src/lib/i18n/chunks/de-1.ts-1290-1290 (1)
1290-1290:⚠️ Potential issue | 🟡 Minor | ⚡ Quick win
vault.syncedTitlecurrently displays a failure message.Line 1290 uses “fehlgeschlagen” for a success-title key, which inverts success/failure UX feedback after sync.
💡 Suggested fix
- 'vault.syncedTitle': 'Synchronisierung „{name}“ fehlgeschlagen', + 'vault.syncedTitle': '„{name}“ synchronisiert',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/de-1.ts` at line 1290, The translation for the key 'vault.syncedTitle' wrongly reads as a failure message; update the value for the symbol 'vault.syncedTitle' in de-1.ts to a success-oriented string (e.g., replace "Synchronisierung „{name}“ fehlgeschlagen" with a phrase like "Synchronisierung „{name}“ erfolgreich" or similar German success wording) so the title correctly reflects a successful sync event.app/src/lib/i18n/chunks/ko-1.ts-1273-1276 (1)
1273-1276:⚠️ Potential issue | 🟡 Minor | ⚡ Quick win
vault.syncSummary*fragments are semantically swapped.Lines 1274–1276 currently map “failed/skipped/duration” keys to the wrong Korean fragments, so composed sync summaries will read incorrectly.
💡 Suggested fix
- 'vault.syncSummaryFailed': '제거, {count}', - 'vault.syncSummarySkipped': '실패, {count}', - 'vault.syncSummaryDuration': '건너뛰었습니다. {seconds}s', + 'vault.syncSummaryFailed': '실패, {count}', + 'vault.syncSummarySkipped': '건너뜀, {count}', + 'vault.syncSummaryDuration': '· {seconds}s',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/ko-1.ts` around lines 1273 - 1276, The three i18n keys 'vault.syncSummaryFailed', 'vault.syncSummarySkipped', and 'vault.syncSummaryDuration' are mapped to the wrong Korean fragments; update their values so they semantically match the keys (i.e., 'vault.syncSummaryFailed' should contain the failure fragment with the count, 'vault.syncSummarySkipped' should contain the skipped fragment with the count, and 'vault.syncSummaryDuration' should contain the duration fragment with seconds). Locate these keys in ko-1.ts and replace the incorrect strings so each key's value correctly corresponds to failed/skipped/duration messaging respectively.app/src/lib/i18n/chunks/de-1.ts-497-498 (1)
497-498:⚠️ Potential issue | 🟡 Minor | ⚡ Quick win
settings.search.parallelKeyLabelis mapped to an error message instead of a field label.Line 497 currently reads like a failure status, but this key is the input label. That will mislabel the API key field in UI.
💡 Suggested fix
- 'settings.search.parallelKeyLabel': 'Parallel API fehlgeschlagen', + 'settings.search.parallelKeyLabel': 'Parallel API-Schlüssel',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/de-1.ts` around lines 497 - 498, The translation for settings.search.parallelKeyLabel currently contains an error message; update the value for settings.search.parallelKeyLabel to be a proper input label (e.g., "Parallel API Schlüssel" or similar) so the API key field is labelled correctly in the UI; locate the string settings.search.parallelKeyLabel in de-1.ts and replace the erroneous failure-text with the appropriate label text.app/src/lib/i18n/chunks/id-1.ts-767-767 (1)
767-767:⚠️ Potential issue | 🟡 Minor | ⚡ Quick winFix mixed-language typo in message placeholder.
Line 767 has
"Ketik a pesan..."; this should be fully Indonesian to avoid a visible typo in chat input UI.Suggested fix
- 'iosMascot.typeMessage': 'Ketik a pesan...', + 'iosMascot.typeMessage': 'Ketik pesan...',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/id-1.ts` at line 767, The translation key 'iosMascot.typeMessage' contains a mixed-language placeholder "Ketik a pesan..."; update this value to a fully Indonesian phrase (for example "Ketik sebuah pesan..." or "Ketik pesan...") in the id-1.ts chunk so the chat input UI shows a correct Indonesian placeholder; locate the 'iosMascot.typeMessage' entry and replace the string accordingly.app/src/lib/i18n/chunks/es-5.ts-482-482 (1)
482-482:⚠️ Potential issue | 🟡 Minor | ⚡ Quick win
modeSystemtranslation is semantically incorrect.Line 482 uses "Sistema de partidos", which means political party system, not system theme mode. This label will confuse users in appearance settings.
🔧 Suggested fix
- 'settings.appearance.modeSystem': 'Sistema de partidos', + 'settings.appearance.modeSystem': 'Sistema',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/es-5.ts` at line 482, The translation for settings.appearance.modeSystem is incorrect ("Sistema de partidos" is political); update the value for the key settings.appearance.modeSystem to a correct Spanish UI string such as "Seguir la configuración del sistema" or "Usar configuración del sistema" (or "Modo del sistema" if shorter) so it correctly conveys the system theme option in appearance settings.app/src/lib/i18n/chunks/ar-1.ts-1226-1226 (1)
1226-1226:⚠️ Potential issue | 🟡 Minor | ⚡ Quick win
routeToOrchestratoris translated as a failure message, not an action label.Line 1226 currently says "فشل التوجيه إلى المنسق" ("failed to route to orchestrator"), which changes the key meaning and will render incorrect UI copy.
🔧 Suggested fix
- 'notifications.routing.routeToOrchestrator': 'فشل التوجيه إلى المنسق', + 'notifications.routing.routeToOrchestrator': 'التوجيه إلى المنسق',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/ar-1.ts` at line 1226, The translation for the key 'notifications.routing.routeToOrchestrator' is currently a failure message ("فشل التوجيه إلى المنسق"); update its value to an action/label form such as "توجيه إلى المنسق" (or "التوجيه إلى المنسق") so the string conveys the action "Route to orchestrator" instead of a failure state; locate the key 'notifications.routing.routeToOrchestrator' in ar-1.ts and replace the Arabic text accordingly.app/src/lib/i18n/chunks/fr-1.ts-965-965 (1)
965-965:⚠️ Potential issue | 🟡 Minor | ⚡ Quick win
sttProviderlabel currently describes TTS instead of STT.Line 965 maps
voice.providers.sttProviderto "Fournisseur de synthèse vocale" (text-to-speech). This inverts the meaning of the STT selector label in the UI.🔧 Suggested fix
- 'voice.providers.sttProvider': 'Fournisseur de synthèse vocale', + 'voice.providers.sttProvider': 'Fournisseur de reconnaissance vocale',🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/fr-1.ts` at line 965, The translation for the key voice.providers.sttProvider is incorrect (it currently reads as TTS); update the value for voice.providers.sttProvider to a correct French label for STT such as "Fournisseur de reconnaissance vocale" (or "Fournisseur STT") so the UI selector correctly reflects speech-to-text providers instead of text-to-speech; locate the mapping for voice.providers.sttProvider in fr-1.ts and replace the existing string accordingly.
🧹 Nitpick comments (6)
app/src/lib/i18n/chunks/bn-5.ts (1)
1-696: 🏗️ Heavy liftSplit this locale chunk into smaller modules to stay within the size guideline.
This module is ~696 lines, which is beyond the repo’s ~500-line threshold.
As per coding guidelines:
**/*.{ts,tsx,rs}file size should not exceed approximately 500 lines; split oversized modules into smaller focused modules.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/bn-5.ts` around lines 1 - 696, The bn5 translation map constant is too large (~696 lines); split the bn5 object into smaller modules (e.g., bn-5-part1.ts, bn-5-part2.ts) each exporting a partial TranslationMap (unique symbols: the current bn5 constant and its default export), then create an index module that imports and merges those partial maps into a single bn5 object and re-exports it as default; ensure the merged object preserves key order and types (TranslationMap) so existing imports that expect the default export remain unchanged.app/src/lib/i18n/chunks/ar-5.ts (1)
1-683: 🏗️ Heavy liftSplit this locale chunk to stay under the file-size guideline.
This module is ~683 lines, above the repo’s ~500-line target for maintainability.
As per coding guidelines:
**/*.{ts,tsx,rs}file size should not exceed approximately 500 lines; split oversized modules into smaller focused modules.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/ar-5.ts` around lines 1 - 683, The ar5 TranslationMap export (const ar5 / export default ar5) is ~683 lines and exceeds the ~500-line guideline; split the map into smaller modules (e.g., ar-5-partA.ts, ar-5-partB.ts) that each export a partial TranslationMap (named exports like ar5_partA, ar5_partB), then create a small aggregator module that imports those parts and merges them (e.g., const ar5 = { ...ar5_partA, ...ar5_partB } and export default ar5) so the original symbol ar5 remains the single default export consumers use.app/src/lib/i18n/chunks/it-1.ts (1)
1-1329: 🏗️ Heavy liftSplit this locale chunk to meet the module size guideline.
This file is ~1329 lines, well above the repo’s recommended module size.
As per coding guidelines:
**/*.{ts,tsx,rs}file size should not exceed approximately 500 lines; split oversized modules into smaller focused modules.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/it-1.ts` around lines 1 - 1329, This file defines a large TranslationMap constant it1 and exports it (const it1 / export default it1); split it into multiple smaller modules (e.g., multiple files each exporting a partial TranslationMap) so no single .ts exceeds ~500 lines, keep each module importing type { TranslationMap } and exporting its partial object, then add a small aggregator module that imports the partial maps and merges them (Object.assign or spread) into the final it1 constant and re-exports export default it1 so existing imports remain unchanged; ensure keys remain unique and preserve the original export name it1 and the TranslationMap typing.app/src/lib/i18n/chunks/ar-1.ts (1)
4-1310: 🏗️ Heavy liftThis file exceeds the configured TS module size guideline.
Please split this translation map into smaller files/modules to keep maintenance and review manageable.
As per coding guidelines "
**/*.{ts,tsx,rs}: File size should not exceed approximately 500 lines. When a module grows beyond this threshold, split it into smaller, more focused modules with clear responsibilities."🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/ar-1.ts` around lines 4 - 1310, The ar1 translation map (const ar1: TranslationMap / export default ar1) is too large; split it into smaller modules by logical sections (e.g., nav/common/settings/onboarding/voice/memory) and export partial maps (e.g., export const nav = {...}, export const common = {...}) in separate files, then create a small aggregator module that imports those partial maps and merges them into the final TranslationMap before exporting the combined default (replacing the single huge ar1). Ensure keys remain identical and reference ar1/TranslationMap/export default ar1 when locating and replacing the original big map.app/src/lib/i18n/chunks/es-5.ts (1)
4-709: 🏗️ Heavy liftPlease split this file to comply with the TS module size guideline.
This chunk is over the ~500-line guidance and would benefit from further partitioning.
As per coding guidelines "
**/*.{ts,tsx,rs}: File size should not exceed approximately 500 lines. When a module grows beyond this threshold, split it into smaller, more focused modules with clear responsibilities."🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/es-5.ts` around lines 4 - 709, The es-5 translation module (const es5 / export default es5) is too large and should be split into multiple smaller modules: extract logical groups of keys (e.g., settings.* , skills.* , settings.localModel.* , composio.*) into separate files like es-settings.ts, es-skills.ts, es-localModel.ts, etc., each exporting a partial TranslationMap; then create a lightweight aggregator module that imports those partial maps and merges them into the single exported const es5 (e.g., const es5 = { ...settings, ...skills, ...localModel } export default es5) so the runtime shape stays the same while each file stays under the ~500-line guideline.app/src/lib/i18n/chunks/fr-1.ts (1)
4-1340: 🏗️ Heavy liftSplit this module to stay within the repository file-size threshold.
This file is well beyond the ~500-line target, which makes localized review and maintenance harder. Please split this chunk into smaller focused modules.
As per coding guidelines "
**/*.{ts,tsx,rs}: File size should not exceed approximately 500 lines. When a module grows beyond this threshold, split it into smaller, more focused modules with clear responsibilities."🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@app/src/lib/i18n/chunks/fr-1.ts` around lines 4 - 1340, This file defines a huge TranslationMap as const fr1 and default-exports it; split it into multiple smaller modules (e.g., fr1_core, fr1_settings, fr1_onboarding, etc.) each exporting a partial TranslationMap, then import and merge those parts back into the single fr1 object (preserving the const fr1 symbol and the default export) so consumers see the same shape; ensure each chunk imports the TranslationMap type, keep keys grouped logically (navigation, settings, onboarding, voice, mcp, etc.), update any aggregator that imports fr1 to use the merged export, and run a build to confirm no missing keys.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@app/src/lib/i18n/chunks/bn-5.ts`:
- Around line 589-590: The two i18n entries are swapped and the spend string
uses mixed placeholder syntax; swap the values for
'settings.billing.autoRecharge.expires' and
'settings.billing.autoRecharge.spentThisWeek' so the expiry key contains the
expiry label and the spent key contains the spend-with-date text, and normalize
placeholders in the spend string by replacing the nonstandard $__PH1__ and the
duplicated "{date}" with the consistent interpolation tokens used elsewhere
(e.g. ${amount} and ${date}) in the value for
'settings.billing.autoRecharge.spentThisWeek'.
In `@app/src/lib/i18n/chunks/hi-4.ts`:
- Line 303: The translation for the key
'settings.ai.openAiCompat.authHeaderExample' should not localize the HTTP header
tokens; replace the current Hindi-translated string with the exact header
example using English tokens and an untranslated placeholder (e.g.
"Authorization: Bearer <your_key>") so users can copy/paste a valid header
format.
In `@app/src/lib/i18n/chunks/hi-5.ts`:
- Line 289: Revert localization of technical literals: for the i18n key
'skills.create.scopeProjectHint' and any other keys where
paths/filenames/commands were translated, restore the canonical English literals
(e.g. "/.openhuman/skills/", "SKILL.md", "cargo build --bin openhuman-core",
etc.) so users can copy valid paths/commands; locate the keys in
app/src/lib/i18n/chunks/hi-5.ts (including the similar keys flagged in the
review) and replace the translated strings with the original exact
command/path/filename literals.
In `@app/src/lib/i18n/chunks/it-4.ts`:
- Line 306: The translation for the key
'settings.ai.openAiCompat.authHeaderExample' incorrectly localizes the HTTP auth
header; change its value to the protocol-exact header string so users can copy
it verbatim, e.g. replace "Autorizzazione: Portatore <la tua chiave>" with
"Authorization: Bearer <la tua chiave>" (keeping the placeholder language
unchanged).
In `@app/src/lib/i18n/chunks/ko-5.ts`:
- Line 468: The localized string in ko-5.ts contains a translated version of the
CLI token "cargo build --bin openhuman-core"; restore that token to its exact
literal ASCII form and only translate the surrounding prose (keep surrounding
Korean text intact), so the final string reads something like: OpenHuman 바이너리를
찾을 수 없습니다. 소스에서 실행하는 경우 다음을 사용하여 빌드하세요: cargo build --bin openhuman-core —
ensure the command substring "cargo build --bin openhuman-core" is not modified.
---
Outside diff comments:
In `@app/src/lib/i18n/chunks/hi-5.ts`:
- Around line 1-697: This file (const hi5: TranslationMap / export default hi5)
is oversized; split the large translation map into multiple smaller modules
(e.g., hi-5-a.ts, hi-5-b.ts) each exporting a partial TranslationMap (named
exports or default), then create an index module that imports those partials and
merges them into the single hi5 TranslationMap (using object spread or
Object.assign) and re-exports the combined hi5 as the default; update any
imports that currently point to this file to import the new index so consumers
see the same default export.
---
Minor comments:
In `@app/src/lib/i18n/chunks/ar-1.ts`:
- Line 1226: The translation for the key
'notifications.routing.routeToOrchestrator' is currently a failure message ("فشل
التوجيه إلى المنسق"); update its value to an action/label form such as "توجيه
إلى المنسق" (or "التوجيه إلى المنسق") so the string conveys the action "Route to
orchestrator" instead of a failure state; locate the key
'notifications.routing.routeToOrchestrator' in ar-1.ts and replace the Arabic
text accordingly.
In `@app/src/lib/i18n/chunks/bn-3.ts`:
- Line 220: The value for the localization key welcome.localSessionDesc contains
corrupted token text ("skips__ BR__Ans"); update the string for
welcome.localSessionDesc to a clean, valid Bengali sentence (e.g., replace the
corrupted fragment with an appropriate Bengali phrase meaning "uses a local
offline profile") so the UI renders correctly while preserving the key name
welcome.localSessionDesc and surrounding punctuation/quotes.
In `@app/src/lib/i18n/chunks/bn-4.ts`:
- Line 303: The value for the i18n key
'settings.ai.openAiCompat.authHeaderLabel' contains a malformed string; replace
the existing value `'2th head]9'` with a readable label (use an English fallback
such as `'Authorization header'` or an appropriate Bengali translation) so the
key maps to a valid user-facing string; update the literal in the bn-4.ts chunk
where 'settings.ai.openAiCompat.authHeaderLabel' is defined.
In `@app/src/lib/i18n/chunks/bn-5.ts`:
- Around line 492-493: Remove the corrupted I18N separator artifacts from the
i18n values for the affected keys (e.g., 'settings.developerMenu.mcpServer.desc'
and the similar keys around the 688-689 region) so the rendered copy shows a
clean fallback string; replace values containing patterns like
'[[I18N_SEP_92731]] OpenHuman' with a plain human-readable fallback (e.g.,
'OpenHuman') or the proper translated text, ensuring no stray marker text or
malformed token tails remain.
In `@app/src/lib/i18n/chunks/de-1.ts`:
- Line 1290: The translation for the key 'vault.syncedTitle' wrongly reads as a
failure message; update the value for the symbol 'vault.syncedTitle' in de-1.ts
to a success-oriented string (e.g., replace "Synchronisierung „{name}“
fehlgeschlagen" with a phrase like "Synchronisierung „{name}“ erfolgreich" or
similar German success wording) so the title correctly reflects a successful
sync event.
- Around line 497-498: The translation for settings.search.parallelKeyLabel
currently contains an error message; update the value for
settings.search.parallelKeyLabel to be a proper input label (e.g., "Parallel API
Schlüssel" or similar) so the API key field is labelled correctly in the UI;
locate the string settings.search.parallelKeyLabel in de-1.ts and replace the
erroneous failure-text with the appropriate label text.
In `@app/src/lib/i18n/chunks/es-2.ts`:
- Line 100: Update the Spanish i18n entries for the technical mode/auth labels
so they use canonical technical terms: change the value for 'devOptions.local'
from 'locales' to 'Local' and change the value for 'devOptions.token' from
'ficha' to 'Token' in the es-2.ts chunk so the UI displays stable, technical
labels for these options.
In `@app/src/lib/i18n/chunks/es-3.ts`:
- Line 95: Replace the misleading non-technical Spanish strings with stable
technical terms: update the translation value for the key 'backend.local' from
"locales" to "Local"; update the scheduler/tick-related key(s) (e.g., the key
referencing scheduler ticks) to use "ticks" instead of "garrapatas"; and update
the bot token label key(s) (e.g., 'bot.token' or the token field labels) to use
"token" instead of "ficha"; keep casing consistent with surrounding translations
and run a quick grep for those keys to ensure all occurrences are normalized.
In `@app/src/lib/i18n/chunks/es-5.ts`:
- Line 482: The translation for settings.appearance.modeSystem is incorrect
("Sistema de partidos" is political); update the value for the key
settings.appearance.modeSystem to a correct Spanish UI string such as "Seguir la
configuración del sistema" or "Usar configuración del sistema" (or "Modo del
sistema" if shorter) so it correctly conveys the system theme option in
appearance settings.
In `@app/src/lib/i18n/chunks/fr-1.ts`:
- Line 965: The translation for the key voice.providers.sttProvider is incorrect
(it currently reads as TTS); update the value for voice.providers.sttProvider to
a correct French label for STT such as "Fournisseur de reconnaissance vocale"
(or "Fournisseur STT") so the UI selector correctly reflects speech-to-text
providers instead of text-to-speech; locate the mapping for
voice.providers.sttProvider in fr-1.ts and replace the existing string
accordingly.
In `@app/src/lib/i18n/chunks/fr-4.ts`:
- Line 191: The translation for the key pages.settings.ai.embeddings incorrectly
uses "Intégrations" which changes the meaning; update the value for
pages.settings.ai.embeddings in the fr-4.ts translations to a semantic
equivalent for vector embeddings such as "Embeddings" or the French
"Vectorisations" (matching capitalization/locale style used elsewhere in the
file) so the label reflects vector embeddings rather than integrations.
In `@app/src/lib/i18n/chunks/id-1.ts`:
- Line 767: The translation key 'iosMascot.typeMessage' contains a
mixed-language placeholder "Ketik a pesan..."; update this value to a fully
Indonesian phrase (for example "Ketik sebuah pesan..." or "Ketik pesan...") in
the id-1.ts chunk so the chat input UI shows a correct Indonesian placeholder;
locate the 'iosMascot.typeMessage' entry and replace the string accordingly.
In `@app/src/lib/i18n/chunks/id-5.ts`:
- Line 603: Typo in the translation value for the key
'settings.localModel.download.notAvailable' (and the duplicate occurrence) —
replace the incorrect 't/a' string with the intended 'n/a'. Locate the entries
for settings.localModel.download.notAvailable in the id-5.ts chunk (both
occurrences) and update their values from 't/a' to 'n/a' so status text is
consistent.
- Line 687: The i18n entry for 'skills.meetingBots.platformHints.teams' uses the
wrong domain; update the value string to use the correct Teams host by replacing
"team.microsoft.com/..." with "teams.microsoft.com/..." so the example URL is
accurate.
In `@app/src/lib/i18n/chunks/it-1.ts`:
- Line 933: The Italian translation for the key voice.providers.sttProvider is
incorrect (it uses TTS wording); update the value for
voice.providers.sttProvider to an STT-appropriate label such as "Provider di
riconoscimento vocale" (or "Provider di trascrizione vocale") so the key matches
its intent and users see the correct label in settings.
In `@app/src/lib/i18n/chunks/ko-1.ts`:
- Around line 1273-1276: The three i18n keys 'vault.syncSummaryFailed',
'vault.syncSummarySkipped', and 'vault.syncSummaryDuration' are mapped to the
wrong Korean fragments; update their values so they semantically match the keys
(i.e., 'vault.syncSummaryFailed' should contain the failure fragment with the
count, 'vault.syncSummarySkipped' should contain the skipped fragment with the
count, and 'vault.syncSummaryDuration' should contain the duration fragment with
seconds). Locate these keys in ko-1.ts and replace the incorrect strings so each
key's value correctly corresponds to failed/skipped/duration messaging
respectively.
In `@app/src/lib/i18n/chunks/ko-3.ts`:
- Line 218: The localized string key 'welcome.localSessionDesc' contains a
broken sentence ("...건너뜁니다. OAuth.")—replace the value with a single coherent
Korean sentence by removing the stray period and connecting the clauses (for
example: "오프라인 로컬 프로필을 사용하고 TinyHumans를 건너뛰며 OAuth를 사용합니다.") so the copy reads
naturally and includes OAuth as part of the sentence.
---
Nitpick comments:
In `@app/src/lib/i18n/chunks/ar-1.ts`:
- Around line 4-1310: The ar1 translation map (const ar1: TranslationMap /
export default ar1) is too large; split it into smaller modules by logical
sections (e.g., nav/common/settings/onboarding/voice/memory) and export partial
maps (e.g., export const nav = {...}, export const common = {...}) in separate
files, then create a small aggregator module that imports those partial maps and
merges them into the final TranslationMap before exporting the combined default
(replacing the single huge ar1). Ensure keys remain identical and reference
ar1/TranslationMap/export default ar1 when locating and replacing the original
big map.
In `@app/src/lib/i18n/chunks/ar-5.ts`:
- Around line 1-683: The ar5 TranslationMap export (const ar5 / export default
ar5) is ~683 lines and exceeds the ~500-line guideline; split the map into
smaller modules (e.g., ar-5-partA.ts, ar-5-partB.ts) that each export a partial
TranslationMap (named exports like ar5_partA, ar5_partB), then create a small
aggregator module that imports those parts and merges them (e.g., const ar5 = {
...ar5_partA, ...ar5_partB } and export default ar5) so the original symbol ar5
remains the single default export consumers use.
In `@app/src/lib/i18n/chunks/bn-5.ts`:
- Around line 1-696: The bn5 translation map constant is too large (~696 lines);
split the bn5 object into smaller modules (e.g., bn-5-part1.ts, bn-5-part2.ts)
each exporting a partial TranslationMap (unique symbols: the current bn5
constant and its default export), then create an index module that imports and
merges those partial maps into a single bn5 object and re-exports it as default;
ensure the merged object preserves key order and types (TranslationMap) so
existing imports that expect the default export remain unchanged.
In `@app/src/lib/i18n/chunks/es-5.ts`:
- Around line 4-709: The es-5 translation module (const es5 / export default
es5) is too large and should be split into multiple smaller modules: extract
logical groups of keys (e.g., settings.* , skills.* , settings.localModel.* ,
composio.*) into separate files like es-settings.ts, es-skills.ts,
es-localModel.ts, etc., each exporting a partial TranslationMap; then create a
lightweight aggregator module that imports those partial maps and merges them
into the single exported const es5 (e.g., const es5 = { ...settings, ...skills,
...localModel } export default es5) so the runtime shape stays the same while
each file stays under the ~500-line guideline.
In `@app/src/lib/i18n/chunks/fr-1.ts`:
- Around line 4-1340: This file defines a huge TranslationMap as const fr1 and
default-exports it; split it into multiple smaller modules (e.g., fr1_core,
fr1_settings, fr1_onboarding, etc.) each exporting a partial TranslationMap,
then import and merge those parts back into the single fr1 object (preserving
the const fr1 symbol and the default export) so consumers see the same shape;
ensure each chunk imports the TranslationMap type, keep keys grouped logically
(navigation, settings, onboarding, voice, mcp, etc.), update any aggregator that
imports fr1 to use the merged export, and run a build to confirm no missing
keys.
In `@app/src/lib/i18n/chunks/it-1.ts`:
- Around line 1-1329: This file defines a large TranslationMap constant it1 and
exports it (const it1 / export default it1); split it into multiple smaller
modules (e.g., multiple files each exporting a partial TranslationMap) so no
single .ts exceeds ~500 lines, keep each module importing type { TranslationMap
} and exporting its partial object, then add a small aggregator module that
imports the partial maps and merges them (Object.assign or spread) into the
final it1 constant and re-exports export default it1 so existing imports remain
unchanged; ensure keys remain unique and preserve the original export name it1
and the TranslationMap typing.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: d4934d78-bb77-4308-8138-2a2d3ada5d78
📒 Files selected for processing (62)
app/src/lib/i18n/__tests__/coverage.test.tsapp/src/lib/i18n/chunks/ar-1.tsapp/src/lib/i18n/chunks/ar-2.tsapp/src/lib/i18n/chunks/ar-3.tsapp/src/lib/i18n/chunks/ar-4.tsapp/src/lib/i18n/chunks/ar-5.tsapp/src/lib/i18n/chunks/bn-1.tsapp/src/lib/i18n/chunks/bn-2.tsapp/src/lib/i18n/chunks/bn-3.tsapp/src/lib/i18n/chunks/bn-4.tsapp/src/lib/i18n/chunks/bn-5.tsapp/src/lib/i18n/chunks/de-1.tsapp/src/lib/i18n/chunks/de-2.tsapp/src/lib/i18n/chunks/de-3.tsapp/src/lib/i18n/chunks/de-4.tsapp/src/lib/i18n/chunks/de-5.tsapp/src/lib/i18n/chunks/es-1.tsapp/src/lib/i18n/chunks/es-2.tsapp/src/lib/i18n/chunks/es-3.tsapp/src/lib/i18n/chunks/es-4.tsapp/src/lib/i18n/chunks/es-5.tsapp/src/lib/i18n/chunks/fr-1.tsapp/src/lib/i18n/chunks/fr-2.tsapp/src/lib/i18n/chunks/fr-3.tsapp/src/lib/i18n/chunks/fr-4.tsapp/src/lib/i18n/chunks/fr-5.tsapp/src/lib/i18n/chunks/hi-1.tsapp/src/lib/i18n/chunks/hi-2.tsapp/src/lib/i18n/chunks/hi-3.tsapp/src/lib/i18n/chunks/hi-4.tsapp/src/lib/i18n/chunks/hi-5.tsapp/src/lib/i18n/chunks/id-1.tsapp/src/lib/i18n/chunks/id-2.tsapp/src/lib/i18n/chunks/id-3.tsapp/src/lib/i18n/chunks/id-4.tsapp/src/lib/i18n/chunks/id-5.tsapp/src/lib/i18n/chunks/it-1.tsapp/src/lib/i18n/chunks/it-2.tsapp/src/lib/i18n/chunks/it-3.tsapp/src/lib/i18n/chunks/it-4.tsapp/src/lib/i18n/chunks/it-5.tsapp/src/lib/i18n/chunks/ko-1.tsapp/src/lib/i18n/chunks/ko-2.tsapp/src/lib/i18n/chunks/ko-3.tsapp/src/lib/i18n/chunks/ko-4.tsapp/src/lib/i18n/chunks/ko-5.tsapp/src/lib/i18n/chunks/pt-1.tsapp/src/lib/i18n/chunks/pt-2.tsapp/src/lib/i18n/chunks/pt-3.tsapp/src/lib/i18n/chunks/pt-4.tsapp/src/lib/i18n/chunks/pt-5.tsapp/src/lib/i18n/chunks/ru-1.tsapp/src/lib/i18n/chunks/ru-2.tsapp/src/lib/i18n/chunks/ru-3.tsapp/src/lib/i18n/chunks/ru-4.tsapp/src/lib/i18n/chunks/ru-5.tsapp/src/lib/i18n/chunks/zh-CN-1.tsapp/src/lib/i18n/chunks/zh-CN-2.tsapp/src/lib/i18n/chunks/zh-CN-3.tsapp/src/lib/i18n/chunks/zh-CN-4.tsapp/src/lib/i18n/chunks/zh-CN-5.tsapp/src/lib/i18n/ko.ts
Summary
Problem
Solution
app/src/lib/i18n/chunks.app/src/lib/i18n/ko.tsto aggregate theko-1throughko-5chunk files.Submission Checklist
diff-cover) meet the gate enforced by.github/workflows/coverage.yml.pnpm test:coveragepassed locally;pnpm test:rustis reported below under blocked validation because it failed outside the changed surface.N/A: locale catalog/test maintenance only## Related—N/A: no matrix-managed feature rows changeddocs/RELEASE-MANUAL-SMOKE.md) —N/A: translation/catalog onlyCloses #NNNin the## Relatedsection —N/A: no linked issue for this branchImpact
Related
N/AN/AAI Authored PR Metadata (required for Codex/Linear PRs)
Linear Issue
N/AN/ACommit & Branch
fix/i18n-backfill-locale-translations70c4f9eeaValidation Run
pnpm --filter openhuman-app format:checkpnpm typecheckpnpm --dir app exec vitest run src/lib/i18n/__tests__/coverage.test.tsPre-push hook ran cargo fmt --check and cargo check; no Rust files changedPre-push hook ran app/src-tauri cargo fmt --check and cargo check; no Tauri files changedValidation Blocked
command: pnpm test:rusterror: FAILED outside changed surface with 5 failing tests: openhuman::credentials::ops::tests::store_session_local_token_succeeds_without_network_and_forces_local_user_id, openhuman::meet_agent::rpc::tests::push_then_poll_returns_audio_after_brain_turn, openhuman::memory_tree::tools::query_global::tests::execute_accepts_window_days_alias, openhuman::memory_tree::tools::memory_tree_dispatcher_tests::memory_tree_query_global_mode_dispatches_successfully, openhuman::security::policy::tests::dotfile_in_workspace_allowedimpact: full local Rust merge-gate validation could not be claimed green from this branch; failures appear unrelated to the locale-only diffBehavior Changes
Parity Contract
Duplicate / Superseded PR Handling
N/A#2588updatedSummary by CodeRabbit