Skip to content

Use pan arrows for canvas scroll hint - #6528

Merged
azooz2003-bit merged 9 commits into
mainfrom
feat-canvas-scroll-tip-icon
Jun 21, 2026
Merged

azooz2003-bit merged 9 commits into
mainfrom
feat-canvas-scroll-tip-icon

Conversation

@azooz2003-bit

@azooz2003-bit azooz2003-bit commented Jun 21, 2026 •

Copy link
Copy Markdown
Collaborator

Summary

  • Replace the canvas Command+scroll discovery hint's document-like scroll symbol with the directional pan arrows SF Symbol.
  • Leave the existing localized hint copy intact.

Verification

  • swift test --package-path Packages/macOS/CmuxCanvasUI
  • python3 -m json.tool Resources/Localizable.xcstrings >/dev/null
  • swift -e 'import AppKit; print(NSImage(systemSymbolName: "arrow.up.and.down.and.arrow.left.and.right", accessibilityDescription: nil) != nil)'
  • ./scripts/reload-cloud.sh --tag scrolltip (fell back to local ./scripts/reload.sh --tag scrolltip)

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


Summary by cubic

Replaced the canvas Command+scroll hint icon with pan arrows (arrow.up.and.down.and.arrow.left.and.right) and styled it as a keycap to match the ⌘ keycap. Added a DEBUG-only way to show the hint via menu and control socket without consuming the one-time flag; dismissal and scroll timing remain unchanged.

  • New Features

    • Debug menu item “Show Canvas Scroll Hint” (localized), enabled only in canvas mode; replaces any visible hint without toggling the discovery flag.
    • Control socket method debug.canvas.command_scroll_hint routes through the canvas action path, respects workspace routing selectors, and returns invalid_state if not in canvas mode or if the viewport isn’t attached.
  • Refactors

    • Extracted canvas debug menu buttons and centralized debug method names; moved the debug hook out of production seams and fixed DEBUG-only build warnings.
    • Unified keycap rendering for text and SF Symbols to match the hint’s icon styling.

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

Review in cubic

Summary by CodeRabbit

Release Notes

  • New Features

    • Added a DEBUG option to show the canvas scroll hint overlay.
    • Updated the DEBUG menu with “Show Canvas Scroll Hint” when a workspace is in canvas mode.
  • Style

    • Refreshed the scroll hint indicator icon.
  • Bug Fixes

    • Improved debug hint scheduling so repeated triggers correctly replace the visible hint (respecting the session behavior).
    • Added clearer error handling when the canvas viewport isn’t attached.
  • Tests

    • Expanded DEBUG test coverage for hint replacement and viewport-unavailable behavior.

@vercel

vercel Bot commented Jun 21, 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 Jun 21, 2026 10:29pm
cmux-staging Building Building Preview, Comment Jun 21, 2026 10:29pm

@coderabbitai

coderabbitai Bot commented Jun 21, 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

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: a875bdae-7de1-4962-b688-9f69a8a99533

📥 Commits

Reviewing files that changed from the base of the PR and between 1d1fb43 and 3841784.

📒 Files selected for processing (9)
  • Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasCommandScrollHint.swift
  • Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasRootView+CommandScroll.swift
  • Packages/macOS/CmuxCanvasUI/Tests/CmuxCanvasUITests/CanvasCommandScrollHintTests.swift
  • Resources/Localizable.xcstrings
  • Sources/CanvasDebugMenuButtons.swift
  • Sources/TerminalController+DebugMethodNames.swift
  • Sources/TerminalController.swift
  • Sources/cmuxApp.swift
  • cmux.xcodeproj/project.pbxproj

📝 Walkthrough

Walkthrough

Adds a debug command (debug.canvas.command_scroll_hint) and a corresponding debug menu button to trigger canvas scroll hint presentation. The hint presentation logic is refactored into a parameterized helper. A new viewportUnavailable resolution case is added to the canvas action enum, wired through the control socket dispatch layer and implemented in TerminalController. The SF Symbol in the hint row is updated to "arrow.up.and.down.and.arrow.left.and.right", and keycap rendering is refactored into separate text and symbol helpers.

Changes

Debug canvas scroll hint command

Layer / File(s) Summary
Canvas UI symbol update and hint presentation refactoring
Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasCommandScrollHint.swift, Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasRootView+CommandScroll.swift, Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/Debug/CanvasRootView+CommandScrollHintDebug.swift
SF Symbol changes from "scroll" to "arrow.up.and.down.and.arrow.left.and.right". Keycap rendering is refactored from a single keycap(_:) helper into textKeycap(_:) and symbolKeycap(_:) backed by shared keycapContainer wrapper. presentCommandScrollHint() is refactored into a parameterized helper controlling session-flag marking and host replacement independently. A #if DEBUG extension adds debugShowCommandScrollHint() that forces hint replacement without consuming the session flag.
Canvas UI tests for hint behavior
Packages/macOS/CmuxCanvasUI/Tests/CmuxCanvasUITests/CanvasCommandScrollHintTests.swift
New @Suite validates that debugShowCommandScrollHint() replaces the hint host on repeated calls without prematurely consuming the session flag, that presentCommandScrollHint() sets the session flag, and that noteInPaneScrollForHint() does not cancel in-flight dismissal tasks. Includes a makeRoot helper for constructing test-ready CanvasRootView instances.
Canvas action resolution and error mapping
Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Canvas/ControlCanvasActionResolution.swift, Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Canvas/ControlCommandCoordinator+Canvas.swift
Adds viewportUnavailable to ControlCanvasActionResolution. Raises canvasActionResult(_:) from private to module-internal. Maps viewportUnavailable to an invalid_state error with message "Canvas viewport is not attached".
Debug socket command dispatch and protocol extension
Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlCommandCoordinator+Debug.swift, Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlDebugContext.swift
Extends ControlDebugContext protocol with controlDebugShowCanvasCommandScrollHint(routing:). Routes debug.canvas.command_scroll_hint in handleDebug(_:) switch to a new debugCanvasCommandScrollHint(_:) handler that resolves routing selectors and maps the result through canvasActionResult(_:).
Control socket tests for debug command dispatch
Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandContextTestStubs+Debug.swift, Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/FakeDebugCanvasControlCommandContext.swift, Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorDebugCanvasTests.swift
Adds test stub for controlDebugShowCanvasCommandScrollHint returning .tabManagerUnavailable. Introduces FakeDebugCanvasControlCommandContext capturing ControlRoutingSelectors with configurable resolution. Tests validate correct workspace ID forwarding on success and invalid_state error mapping for viewportUnavailable resolution.
Terminal controller canvas and debug context implementation
Sources/TerminalController+ControlCanvasContext.swift, Sources/TerminalController+ControlDebugContext.swift
Removes private from resolveCanvasWorkspace(routing:) to increase visibility. Imports CmuxCanvasUI. Adds a @MainActor helper that validates canvas mode, casts the viewport to CanvasRootView, and invokes debugShowCommandScrollHint(). Implements the ControlDebugContext witness method mapping failure states to workspaceNotFound, notCanvasMode, viewportUnavailable, or ok(mode:).
App menu button, capability advertisement, and localization
Sources/TerminalController+DebugMethodNames.swift, Sources/TerminalController.swift, Sources/CanvasDebugMenuButtons.swift, Sources/cmuxApp.swift, Resources/Localizable.xcstrings
Defines v2DebugMethodNames array listing debug method identifiers including "debug.canvas.command_scroll_hint". Updates v2Capabilities() to advertise methods from the array instead of an inline list. Adds CanvasDebugMenuButtons component with two buttons: one for stress workspaces, one for canvas scroll hint (disabled unless workspace is in canvas mode). Replaces hardcoded debug menu button in cmuxApp with the new container. Adds English and Japanese localization entries.
Project file configuration for new source files
cmux.xcodeproj/project.pbxproj
Registers CanvasDebugMenuButtons.swift and TerminalController+DebugMethodNames.swift as source files. Adds corresponding PBXFileReference, PBXBuildFile, group membership, and build-phase compilation entries.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Suggested reviewers

  • lawrencecchen

Poem

🐇 A scroll hint appears with a flicker and flair,
The arrow now points both sideways and up in the air.
Debug shows the hint though the session may skip,
Viewport unavailable? An error we grip.
The rabbit hops on — the canvas now sings! 🎨


Important

Pre-merge checks failed

Please resolve all errors before merging. Addressing warnings is optional.

❌ Failed checks (1 error, 1 warning)

Check name Status Explanation Resolution
Cmux No Test Or Debug Seam In Production Source ❌ Error Added public func debugShowCommandScrollHint() in CanvasRootView+CommandScrollHintDebug.swift (#if DEBUG), which is called only by tests via @testable import—a debug seam for test observability. Change public func debugShowCommandScrollHint() to internal; tests already use @testable import CmuxCanvasUI so will access it directly. See #6452 for pattern.
Docstring Coverage ⚠️ Warning Docstring coverage is 25.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (21 passed)
Check name Status Explanation
Title check ✅ Passed The title accurately and concisely describes the primary change: replacing the scroll symbol with pan arrows for the canvas scroll hint.
Description check ✅ Passed The PR description provides a clear summary and detailed verification steps, but omits demo video and incomplete checklist items required by the template.
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 All production Swift changes maintain proper actor isolation: @MainActor classes contain methods accessing MainActor state, Sendable enum types are properly marked, SwiftUI views intentionally on M...
Cmux Swift Blocking Runtime ✅ Passed PR does not introduce or materially expand blocking/timing synchronization. New production code (CanvasCommandScrollHint, CanvasDebugMenuButtons, new debug context methods) contains no blocking pat...
Cmux Expensive Synchronous Load ✅ Passed All new debug code is properly guarded with #if DEBUG and contains no RestorableAgentSessionIndex, JSON parsing, file I/O, or other expensive synchronous operations that would violate the rule.
Cmux Cache Substitution Correctness ✅ Passed No cache substitution issues found. Changes are either UI-only (transient hints), computed properties (fresh calculation), or debug-only code. No persistence/history/undo paths affected.
Cmux No Hacky Sleeps ✅ Passed This PR contains only Swift source files, Xcode project config, and localization files. The "cmux no hacky sleeps" rule explicitly applies only to TypeScript, JavaScript, shell, and non-Swift build...
Cmux Algorithmic Complexity ✅ Passed PR adds only O(1) and fixed-size collection operations: UI helpers, debug menu button, socket dispatch, and a static 44-item debug method names list. No nested scans, per-target rescans, or algorit...
Cmux Swift Concurrency ✅ Passed PR introduces stored, cancellable Tasks and one fire-and-forget Task properly used as an AppKit callback boundary crossing, with no DispatchQueue, Combine, or forbidden completion handlers.
Cmux Swift @Concurrent ✅ Passed PR contains intentionally UI-bound async work with explicit MainActor isolation maintained throughout. All nonisolated usage is correct. No @concurrent violations found.
Cmux Swift File And Package Boundaries ✅ Passed All new files are under 400 lines with single clear responsibilities. No file added 250+ lines to existing 800+ line files. TerminalController.swift actually lost 42 lines. Feature logic properly i...
Cmux Swiftpm Lockfiles ✅ Passed PR contains no SwiftPM package-reference, Package.swift, or .gitignore changes. Xcode project change only adds source file references to build phase, not dependency modifications.
Cmux Swift Logging ✅ Passed PR adds no logging violations; all debug code is properly guarded by #if DEBUG and no print/debugPrint/dump/NSLog added to production Swift code.
Cmux User-Facing Error Privacy ✅ Passed The PR's new user-facing strings "Show Canvas Scroll Hint" and "Canvas viewport is not attached" are DEBUG-only (wrapped in #if DEBUG) per policy guidelines, containing no vendor names, internal de...
Cmux Full Internationalization ✅ Passed PR correctly localizes the new user-facing string debug.menu.showCanvasCommandScrollHint using String(localized:defaultValue:) API with complete translations for all 20 supported locales in Res...
Cmux Swiftui State Layout ✅ Passed PR complies with SwiftUI state layout rules: uses only local @State for animation (with onAppear lifecycle mutation, not render-time), no new ObservableObject/@published patterns, no GeometryReader...
Cmux Architecture Rethink ✅ Passed PR refactors command-scroll hint presentation to separate one-time-flag from existence checks—a correctness improvement with clear owner (CanvasRootView) and invariants. All timing patterns (Task.s...
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PR adds no new NSWindow, NSPanel, NSWindowController, Window, or WindowGroup. CanvasDebugMenuButtons is a debug-only SwiftUI View (buttons) in existing menu, not a standalone window.
Cmux Source Artifacts ✅ Passed All 19 changed files are intentional source code, test fixtures, localization catalogs, and project configuration files with no artifact directories or generated outputs.
✨ 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 feat-canvas-scroll-tip-icon

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 and usage tips.

@greptile-apps

greptile-apps Bot commented Jun 21, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

Replaces the canvas Command+scroll hint's scroll SF Symbol with arrow.up.and.down.and.arrow.left.and.right and unifies keycap rendering for text and symbol variants. The PR also adds a DEBUG-only re-trigger path (debug menu item + control socket method debug.canvas.command_scroll_hint) without consuming the one-time production discovery flag, and refactors the debug method list into its own file.

  • Icon + keycap refactor: CanvasCommandScrollHint gains textKeycap/symbolKeycap helpers sharing a common keycapContainer, replacing the old standalone keycap function; the new SF Symbol is validated to exist at build time.
  • Debug show-hint facility: debugShowCommandScrollHint() lives in a dedicated Debug/ subfolder file (correctly isolated per cmux-no-test-debug-seam); the new presentCommandScrollHint(markSessionShown:replacingExisting:) overload powers both production and debug paths.
  • Control socket wiring: debug.canvas.command_scroll_hint routes through the existing canvas action resolution machinery; ControlCanvasActionResolution.viewportUnavailable is added for the no-viewport case; all new protocol requirements are inside the existing #if DEBUG block in ControlDebugContext.

Confidence Score: 5/5

Safe to merge — the icon swap and keycap refactor are mechanical, and the debug facility is correctly isolated behind #if DEBUG in a dedicated Debug/ folder.

All new protocol requirements are inside the existing #if DEBUG block so release builds are unaffected. The debug trigger path does not touch the production one-time discovery flag. Localization covers all 20 supported locales. The only notable concern is a parameter combination in the new presentCommandScrollHint overload that would silently drop the hint, but that combination is never exercised by current callers.

Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasRootView+CommandScroll.swift — the presentCommandScrollHint(markSessionShown:replacingExisting:) overload has a logic gap worth guarding against in a follow-up.

Important Files Changed

Filename Overview
Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasCommandScrollHint.swift Renames keycap to textKeycap, adds symbolKeycap and shared keycapContainer helper, replaces scroll SF Symbol with arrow.up.and.down.and.arrow.left.and.right. Clean refactor with no logic changes.
Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasRootView+CommandScroll.swift Splits presentCommandScrollHint into a parametric overload to support debug re-triggering; adds early-out guard when hint host is already visible. Introduces a parameter combination (markSessionShown: true, replacingExisting: true) that would silently remove the existing hint without showing a replacement.
Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/Debug/CanvasRootView+CommandScrollHintDebug.swift New dedicated debug file (Debug/ subfolder under Sources) with #if DEBUG-guarded debugShowCommandScrollHint() — correctly isolated per the cmux-no-test-debug-seam rule.
Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlDebugContext.swift Adds controlDebugShowCanvasCommandScrollHint(routing:) inside the existing #if DEBUG block of the protocol, so release builds see no new requirement. Pattern matches every other method in the protocol.
Sources/TerminalController+ControlDebugContext.swift Adds #if DEBUG-guarded free function debugShowCanvasCommandScrollHint(in:) and controlDebugShowCanvasCommandScrollHint(routing:) witness, properly guarded. Imports CmuxCanvasUI for the CanvasRootView cast.
Sources/CanvasDebugMenuButtons.swift New #if DEBUG-guarded SwiftUI view extracting stress-workspace and scroll-hint debug buttons from cmuxApp.swift. Fully localized, disables scroll-hint button when not in canvas mode.
Resources/Localizable.xcstrings Adds debug.menu.showCanvasCommandScrollHint with translated entries for all 20 supported locales. Complete coverage.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant Menu as Debug Menu
    participant Socket as Control Socket
    participant TC as TerminalController
    participant Coord as ControlCommandCoordinator
    participant RV as CanvasRootView

    Menu->>TC: debugShowCanvasCommandScrollHint(in: workspace)
    TC->>RV: debugShowCommandScrollHint()
    RV->>RV: presentCommandScrollHint(markSessionShown: false, replacingExisting: true)
    RV-->>Menu: hint shown (session flag untouched)

    Socket->>Coord: debug.canvas.command_scroll_hint
    Coord->>Coord: debugCanvasCommandScrollHint(params)
    Coord->>TC: controlDebugShowCanvasCommandScrollHint(routing:)
    TC->>TC: resolveCanvasWorkspace(routing:)
    TC->>TC: debugShowCanvasCommandScrollHint(in: workspace)
    TC->>RV: debugShowCommandScrollHint()
    RV-->>Coord: .ok(mode: "canvas")
    Coord-->>Socket: "{"mode": "canvas"}"
Loading
%%{init: {'theme': 'base', 'themeVariables': {"darkMode": true, "background": "#0d1117", "primaryColor": "#21262d", "primaryTextColor": "#e6edf3", "primaryBorderColor": "#8b949e", "lineColor": "#8b949e", "textColor": "#e6edf3", "edgeLabelBackground": "#161b22", "actorBkg": "#21262d", "actorBorder": "#8b949e", "actorTextColor": "#e6edf3", "actorLineColor": "#8b949e", "signalColor": "#8b949e", "signalTextColor": "#e6edf3", "noteBkgColor": "#373320", "noteBorderColor": "#d4a72c", "noteTextColor": "#f0e6c0", "labelBoxBkgColor": "#21262d", "labelBoxBorderColor": "#8b949e", "labelTextColor": "#e6edf3", "loopTextColor": "#e6edf3", "activationBkgColor": "#30363d", "activationBorderColor": "#8b949e"}}}%%
sequenceDiagram
    participant Menu as Debug Menu
    participant Socket as Control Socket
    participant TC as TerminalController
    participant Coord as ControlCommandCoordinator
    participant RV as CanvasRootView

    Menu->>TC: debugShowCanvasCommandScrollHint(in: workspace)
    TC->>RV: debugShowCommandScrollHint()
    RV->>RV: presentCommandScrollHint(markSessionShown: false, replacingExisting: true)
    RV-->>Menu: hint shown (session flag untouched)

    Socket->>Coord: debug.canvas.command_scroll_hint
    Coord->>Coord: debugCanvasCommandScrollHint(params)
    Coord->>TC: controlDebugShowCanvasCommandScrollHint(routing:)
    TC->>TC: resolveCanvasWorkspace(routing:)
    TC->>TC: debugShowCanvasCommandScrollHint(in: workspace)
    TC->>RV: debugShowCommandScrollHint()
    RV-->>Coord: .ok(mode: "canvas")
    Coord-->>Socket: "{"mode": "canvas"}"
Loading

Reviews (6): Last reviewed commit: "Fix canvas debug hint warnings" | Re-trigger Greptile

@azooz2003-bit

Copy link
Copy Markdown
Collaborator Author

Correction to my previous source-artifact note: I checked the branch with git diff --name-only origin/main...HEAD and the PR introduces only Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasCommandScrollHint.swift. The .claude and .greptile paths are present in the base tree and are not part of this PR diff.

Comment on lines +31 to +35
#if DEBUG
/// Shows the Command+scroll discovery hint for debug-menu and automation
/// testing, without consuming the production one-time scroll trigger.
func debugShowCommandScrollHint()
#endif

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

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

P1 Debug-named seam added to production public protocol

debugShowCommandScrollHint() is a debug…-prefixed method guarded by #if DEBUG in a production Sources/ protocol — this pattern is explicitly called out as a failure by the cmux-no-test-debug-seam-in-production-source rule. The same issue appears in CanvasRootView+CommandScroll.swift (lines 123-128, public func debugShowCommandScrollHint()) and Sources/Canvas/CanvasAction.swift (lines 25-28, #if DEBUG case showCommandScrollHint). Any external CanvasViewportControlling conformer must now implement a debug-only method in debug builds.

The canonical fix (see PR 6452) is to keep debug-only facilities in a dedicated debug file or folder rather than polluting the production protocol and enum. The debugShowCommandScrollHint call chain and CanvasAction.showCommandScrollHint case should live entirely inside a debug-targeted extension or support file, calling back into the non-debug surface only through already-widened internal APIs. The CanvasViewportControlling protocol and CanvasAction enum should not carry #if DEBUG members.

Rule Used: Flag Swift files under a production Sources path (... (source)

@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.

Actionable comments posted: 1

🤖 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.

Inline comments:
In `@Sources/cmuxApp.swift`:
- Around line 543-547: The string key debug.menu.showCanvasCommandScrollHint
used in the Button in cmuxApp.swift is missing translations for 18 locales in
Resources/Localizable.xcstrings. Open the Localizable.xcstrings file, locate the
debug.menu.showCanvasCommandScrollHint entry, and add translated entries for all
missing locales: ar, bs, da, de, es, fr, it, km, ko, nb, pl, pt-BR, ru, th, tr,
uk, zh-Hans, and zh-Hant. Ensure each locale has an appropriate translation for
the "Show Canvas Scroll Hint" message to meet the full-internationalization
requirement for all 20 supported locales.
🪄 Autofix (Beta)

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 5d6a3faa-ebcf-43d9-9cfa-3c5ed7affa7b

📥 Commits

Reviewing files that changed from the base of the PR and between ee57510 and 8a79fc5.

📒 Files selected for processing (15)
  • Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasRootView+CommandScroll.swift
  • Packages/macOS/CmuxCanvasUI/Sources/CmuxCanvasUI/CanvasViewportControlling.swift
  • Packages/macOS/CmuxCanvasUI/Tests/CmuxCanvasUITests/CanvasCommandScrollHintTests.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Canvas/ControlCanvasActionResolution.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Canvas/ControlCommandCoordinator+Canvas.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlCommandCoordinator+Debug.swift
  • Packages/macOS/CmuxControlSocket/Sources/CmuxControlSocket/Coordinator/Debug/ControlDebugContext.swift
  • Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandContextTestStubs+Debug.swift
  • Packages/macOS/CmuxControlSocket/Tests/CmuxControlSocketTests/ControlCommandCoordinatorDebugCanvasTests.swift
  • Resources/Localizable.xcstrings
  • Sources/Canvas/CanvasAction.swift
  • Sources/TerminalController+ControlCanvasContext.swift
  • Sources/TerminalController+ControlDebugContext.swift
  • Sources/TerminalController.swift
  • Sources/cmuxApp.swift
💤 Files with no reviewable changes (1)
  • Resources/Localizable.xcstrings

Comment thread Sources/cmuxApp.swift Outdated
@azooz2003-bit
azooz2003-bit force-pushed the feat-canvas-scroll-tip-icon branch from 1d1fb43 to 3294d94 Compare June 21, 2026 21:19
@azooz2003-bit
azooz2003-bit merged commit 31cff80 into main Jun 21, 2026
35 checks passed
azooz2003-bit added a commit that referenced this pull request Jul 3, 2026
…e silently dropped — #6518 (terminal input after window key restore), #6508 (defer restored WebViews until visible), #6559 (avoid DevTools teardown on redock), #6583 (gate idle port scanning to active workspace), #6528 (canvas scroll-hint debug menu), #6580 (drop re-introduced sideDock promote block). #6582/#6517 deferred (see merge-deferred-gaps)

This branch was successfully deployed

1 active deployment
Preview – cmux — 38417847 Deployed Jun 21, 2026 by vercel[bot]
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.

1 participant