Skip to content

fix(settings): stop promising a Tailscale QR the pairing window no longer shows - #14817

Merged
teamleaderleo merged 1 commit into
manaflow-ai:mainfrom
aliyansajid:fix/14763-pairing-settings-copy
Sep 26, 2026
Merged

teamleaderleo merged 1 commit into
manaflow-ai:mainfrom
aliyansajid:fix/14763-pairing-settings-copy

Conversation

@aliyansajid

@aliyansajid aliyansajid commented Sep 26, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Settings → Mobile still labeled its pairing button "Show Tailscale QR…", with the subtitle "Use this QR only to pair through Tailscale". The window it opens stopped showing a QR when pairing moved to IROH v2 (#12326). It now asks you to sign in to the same account on the iPhone. So in #14763 the user clicked "QR code" and got a page with nothing to scan.

The row now says what the window does. The button reads Open Pairing… and the subtitle reads "Sign in to cmux on your iPhone with the same account and it connects automatically. No QR code is needed." Both strings are updated in all nine macOS locales, using each locale's existing term for pairing. The Settings search synonyms still include "qr", so someone searching for it lands on this row and its explanation.

Part of #14763. Two things stay open:

  • The report's other half, entering a Tailscale IP directly in the iOS app, is iPhone-side. I couldn't test it without a device.
  • The iOS app still says "Scan the Mac's pairing QR, or enter its numeric Tailscale IP and port" (Packages/iOS/CmuxMobileShellUI/Sources/CmuxMobileShellUI/PairingView.swift:108, plus "Scan QR Code" at :155). The Mac no longer shows that QR in any reachable state, so that copy needs the same decision on the iOS side.

Testing

  • python3 scripts/localization_catalog.py check and ./scripts/localize-changes report 0 parity errors. The catalog diff is only these two keys.
  • python3 scripts/verify-local.py --swift-changed origin/main: 13/13 checks pass.
  • Checked live in a tagged build (fix-14763-pairing-copy, commit 0cea163d2c; the final commit 4c3f84e only changes the Spanish button text). Settings → Mobile shows "Mobile Pairing / Open Pairing…" with the new subtitle, and the button opens "Pair your iPhone", which asks for sign-in and shows no QR.
  • No regression test: this is a label change with no behavior to assert beyond the catalog checks above.

Checklist

  • Localization audited: both changed strings have all nine macOS locales. There is no web or docs copy for this row.
  • Reviewed with a subagent before merge

View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Fixes the Settings → Mobile pairing row so it no longer promises a Tailscale QR code, which the pairing window stopped showing after pairing moved to IROH v2 (#12326). The button now reads "Open Pairing…" and the subtitle explains signing in on the iPhone instead. Both strings are updated in all nine macOS locales; Settings search synonyms still include "qr" so users land on the row and its explanation.

Part of #14763. Two follow-ups remain: the iPhone-side copy still tells users to scan the Mac's QR code, and the option to enter a Tailscale IP directly in the iOS app needs the same treatment.

Written for commit 4c3f84e. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Mobile Pairing
    • Updated the pairing action label to “Open Pairing…”.
    • Updated the instructions to explain that signing in to cmux on an iPhone with the same account connects devices automatically; no QR code is needed.
    • Updated the pairing text in English, Japanese, Simplified Chinese, German, French, Arabic, Spanish, Traditional Chinese, and Korean.

@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@coderabbitai

coderabbitai Bot commented Sep 26, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: 3a7ecac1-935f-4817-92b2-2c6c6f52b042

📥 Commits

Reviewing files that changed from the base of the PR and between 4061427 and 4c3f84e.

📒 Files selected for processing (3)
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Environment/SettingsHostActions.swift
  • Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/MobileSection.swift
  • Resources/Localizable.xcstrings

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 8 remain after this review.


📝 Walkthrough

Walkthrough

The mobile pairing action now says to sign in to cmux on an iPhone with the same account for automatic connection. Its label changes to “Open Pairing…”, and the text states that no QR code is needed.

Changes

Mobile pairing copy

Layer / File(s) Summary
Pairing action label and description
Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Sections/MobileSection.swift, Resources/Localizable.xcstrings, Packages/macOS/CmuxSettingsUI/Sources/CmuxSettingsUI/Environment/SettingsHostActions.swift
The action label changes to “Open Pairing…”. The settings description, localized help text, and openMobilePairingWindow documentation describe same-account sign-in on iPhone and state that no QR code is needed.

Priority: ⬇️ Low

Estimated code review effort: 2 (Simple) | ~5 minutes

Change: Bug fix

Merge Risk: ⚪ Minimal · up to 4c3f8

The updated Settings text matches the sign-in pairing flow, and the translations follow the repository’s locale requirement. No identified issue blocks merging.

🚥 Pre-merge checks | ✅ 25
✅ Passed checks (25 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly identifies the main change: the pairing window no longer shows a Tailscale QR code, so the Settings label must stop promising one.
Description check ✅ Passed The description clearly explains the problem, resulting UI behavior, localization updates, testing performed, known follow-ups, and why no regression test was added. It is mostly complete, although it…
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check. Docstring coverage is scoped to functions touched by this diff. Analyzed 0 functions across 2…
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Cmux Cloud Persistent Session And Early Input ✅ Passed PASS: The authoritative PR diff changes only macOS pairing documentation/UI strings and localized text in three files. It does not change Cloud terminal creation, cmux-tui transport, renderers, input …
Cmux Swift Actor Isolation ✅ Passed The PR changes only comments and user-facing string literals. It does not add or alter models, protocols, Sendable reference types, isolation annotations, or background access. The existing `SettingsH…
Cmux Swift Blocking Runtime ✅ Passed The pull request changes only Swift documentation and user-facing localization/text literals. It adds no semaphores, waits, sleeps, delayed dispatch, polling, main-queue synchronization, or manual loc…
Cmux Browser Automation Off-Main ✅ Passed The pull request changes only mobile pairing documentation and localized strings. The review-scoped diff contains no browser socket automation commands, WebKit/AppKit worker routing, or related policy…
Cmux Expensive Synchronous Load ✅ Passed The PR changes only pairing documentation and localized UI strings in two Swift files and Resources/Localizable.xcstrings. It does not add or move any synchronous agent-history, transcript, JSONL, d…
Cmux Cache Substitution Correctness ✅ Passed The PR changes only pairing copy: one Swift documentation comment, the existing button/subtitle literals, and localized string values. The button still calls hostActions.openMobilePairingWindow(). T…
Cmux No Hacky Sleeps ✅ Passed PASS. The pull request changes only two Swift settings files and Resources/Localizable.xcstrings. It introduces no TypeScript, JavaScript, shell, or build/runtime-script changes, and the diff contai…
Cmux Algorithmic Complexity ✅ Passed The PR changes only user-facing strings and a documentation comment in three files. It adds no loops, collection scans, sorting, filtering, joins, persistence queries, or runtime-path algorithm change…
Cmux Swift Concurrency ✅ Passed The pull request changes only pairing documentation, button/subtitle strings, and localized values. It does not add or expand Dispatch queues, Combine state, completion-handler APIs, or fire-and-forge…
Cmux Swift @Concurrent ✅ Passed The Swift diff only changes pairing documentation and UI string literals. It adds no async, nonisolated, @concurrent, actor isolation, or async call-site changes. Therefore, it does not trigger …
Cmux Swift Package Boundaries ✅ Passed The diff changes only pairing copy in MobileSection and a documentation comment in SettingsHostActions, plus localized strings. MobileSection already belongs to the CmuxSettingsUI SwiftPM targ…
Cmux Swiftpm Lockfiles ✅ Passed The pull request changes only two macOS SwiftUI source files and Resources/Localizable.xcstrings. It does not change a Package.swift, Package.resolved, .gitignore, workflow, Xcode project pack…
Cmux Swift Logging ✅ Passed PASS. The Swift changes only update pairing documentation and the user-facing button/subtitle strings. The diff adds no print, debugPrint, dump, NSLog, Logger, file logging, stdout/stderr logging, or …
Cmux User-Facing Error Privacy ✅ Passed PASS. The changed text reaches end users through Settings → Mobile, but it is normal pairing guidance, not an error, alert, command output, API error body, or recovery message. The new English and nin…
Cmux Full Internationalization ✅ Passed The PR changes only the pairing documentation and two existing user-facing localization keys. MobileSection.swift routes both defaults through String(localized:defaultValue:), and `Resources/Local…
Cmux Swiftui State Layout ✅ Passed The SwiftUI diff only changes pairing copy and the button label. It does not add or modify ObservableObject/@published state, GeometryReader layout measurement, lazy/list row store references, or rend…
Cmux Architecture Rethink ✅ Passed The PR changes only pairing comments, localized strings, and the button's user-visible label. The existing single action path remains hostActions.openMobilePairingWindow(). The diff adds no timing, …
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS. The PR changes only pairing copy: a documentation comment, two localized/default strings, and the button label. The openMobilePairingWindow() call and all window behavior remain unchanged. The…
Cmux Source Artifacts ✅ Passed The PR changes only two hand-written Swift source files and the tracked localization catalog: SettingsHostActions.swift, MobileSection.swift, and Resources/Localizable.xcstrings. The diff contai…
Cmux No Test Or Debug Seam In Production Source ✅ Passed The PR changes only pairing documentation and user-facing strings in two production Swift files, plus localization data. The added Swift lines contain no #if DEBUG or test-build guard, test/debug-na…
✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create a new PR

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@teamleaderleo
teamleaderleo merged commit 909fcc7 into manaflow-ai:main Sep 26, 2026
71 of 72 checks passed
@teamleaderleo

Copy link
Copy Markdown
Collaborator

Merged, thanks @aliyansajid :)

@github-actions

Copy link
Copy Markdown
Contributor

Merge receipt for 4c3f84ef93: every check was green at merge (20 verified; 18 skipped by policy). Full suite runs on main after merge.

rustybret pushed a commit to rustybret/bmux that referenced this pull request Sep 26, 2026
2123231 fix(cloud): offer Pi in the cloud agent menu and vm.cloud_agent_open (manaflow-ai#14819)
909fcc7 fix(settings): stop promising a Tailscale QR the pairing window no longer shows (manaflow-ai#14817)
5d2bc04 fix(custom-sidebar): render Menu nodes so context-menu submenus appear (manaflow-ai#14808)
45815f7 Keep a collapsed sidebar group folded when the workspace below it closes (manaflow-ai#10169)
4bf0ea0 perf(shell): stop spawning tmux and rm on every prompt when idle (manaflow-ai#14833)
443d050 perf: skip the per-flush stat and mkdir in the event log writer (manaflow-ai#14828)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants