Skip to content

fix: prefer Ghostty inherited cwd for terminal creation - #7614

Closed
austinywang wants to merge 31 commits into
mainfrom
pr-7292-cwd-inheritance-fix
Closed

austinywang wants to merge 31 commits into
mainfrom
pr-7292-cwd-inheritance-fix

Conversation

@austinywang

@austinywang austinywang commented Jul 8, 2026 •

Copy link
Copy Markdown
Contributor

Replacement for external PR #7292, which could not be updated because GitHub reports push=false for the current token on jleechanorg/cmux despite maintainerCanModify=true.\n\nSummary:\n- merge current origin/main into the PR work\n- share terminal startup cwd resolution across split and inherited new-tab paths\n- prefer Ghostty's live inherited cwd for local live terminal sources\n- preserve explicit cwd, restored auto-resume rescue, guarded restore cwd, and remote terminal cwd behavior\n\nVerification:\n- python3 scripts/swift_file_length_budget.py\n- git diff --check origin/main...HEAD\n- /Users/austinwang/manaflow/cmuxterm-hq/skills/review/autoreview/scripts/autoreview --mode branch --base origin/main\n\nNot run: local xcodebuild/app launch/XCUITests, per PR iteration constraints.


View with Codesmith Autofix with Codesmith
Need help on this PR? Tag /codesmith with what you need. Autofix is disabled.


Note

High Risk
Removing transcript snapshots and post-teardown restore monitoring materially increases risk of agent session data loss on hibernation, and CI/SwiftPM tolerance changes could let real failures slip through if diagnostics are misclassified.

Overview
This diff is mostly infrastructure and lifecycle refactors, not the Ghostty cwd work described in the PR title (only a small remote-directory guard in command-click file open appears here).

Agent hibernation is greatly simplified: the whole Claude transcript snapshot / restore-monitor stack (AgentHibernationTranscriptGuard and related teardown types) is deleted. After the idle confirmation window, the controller now SIGTERM-scoped processes and calls enterAgentHibernation directly, with planner logic inlined and a process-based fingerprint fallback when scrollback is unavailable. Eligibility no longer excludes panes that only have a live process.

macOS hosted browser sign-in drops default-browser handoff (openExternalURL, handedOffAttemptID). A non-auth WebAuth completion stops the sign-in UI but keeps the attempt alive for a late cmux:// callback; handoff-specific tests are removed and replaced.

iOS mobile shell skips queued render-grid frames older than the delivered high-water mark and ties replay-barrier ack to bypass deliveries, with new unit tests.

CI / release: App Store provisioning defaults and workflow copy move to com.cmuxterm.app; primary profile secret is strict; SwiftPM tests go through run_swift_package_tests with scoped cosmetic-failure tolerance; iOS xcodebuild may pass when tests succeeded before simulator diagnostics time out; the App Store lane identity check is removed. Swift file-length budgets are bumped for several large sources.

Settings window presentation is consolidated (no deminiaturize settle loop / verification unhide); navigation delivery uses the shared presenter again from SettingsWindowHostRoot.

Reviewed by Cursor Bugbot for commit 9bb24b7. Bugbot is set up for automated code reviews on this repo. Configure here.


Summary by cubic

Prefer Ghostty’s inherited cwd for terminal splits and eligible new tabs, and tighten cwd fallback so remote paths never influence local startup or UI. Also discard stale mobile terminal render frames and carry replay‑barrier acks to keep streams unblocked.

  • Bug Fixes

    • Inheritance: when the source is prompt‑idle, use Ghostty’s inherited workingDirectory from the exact config source; otherwise fall back to tracked cwd, then live foreground cwd; explicit workingDirectory still wins.
    • Startup commands: clear inherited cwd in the config template; for remote startup or explicit local commands from a remote pane, spawn in a safe local home that isn’t persisted, and adopt the remote cwd only after it’s reported.
    • Guarding: skip cwd inheritance for remote panes, restore‑guarded panes, and pending/running auto‑resume; rescue now covers the awaiting state and prefers live cwd once running.
    • Local fallbacks: route callers through terminalRequestedWorkingDirectoryForLocalFallback so remote‑sourced or trust‑guarded paths never feed local startup fallback, window title, file open, mobile payloads, tmux topology, or layout capture; avoid using a remote currentDirectory as a local startup cwd.
    • Mobile terminal output: drop queued render‑grid frames older than the delivered high‑water mark and attach replay‑barrier acks to bypassed frames; adds focused tests.
  • CI

    • SwiftPM: centralize tests via run_swift_package_tests with scoped tolerance for GhosttyKit and CMUXAuthCore runner diagnostics when the all‑tests‑passed summary is present.
    • iOS: treat xcodebuild timeouts as pass only when tests finished before simulator diagnostics timed out, using a pre‑timeout log slice and/or the latest .xcresult; App Store/APNs paths use com.cmuxterm.app.

Written for commit bf7c1c5. Summary will update on new commits.

Review in cubic

Summary by CodeRabbit

  • Bug Fixes
    • Improved starting-folder selection for new terminal sessions by inheriting the working directory from an eligible existing terminal configuration.
    • Refined session-restore and directory reuse so inherited paths are applied only when they match the restored session context and pass trust checks (skipping guarded/resumed restore states and remote terminals).
    • Updated terminal split/surface startup behavior so inheritance derives from the correct source panel, and is avoided when a startup command or sensitive restore conditions are present.

@vercel

vercel Bot commented Jul 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
cmux Ready Ready Preview, Comment Jul 10, 2026 1:24pm
cmux-staging Building Building Preview, Comment Jul 10, 2026 1:24pm

@coderabbitai

coderabbitai Bot commented Jul 8, 2026 •

Copy link
Copy Markdown

Review Change Stack

Note

Reviews paused

It 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 reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review
📝 Walkthrough

Walkthrough

Terminal startup cwd resolution now considers an inherited cwd candidate before existing rescue and default candidates. Split and surface terminal creation now thread source-panel context into that selection and only use inherited fallback cwd on the enabled path.

Changes

Terminal startup cwd inheritance

Layer / File(s) Summary
Resolver and rescue precedence
Sources/Workspace.swift
resolvedTerminalStartupWorkingDirectory(...) accepts an inherited working directory parameter, adds an inherited-cwd candidate ahead of existing startup cwd candidates, and refines resumed-agent rescue selection by resume sub-state.
Inherited config source capture
Sources/Workspace.swift
inheritedTerminalConfig(...) reports the selected source panel id through a callback, and split creation captures that source for later cwd resolution.
Split and surface wiring
Sources/Workspace.swift
newTerminalSplitLocal and newTerminalSurfaceLocal pass inherited cwd data into startup working-directory resolution, derive fallback source-panel state, and only use inherited fallback cwd when startup command handling allows it.

Estimated code review effort: 4 (Complex) | ~60 minutes

Sequence Diagram(s)

sequenceDiagram
  participant newTerminalSplitLocal
  participant newTerminalSurfaceLocal
  participant resolvedTerminalStartupWorkingDirectory
  participant inheritedWorkingDirectoryForTerminalStartup
  participant resumedAgentPaneWorkingDirectoryRescue

  newTerminalSplitLocal->>resolvedTerminalStartupWorkingDirectory: inheritedWorkingDirectory + sourcePanelId
  newTerminalSurfaceLocal->>resolvedTerminalStartupWorkingDirectory: fallback sourcePanelId + inheritedWorkingDirectory
  resolvedTerminalStartupWorkingDirectory->>inheritedWorkingDirectoryForTerminalStartup: evaluate inherited cwd
  resolvedTerminalStartupWorkingDirectory->>resumedAgentPaneWorkingDirectoryRescue: evaluate rescued cwd
  inheritedWorkingDirectoryForTerminalStartup-->>resolvedTerminalStartupWorkingDirectory: inherited cwd candidate
  resumedAgentPaneWorkingDirectoryRescue-->>resolvedTerminalStartupWorkingDirectory: rescued cwd candidate
Loading

Possibly related issues

Possibly related PRs

  • manaflow-ai/cmux#7165: Both PRs modify rescued-session and inherited cwd selection paths used during terminal startup and split creation.
🚥 Pre-merge checks | ✅ 25
✅ Passed checks (25 passed)
Check name Status Explanation
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.
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 Swift Actor Isolation ✅ Passed Workspace is @MainActor, and the cwd changes stay on that actor; no new shared Sendable state or background UI-store access was introduced.
Cmux Swift Blocking Runtime ✅ Passed The Swift diff only adjusts cwd resolution/state checks; it adds no semaphores, waits, sleeps, syncs, polling, timers, or manual locks.
Cmux Browser Automation Off-Main ✅ Passed Diff only touches Sources/Workspace.swift cwd resolution; no browser-automation routing, policy, or tests changed.
Cmux Expensive Synchronous Load ✅ Passed Patch only reshapes cwd resolution; no added RestorableAgentSessionIndex.load(), transcript/JSONL parsing, or broad history scans on interactive paths.
Cmux Cache Substitution Correctness ✅ Passed The cwd change is confined to terminal startup paths and uses live-process/inheritance guards, not a persistence/history/undo/snapshot consumer.
Cmux No Hacky Sleeps ✅ Passed The diff only changes Sources/Workspace.swift; this rule applies to non-Swift runtime/build scripts, so it is out of scope here.
Cmux Algorithmic Complexity ✅ Passed The diff only adds constant-size candidate checks and dictionary lookups; no new nested scans, per-target rescans, or hot-path sorting were introduced.
Cmux Swift Concurrency ✅ Passed Patch only reshapes synchronous cwd resolution; no new DispatchQueue, Combine, async throws, or fire-and-forget Task patterns were introduced.
Cmux Swift @Concurrent ✅ Passed No concurrency-annotation violation found: the changed cwd resolver paths are synchronous inside @MainActor Workspace, and the diff adds no @concurrent or nonisolated async work.
Cmux Swift File And Package Boundaries ✅ Passed Single app-target Workspace.swift grew by only 54 lines in a focused cwd-resolver bug fix; it stays Ghostty/app glue, not a package-boundary expansion.
Cmux Swiftpm Lockfiles ✅ Passed Diff only touches Sources/Workspace.swift; no Package.swift, Package.resolved, project.pbxproj, .gitignore, or workflow changes to audit.
Cmux Swift Logging ✅ Passed PR diff adds no print/debugPrint/dump/NSLog or new ad hoc logging; it only removes a DEBUG cmuxDebugLog call.
Cmux User-Facing Error Privacy ✅ Passed No user-visible error/alert/output strings changed; only cwd logic and developer-only comments mention internal details like Ghostty/libproc.
Cmux Full Internationalization ✅ Passed Only Sources/Workspace.swift changed; the diff is logic/comments only, with no new user-facing strings or locale assets, so no full-i18n violation.
Cmux Swiftui State Layout ✅ Passed Diff only changes Workspace cwd-resolution helpers; it adds no new SwiftUI state, GeometryReader, lazy-row store refs, or render-time state writes.
Cmux Architecture Rethink ✅ Passed No sleeps, locks, observers, or split lifecycle ownership were introduced; cwd logic is centralized in one resolver with clear guards and ownership.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed Only terminal cwd resolution changed in Workspace.swift; no new/changed NSWindow/NSPanel/WindowGroup code or cmux identifier registration, so the rule isn’t triggered.
Cmux Source Artifacts ✅ Passed Only Sources/Workspace.swift changed, and the diff is hand-written Swift code; no logs, caches, build outputs, temp dirs, or other artifact paths were added.
Cmux No Test Or Debug Seam In Production Source ✅ Passed Sources/Workspace.swift only adds cwd-resolution logic; no new #if DEBUG, *ForTesting, or debug/test hook seam was added in production source.
Cmux No Ambient Global State ✅ Passed No new file-scope funcs/vars or singletons; the patch adds only Workspace methods and local/instance state.
Title check ✅ Passed The title is concise and accurately describes the main change: preferring Ghostty inherited cwd during terminal creation.
Description check ✅ Passed The description includes a clear summary and verification steps, covering the main change and testing, though some template sections are omitted.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch pr-7292-cwd-inheritance-fix

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.

@greptile-apps

greptile-apps Bot commented Jul 8, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR updates terminal startup directory handling and related delivery paths. The main changes are:

  • Prefer guarded Ghostty inherited cwd for local terminal splits and new tabs.
  • Keep cwd fallback separate from visual terminal config inheritance.
  • Avoid using remote or restore-guarded directories as local fallbacks.
  • Drop stale queued mobile render-grid frames during terminal output delivery.
  • Tighten CI handling for known SwiftPM and iOS runner diagnostics.

Confidence Score: 5/5

This looks safe to merge.

  • No blocking issues found in the changed code.

Important Files Changed

Filename Overview
Sources/Workspace.swift Updates split and new-tab startup cwd resolution, including inherited cwd, resume rescue, and remote-safe fallbacks.
Sources/WorkspaceSurfaceConfig.swift Adds shared helpers for terminal startup config templates, inherited cwd gating, and safe local startup directories.
Sources/Workspace+SidebarDirectories.swift Routes requested terminal cwd fallback through local and remote provenance guards.
Packages/iOS/CmuxMobileShell/Sources/CmuxMobileShell/MobileShellComposite+TerminalOutputQueueDrain.swift Adds queue-drain handling for stale render-grid output and replay barrier acknowledgement state.
.github/workflows/ci.yml Centralizes SwiftPM test execution and scopes tolerance for known runner diagnostics.
.github/workflows/test-ios.yml Treats iOS runner cleanup failures as passing only when tests completed before simulator diagnostics timed out.

Reviews (38): Last reviewed commit: "fix: drop stale queued terminal render g..." | Re-trigger Greptile

Comment thread Sources/Workspace.swift Outdated
Comment thread Sources/Workspace.swift Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Sources/Workspace.swift (1)

7664-7689: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Keep startup cwd behind one resolver path.

Line 7664 disables inherited cwd fallback when startupCommand != nil, but Lines 7668-7689 still pass an inherited config template whose workingDirectory can be used downstream when workingDirectory is nil. That bypasses the new resolver gate and can still start command-backed terminals in an inherited cwd.

Either clear inheritedConfig.workingDirectory for the non-fallback path, or route that cwd through resolvedTerminalStartupWorkingDirectory(...) so the startup directory has one authoritative decision point. As per path instructions, startup cwd must have a single trusted source of truth.

🤖 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 `@Sources/Workspace.swift` around lines 7664 - 7689, The startup cwd decision
is still leaking through inherited config when startupCommand is set, bypassing
the intended resolver gate. Update the logic around
shouldInheritWorkingDirectoryFallback, inheritedTerminalConfig(inPane:), and
resolvedTerminalStartupWorkingDirectory(...) so command-backed terminals have
one authoritative cwd path: either strip inheritedConfig.workingDirectory when
startupCommand != nil, or ensure the workingDirectory passed into TerminalPanel
is always derived only from the resolver for that case.

Source: Path instructions

🤖 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 `@Sources/Workspace.swift`:
- Around line 7664-7689: The startup cwd decision is still leaking through
inherited config when startupCommand is set, bypassing the intended resolver
gate. Update the logic around shouldInheritWorkingDirectoryFallback,
inheritedTerminalConfig(inPane:), and
resolvedTerminalStartupWorkingDirectory(...) so command-backed terminals have
one authoritative cwd path: either strip inheritedConfig.workingDirectory when
startupCommand != nil, or ensure the workingDirectory passed into TerminalPanel
is always derived only from the resolver for that case.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: abf261af-a138-47ba-8791-6d710ca90581

📥 Commits

Reviewing files that changed from the base of the PR and between b51ee74 and d01a077.

📒 Files selected for processing (1)
  • Sources/Workspace.swift

Comment thread Sources/Workspace.swift Outdated
Comment thread Sources/Workspace.swift
Comment thread Sources/Workspace.swift Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Sources/Workspace.swift (1)

7356-7402: 🎯 Functional Correctness | 🟠 Major | ⚡ Quick win

Strip inherited config cwd so the resolver is the only cwd source.

inheritedTerminalConfig(...) can carry CmuxSurfaceConfigTemplate.workingDirectory, while these paths also pass workingDirectory: from resolvedTerminalStartupWorkingDirectory(...). If the explicit cwd or fallback source differs from the config-inheritance candidate, terminal startup has competing cwd sources.

Proposed fix
-        var inheritedConfig = inheritedTerminalConfig(preferredPanelId: panelId, inPane: paneId)
+        var inheritedConfig = inheritedTerminalConfig(preferredPanelId: panelId, inPane: paneId)
+        inheritedConfig?.workingDirectory = nil
-        var inheritedConfig = inheritedTerminalConfig(inPane: paneId)
+        var inheritedConfig = inheritedTerminalConfig(inPane: paneId)
+        inheritedConfig?.workingDirectory = nil

As per path instructions, correctness-critical working-directory state should have one authoritative source and avoid competing sources that can disagree.

Also applies to: 7665-7686

🤖 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 `@Sources/Workspace.swift` around lines 7356 - 7402, The split-terminal setup
in Workspace’s terminal creation path is passing two competing cwd sources:
inheritedTerminalConfig(preferredPanelId:inPane:) may already carry
CmuxSurfaceConfigTemplate.workingDirectory while
resolvedTerminalStartupWorkingDirectory(...) is also provided to TerminalPanel.
Strip the workingDirectory from the inherited config before building the new
panel so the resolver output is the single authoritative cwd source, and apply
the same fix in both affected split-terminal code paths.

Source: Path instructions

🤖 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 `@Sources/Workspace.swift`:
- Around line 7356-7402: The split-terminal setup in Workspace’s terminal
creation path is passing two competing cwd sources:
inheritedTerminalConfig(preferredPanelId:inPane:) may already carry
CmuxSurfaceConfigTemplate.workingDirectory while
resolvedTerminalStartupWorkingDirectory(...) is also provided to TerminalPanel.
Strip the workingDirectory from the inherited config before building the new
panel so the resolver output is the single authoritative cwd source, and apply
the same fix in both affected split-terminal code paths.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 21bb4c39-1256-486a-9031-76ffc6acad8e

📥 Commits

Reviewing files that changed from the base of the PR and between e7bd07c and 7282b06.

📒 Files selected for processing (1)
  • Sources/Workspace.swift

@austinywang
austinywang force-pushed the pr-7292-cwd-inheritance-fix branch 2 times, most recently from a9385b3 to 6685722 Compare July 8, 2026 10:57
Comment thread Sources/Workspace.swift Outdated
Comment thread Sources/Workspace.swift Outdated
@austinywang
austinywang force-pushed the pr-7292-cwd-inheritance-fix branch from 6685722 to 13b383a Compare July 8, 2026 11:01
Comment thread Sources/Workspace.swift Outdated

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Sources/Workspace.swift (1)

7657-7668: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick win

Consider extracting the inherited-cwd derivation into a named helper.

The chained && + ternary computing fallbackLiveWorkingDirectory and inheritedWorkingDirectory is dense for a correctness-critical cwd path, mixing two candidate sources (config cwd vs live-foreground cwd) and a source-panel match test. A small helper (e.g. inheritedStartupWorkingDirectory(fallbackSourcePanelId:inheritedConfigSourcePanelId:inheritedConfig:enabled:)) returning the resolved value would make the source-of-truth precedence explicit and easier to unit-test.

🤖 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 `@Sources/Workspace.swift` around lines 7657 - 7668, The inherited
working-directory selection in Workspace should be extracted into a named helper
to make the precedence between config cwd and live foreground cwd explicit. Move
the logic around fallbackLiveWorkingDirectory and inheritedWorkingDirectory into
a helper such as
inheritedStartupWorkingDirectory(fallbackSourcePanelId:inheritedConfigSourcePanelId:inheritedConfig:enabled:)
and have it return the resolved cwd based on the source-panel match test and
availability checks. Keep the existing behavior intact, but simplify the call
site so the resolution path is easier to read and unit-test.
🤖 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 `@Sources/Workspace.swift`:
- Around line 7657-7668: The inherited working-directory selection in Workspace
should be extracted into a named helper to make the precedence between config
cwd and live foreground cwd explicit. Move the logic around
fallbackLiveWorkingDirectory and inheritedWorkingDirectory into a helper such as
inheritedStartupWorkingDirectory(fallbackSourcePanelId:inheritedConfigSourcePanelId:inheritedConfig:enabled:)
and have it return the resolved cwd based on the source-panel match test and
availability checks. Keep the existing behavior intact, but simplify the call
site so the resolution path is easier to read and unit-test.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 9c1c6340-71a1-497d-9413-f1bb52f263f5

📥 Commits

Reviewing files that changed from the base of the PR and between 7282b06 and 6685722.

📒 Files selected for processing (1)
  • Sources/Workspace.swift

@austinywang
austinywang force-pushed the pr-7292-cwd-inheritance-fix branch from 13b383a to 1169872 Compare July 8, 2026 11:08
Comment thread Sources/Workspace.swift Outdated
Comment thread Sources/Workspace.swift Outdated
@austinywang
austinywang force-pushed the pr-7292-cwd-inheritance-fix branch from 1169872 to b051114 Compare July 8, 2026 11:17
Comment thread Sources/Workspace.swift Outdated
@austinywang
austinywang force-pushed the pr-7292-cwd-inheritance-fix branch from b051114 to 7cb498d Compare July 8, 2026 12:14
Comment thread Sources/Workspace.swift
Comment thread Sources/Workspace.swift Outdated
Comment thread Sources/Workspace.swift
Comment thread Sources/Workspace.swift Outdated
@austinywang
austinywang force-pushed the pr-7292-cwd-inheritance-fix branch from 9bb24b7 to bf7c1c5 Compare July 10, 2026 07:28

@cursor cursor Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes using default effort and found 1 potential issue.

There are 3 total unresolved issues (including 2 from previous reviews).

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit bf7c1c5. Configure here.

? controlResumeBinding(from: ws.surfaceResumeBinding(panelId: panel.id))
: nil
)
}

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tmux mirror surfaces omitted

High Severity

controlSurfaceList now builds summaries with a plain map over orderedPanels, so remote tmux mirror wrapper panels are no longer expanded into their inner synthetic pane surfaces. The replaced controlSurfaceSummaries helper still uses flatMap and remoteTmuxWindowMirror projection, so list output can disagree with pane list and break mirror automation.

Fix in Cursor Fix in Web

Reviewed by Cursor Bugbot for commit bf7c1c5. Configure here.

@lawrencecchen lawrencecchen added the stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening. label Sep 23, 2026
@github-project-automation github-project-automation Bot moved this from Todo to Done in cmux backlog Sep 23, 2026

This branch was successfully deployed

1 active deployment
Preview – cmux — bf7c1c5e Deployed Jul 10, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants