fix(google-meet): force English Meet UI via hl=en so automation works on any locale#89671
Conversation
|
Codex review: passed. Reviewed July 3, 2026, 10:59 AM ET / 14:59 UTC. Summary PR surface: Source +18, Tests +19. Total +37 across 6 files. Reproducibility: yes. Current main opens raw Meet URLs while the browser automation matches English-only labels, and the PR body provides after-fix CDP output showing non-English pages render expected English labels with Review metrics: 1 noteworthy metric.
Merge readiness Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch. Rank-up moves:
Risk before merge
Maintainer options:
Next step before merge
Security Review detailsBest possible solution: Land the focused plugin-local URL-language seam under exact-head automerge if maintainers accept the visible English UI behavior and the reused-tab limitation. Do we have a high-confidence way to reproduce the issue? Yes. Current main opens raw Meet URLs while the browser automation matches English-only labels, and the PR body provides after-fix CDP output showing non-English pages render expected English labels with Is this the best way to solve the issue? Yes, likely. Applying the language parameter at the plugin's browser-open seam is narrower and less drift-prone than adding localized regexes throughout the DOM automation script. AGENTS.md: found and applied where relevant. Codex review notes: model internal, reasoning high; reviewed against e272da5c5579. Label changesLabel justifications:
Evidence reviewedPR surface: Source +18, Tests +19. Total +37 across 6 files. View PR surface stats
What 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
|
…rnational locales
7b63849 to
069bdcd
Compare
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
|
🦞🧹 I asked ClawSweeper to review this item again. Re-review progress:
|
…on works on any locale Replace the per-locale label regex approach with one seam: append hl=en to every Meet URL the plugin opens (join + create), so the existing English DOM matchers work regardless of the account/browser language. Live-verified on a signed-in zh-TW profile: meeting pre-join and the /new redirect both honor hl=en and keep it through navigation. Also match the 'Join here too' switch-here dialog button and keep the created meeting link canonical by stripping query/hash from meetingUri.
|
@clawsweeper re-review |
|
🦞🧹 I asked ClawSweeper to review this item again. |
|
@clawsweeper automerge |
|
🦞✅ Source: What merged:
Automerge notes:
The automerge loop is complete. Automerge progress:
|
|
The issue is real, and the solution is reasonable. Given the constraint of not making major design changes, this is currently the best solution. Since openclaw joins the meeting itself, changing the page to English theoretically won't affect users. |
… on any locale (openclaw#89671) Summary: - The branch adds `forceMeetEnglishUi()` for Google Meet URLs, applies it to join/create browser opens, canonicalizes browser-created meeting links, and updates focused Google Meet tests. - PR surface: Source +18, Tests +19. Total +37 across 6 files. - Reproducibility: yes. Current main opens raw Meet URLs while the browser automation matches English-only lab ... R body provides after-fix CDP output showing non-English pages render expected English labels with `hl=en`. Automerge notes: - PR branch already contained follow-up commit before automerge: chore(tooling): add unused agent-cache-store files to knip optional a… - PR branch already contained follow-up commit before automerge: fix(google-meet): repair non-Latin mic regex matching boundary - PR branch already contained follow-up commit before automerge: revert(tooling): preserve current main deadcode allowlist guard - PR branch already contained follow-up commit before automerge: revert(tooling): perfectly match origin/main deadcode list - PR branch already contained follow-up commit before automerge: revert: match origin/main deadcode list exactly Validation: - ClawSweeper review passed for head 880a41b. - Required merge gates passed before the squash merge. Prepared head SHA: 880a41b Review: openclaw#89671 (comment) Co-authored-by: Chen Chia Yang <[email protected]> Approved-by: hxy91819
What Problem This Solves
The Google Meet browser automation script matches English UI labels (
join now|ask to join,leave call,turn (off|on) microphone,your name, caption selectors). When the browser profile or Google account uses another language (e.g. Traditional Chinese), every DOM matcher goes blind: the bot cannot click join, detect in-call state, mute/unmute, or enable captions.Why This Change Was Made
An earlier revision of this PR translated ~15 regex literals into 6 hand-picked languages. Review showed that approach is fragile (unanchored alternates like
unirse,退出,登入, and barenamefalse-positive on unrelated buttons/inputs;activar micrófonois a substring ofDesactivar micrófono, inverting mute detection) and still one-sided (chrome-create.tsuntouched, all other locales still broken).This revision fixes it at one seam instead: append
hl=en(Google's standard UI-language parameter) to every Meet URL the plugin opens, so the Meet page always renders English labels and the existing matchers work for all locales — join and create flows both.forceMeetEnglishUi()inchrome-browser-proxy.ts, applied at both/tabs/opencall sites (chrome.tsjoin flow,chrome-create.tscreate flow).?hl=enlink.Join here toobutton (the "Switch here?" dialog shown when the same account is already in the meeting on another device — the scenario from the original repro).normalizeMeetUrlForReusecompares by pathname only.Known limitation: a pre-existing Meet tab the user opened manually in a non-English locale is reused as-is (focus only, no navigation) — same behavior as before this PR; tabs opened by the plugin always carry
hl=en.User Impact
Meet join, talk-back, transcription, and meeting creation work on any account/browser locale. The automated Meet tab renders in English (visible if the browser window is watched); shared meeting links stay canonical.
Evidence
Live-verified over CDP against a signed-in zh-TW Edge profile (Arch Linux, Edg 147):
https://meet.google.com/landing→lang="zh-TW", buttons發起會議/加入;https://meet.google.com/landing?hl=en→lang="en", buttonsNew meeting/Join.https://meet.google.com/qeo-ngsk-cqw?hl=en→lang="en",Join now,Use Companion mode(withouthl=en:立即加入).https://meet.google.com/new?hl=en→ redirect lands onhttps://meet.google.com/yyr-vogp-vft?hl=en(param preserved), in-call UI English:Turn off microphone,Share screen.Second locale, live-verified over CDP against a signed-out Japanese Chromium 148 (
--lang=ja --accept-lang=ja-JP,ja, fresh profile):https://meet.google.com/qeo-ngsk-cqw→lang="ja", buttonsホーム画面に戻る,マイクとカメラを使用せずに続行; same URL with?hl=en→lang="en",Return to home screen,Continue without microphone and camera(the exact mic-choice label the automation matches). This also covers the signed-out/guest path, complementing the signed-in zh-TW run.Local validation:
pnpm test extensions/google-meet→ 10 files, 168 tests passed (includes newforceMeetEnglishUiunit tests and updated/tabs/openURL assertions);pnpm tsgo:extensionsandpnpm tsgo:test:extensionsclean; oxlint/oxfmt clean.Not tested: other locales beyond zh-TW (signed-in) and ja (guest) — the fix is locale-independent by construction since the page always renders English.