Fix remote tmux mirror pane titles#7836
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
|
Note Reviews pausedIt looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
📝 WalkthroughWalkthroughRemote tmux mirrors now derive pane titles from the remote window name and pane order. Multi-pane titles receive indexed suffixes, duplicate pane IDs are rejected, CI uses a dual-Xcode runner, and tests cover title transitions and validation. ChangesRemote tmux mirror titles
Layout validation
CI runner selection
Estimated code review effort: 3 (Moderate) | ~25 minutes Sequence Diagram(s)sequenceDiagram
participant RemoteTmux
participant RemoteTmuxSessionMirror
participant RemoteTmuxWindowMirror
participant TerminalController
RemoteTmux->>RemoteTmuxSessionMirror: provide window and pane state
RemoteTmuxSessionMirror->>RemoteTmuxWindowMirror: provide window title
RemoteTmuxWindowMirror->>RemoteTmuxWindowMirror: map pane IDs to ordered indices
RemoteTmuxWindowMirror->>TerminalController: publish titled control surfaces
Possibly related issues
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 23 | ❌ 2❌ Failed checks (2 warnings)
✅ Passed checks (23 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
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. Comment |
Greptile SummaryThis PR fixes remote tmux mirror pane titles and updates the related test and CI support. The main changes are:
Confidence Score: 5/5This looks safe to merge.
Important Files Changed
Reviews (14): Last reviewed commit: "ci: match the repo's pinned setup-node v..." | Re-trigger Greptile |
There was a problem hiding this comment.
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
Resources/Localizable.xcstrings (1)
133936-133940: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winUse the standard Korean macOS term for “window”.
Change
tmux 창totmux 윈도우; this key is shown as the fallback title for unnamed remote tmux windows, so the current value uses the wrong macOS UI terminology.Proposed fix
- "value": "tmux 창" + "value": "tmux 윈도우"🤖 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 `@Resources/Localizable.xcstrings` around lines 133936 - 133940, Update the Korean localization value for the relevant tmux window fallback title in the "en" stringUnit from "tmux 창" to "tmux 윈도우", preserving the existing key and localization structure.Source: Learnings
🤖 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.
Outside diff comments:
In `@Resources/Localizable.xcstrings`:
- Around line 133936-133940: Update the Korean localization value for the
relevant tmux window fallback title in the "en" stringUnit from "tmux 창" to
"tmux 윈도우", preserving the existing key and localization structure.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: ASSERTIVE
Plan: Pro
Run ID: 25ba900b-cbb2-4bd8-86b8-1a9c42c8b489
📒 Files selected for processing (3)
Resources/Localizable.xcstringsSources/RemoteTmuxWindowMirror+Bonsplit.swiftSources/RemoteTmuxWindowMirror.swift
This comment has been minimized.
This comment has been minimized.
…-7832-mirror-window-names
The warp-macos-15 runner image dropped node from the job PATH on 2026-07-10, failing every branch (including main) in app-host unit tests shard 4 with 'exec: node: not found'. The claude wrapper tests build fake claude binaries that exec node, so they now resolve a node runtime themselves (shutil.which plus Homebrew/nvm/volta locations), prepend it to PATH, and skip with a message only when node is truly absent — same pattern as the existing bun skip in test_pi_extension_install.py. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
There was a problem hiding this comment.
Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.
❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.
Reviewed by Cursor Bugbot for commit 0cab431. Configure here.
MACOS_RUNNER_15 was flipped to the tart-macos-15 fleet at 09:17 UTC today and its VM image has no node on the runner PATH, so the claude wrapper regressions (fake claude binaries that exec node) failed on every branch including main. Probe for an image-provided node first (PATH, Homebrew prefixes) and export it to GITHUB_PATH; only when the image truly has none, install a pinned node via actions/setup-node. This keeps the wrapper coverage running instead of silently relying on the test-side skip. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
release.yml and nightly.yml already pin actions/setup-node v6.4.0 for the same runners-without-node failure mode; use the identical pin here. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>

Closes #7832
Root cause
Multi-pane remote-tmux windows had split title ownership. The outer mirror tab used the authoritative tmux window name from
RemoteTmuxWindow.name, but inner mirrored pane surfaces exposed titles from pane-level data, and the control/tree projection preferred tmuxpane-border-format. On stock tmux that format expands to raw values like0 "hostname", so the window name disappeared only in the multi-pane path.Fix
RemoteTmuxWindowMirrornow adopts the authoritative tmux window display title from eachRemoteTmuxWindowupdate and derives every inner pane surface/tab title from that one value, with deterministic pane suffixes (logs,logs [1],logs [2]). Pane-border-format remains only pane-header label state and no longer becomes the surface title.Tests
Added behavior coverage through the real control-mode title pipeline using captured
list-windowsandlist-panesreplies:Local allowed checks:
git diff --check HEAD~2..HEADpassed./scripts/lint-pbxproj-test-wiring.shpassedpython3 scripts/swift_file_length_budget.pyreports the pre-existingorigin/mainAutomationSocketUITests budget mismatch (551actual vs528budget), with no touched file over budgetNote: per task constraints, I did not run local xcodebuild, reload, or any cmux socket/app dogfood commands.
Need help on this PR? Tag
/codesmithwith what you need. Autofix is disabled.Note
Medium Risk
Changes user-visible remote-tmux titles and control-socket surface names; layout parsing now drops malformed duplicate-pane layouts. CI-only changes are low product risk.
Overview
Fixes #7832 by making remote tmux mirror inner pane and control-surface titles follow the tmux window name, not pane-border labels, foreground command, or CWD.
RemoteTmuxWindowMirrornow keeps an authoritativewindowTitlefrom eachRemoteTmuxWindowupdate and builds tab titles viawindowPaneTitle— base name for the first pane, then localized indexed suffixes (logs,logs [1], …). Control topology projection uses the sametitle(forPane:)path.RemoteTmuxRawLayoutParserrejects layouts with duplicate pane IDs. New localization keys cover the window fallback and indexed pane pattern; app-host tests cover multi-pane, single-pane, and single→multi transitions through the control surface list.CI:
swift-package-testsruns onvars.MACOS_RUNNER_DUAL_XCODE(SDK 15 helper build, then SDK 26 package tests). App-host focused regressions detect or install Node 20 when the runner image lacksnode; Python wrapper tests usetests/node_runtime.pyto repair PATH or skip. Runner docs and workflow guard tests were updated for the dual-Xcode variable.Reviewed by Cursor Bugbot for commit 3f472d3. Bugbot is set up for automated code reviews on this repo. Configure here.
Summary by cubic
Fixes #7832 by unifying all remote tmux mirror pane and control titles on the tmux window name with a localized fallback. CI routes
swift-package-teststo the dual-Xcode runner and guarantees Node.js for wrapper regressions, pinningactions/setup-node@v6.4.0to install Node 20 when absent.Bug Fixes
RemoteTmuxWindowMirror; pane-border labels, command, and CWD no longer affect titles.title(forPane:).RemoteTmuxRawLayoutParserrejects duplicate pane IDs.Tests
remoteTmux.tab.windowandremoteTmux.tab.windowPaneIndexed.swift-package-testsruns onvars.MACOS_RUNNER_DUAL_XCODE; wrapper regressions ensure Node.js is on PATH and install Node 20 viaactions/setup-node@v6.4.0when missing. Tests usetests/node_runtime.pyto repair PATH or skip when truly unavailable.Written for commit 3f472d3. Summary will update on new commits.
Summary by CodeRabbit
New Features
Bug Fixes
Tests
Chores