fix(ui): localize mobile pairing in Hindi and Russian#100040
Conversation
|
Codex review: needs real behavior proof before merge. Reviewed July 4, 2026, 3:14 PM ET / 19:14 UTC. Summary Reproducibility: yes. Source inspection of current main shows Hindi and Russian nodes.pairing strings still contain English mobile-pairing copy, while the PR head replaces those strings. Review metrics: 1 noteworthy metric.
Stored data model Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Next step before merge
Security Review detailsBest possible solution: Land the narrow locale-bundle and i18n-test follow-up after current-head CI/maintainer gates complete, keeping the generated locale metadata consistent with the UI i18n pipeline. Do we have a high-confidence way to reproduce the issue? Yes. Source inspection of current main shows Hindi and Russian nodes.pairing strings still contain English mobile-pairing copy, while the PR head replaces those strings. Is this the best way to solve the issue? Yes. Updating the generated locale bundles plus adding focused i18n guards is the narrowest maintainable fix for untranslated Control UI mobile-pairing copy. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against d102715bb232. Label changesLabel changes:
Label justifications:
Evidence reviewedWhat I checked:
Likely related people:
What the crustacean ranks mean
Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics. How this review workflow works
Review history (7 earlier review cycles)
|
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: ad8d7d3ca1
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| @@ -417,6 +426,22 @@ export const ar: TranslationMap = { | |||
| collapse: "طي الشريط الجانبي", | |||
| resize: "تغيير حجم الشريط الجانبي", | |||
| }, | |||
| terminal: { | |||
| title: "Terminal", | |||
| toggle: "Toggle terminal", | |||
There was a problem hiding this comment.
Translate terminal labels before clearing fallback metadata
When a non-English locale is selected and the new terminal panel is opened, these newly added terminal.* strings render in English because the locale bundles contain the English source text instead of real translations. The corresponding .i18n/*.meta.json files also report fallbackKeys: [], so the new metadata-only fallback test will pass while users in Arabic/German/etc. still see English terminal controls; regenerate or mark the actual fallbacks before shipping.
Useful? React with 👍 / 👎.
Mantis Telegram Desktop ProofSummary: Mantis captured native Telegram Desktop before/after GIFs for oversized document handling.
Motion-trimmed clips: Raw QA files: https://artifacts.openclaw.ai/mantis/telegram-desktop/pr-100040/run-28716540169-1/index.json |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 07d8062f03
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| if (context.existingEntry.sessionId !== params.initialEntry.sessionId) { | ||
| return null; |
There was a problem hiding this comment.
Do not adopt rows skipped by the session-id guard
When the persisted row's sessionId no longer matches initialEntry.sessionId, this returns null, but the underlying session accessor treats a null patch as “skip saving” and returns the current existing row. That means a turn whose snapshot was rejected after a session reset/rotation is reported to callers as successfully persisted with the replacement row, so later cleanup/delivery code can adopt and mutate metadata for the new session instead of treating the write as stale. Track this mismatch like a rejected guard and return undefined/a stale-session error rather than the replacement entry.
Useful? React with 👍 / 👎.




Related: #94672
What Problem This Solves
Fixes an issue where users running the Control UI in Hindi or Russian still see English copy throughout the mobile-pairing flow.
Why This Change Was Made
The 15 mobile-pairing strings in each affected locale are now localized. Focused regression tests prevent recorded locale fallbacks or untranslated mobile-pairing copy from shipping again. This is an AI-assisted maintainer follow-up to #94672.
User Impact
Hindi and Russian users now see localized setup-code, QR, pending-review, help, and device-management messages. All 20 shipped Control UI locales remain clean with zero recorded fallbacks.
Evidence
node --import tsx scripts/control-ui-i18n.ts check— passed after rebase; 20/20 locales clean, zero fallbacksnode scripts/run-vitest.mjs test/scripts/control-ui-i18n.test.ts ui/src/i18n/test/translate.test.ts— passed after rebase; 2 shards, 19 testsnode scripts/run-tsgo.mjs -p test/tsconfig/tsconfig.test.ui.json --incremental --tsBuildInfoFile .artifacts/tsgo-cache/test-ui.tsbuildinfo— passed after current-lockfile install.agents/skills/autoreview/scripts/autoreview --mode local ...— clean; no accepted/actionable findingsgit diff --check— passed