Repository navigation
Sync Ivrix to current cmux main (8,171 commits) - #8
Merged
DananzMolt merged 8182 commits intoOct 15, 2026
Merged
Conversation
…-timing-ui # Conflicts: # Sources/Cloud/CloudTreeNodeActions+WorkspaceLifecycle.swift # Sources/Surfaces/CmuxTuiSurfaceProviderRegistry.swift # Sources/cmuxApp+CloudWorkspace.swift
…-12715-clipboard-paste-wedge # Conflicts: # cmux.xcodeproj/project.pbxproj
The package test step now selects packages through scripts/ci/select_package_tests.py and writes the selection under RUNNER_TEMP. The harness ran the step without either, so the step exited before invoking swift and the call log was never written. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…tion-duplicate-build ci: reuse the shared build for notification semantics
* feat(cli): group help by task * cli: restore task-oriented help output * cli: localize task help text --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
…duction-app-hangs Prevent reentrant geometry reconciliation and diagnose terminal hang phases
…lay-core-rpc-v2 Restore scoped core RPC discovery over the SSH relay
…i#13147) * Expose Claude and Codex team launchers in command palette * Move launcher availability off the palette hot path * Use existing localized launcher labels * Isolate agent launcher availability tests * Simplify agent launcher palette availability wiring * Fence launcher availability by palette presentation * Share command palette agent resolution * fix: label Codex Teams launcher in palette * fix: translate Codex Teams palette label * fix: preserve main localization catalog during integration * fix: resolve palette agent availability off main actor
Brings the Ivrix Hebrew/BIDI fork up to current cmux main, from the previous base 015b603 (2026-07-26). Done as a real merge rather than a re-apply onto a fresh base, so the next sync has an ancestor to merge from. ghostty submodule moves to the matching merge on the fork (manaflow ghostty c5c31ce8 + the 37 Hebrew/BIDI commits, Zig 0.16 ported). Conflict resolution (17 files): - Info.plist: rebuilt from upstream, then re-ran the Ivrix rebrand rule ("A program running within cmux" -> "... Ivrix", SUFeedURL -> Ivrix's appcast, ATSApplicationFontsPath = Fonts). Upstream had grown from 4 such strings to 34, so re-running the rule beat patching the old text. - ShortcutAction: upstream split `group` and `displayName` into ShortcutAction+Group.swift / +DisplayName.swift; toggleTextDirection re-added in all three files. - SettingsNavigation: upstream moved SettingsSearchIndex to Sources/SettingsSearchIndex.swift; the two Ivrix rows follow it there. - UpdateFeedResolver: kept upstream's hostArchitecture init, with the fallback defaulting to Ivrix's appcast, never upstream cmux's. - GhosttyTerminalView: kept appliedHebrewFont, dropped the stale bellAudioSound field upstream replaced with TerminalBellService. - project.pbxproj: took upstream and re-applied the 12 Ivrix entries (Fonts resource, HebrewAsciiQuotes + its tests). Version left at Ivrix 1.1.3 / 104 -- this is a sync, not a release. - CHANGELOG: Ivrix entries stay on top of upstream's. - TerminalSection, KeyboardShortcutSettings(+FileStore), cmux-shortcuts, cmux.schema.json, shortcut-actions.md, updater tests: both sides kept. Verified so far: ghostty builds (GhosttyKit xcframework, zig 0.16) and `zig build test-lib-vt` gives 5210/5245 with 54/54 bidi tests. The one failure (kitty temporary file bool ABI) reproduces on clean upstream c5c31ce8, so it is pre-existing and not from this merge.
Ivrix 1.1.3 had zero "cmux" left in InfoPlist.xcstrings values; the merge brought in 321 new upstream permission strings across all locales, all naming cmux. Same 4->34 pattern already handled in Resources/Info.plist. Localizable.xcstrings needed nothing: Ivrix only rebrands 4 app-name keys there (about.appName, dialog.quitCmux.title, menu.app.about, menu.quitCmux) and all 4 are still Ivrix in all 19 locales after the merge. The other ~2500 body-copy strings mentioning cmux were deliberately left alone in 1.1.3.
…rtcut routing Two compile breaks the merge could not see, both from upstream APIs that grew after Ivrix 1.1.3: - iconLabel() gained a required foregroundColor; the titlebar direction button now passes it like its neighbours. - ShortcutAction gained dockShortcutRoutingDisposition, an exhaustive switch. toggleTextDirection is .mainContainer: it flips a global UserDefaults value (WorkspaceRuntimeSettings.toggleDirection) rather than acting on a surface tree, so it must not be Dock-scoped.
…acOS 26 The sidecar pinned Rust 1.88.0. On macOS 26 that toolchain emits host proc-macro dylibs the system dyld refuses to load: dlopen(libserde_derive-*.dylib): mis-aligned LINKEDIT string pool error[E0463]: can't find crate for `thiserror_impl` which fails the whole app build. Isolated it to MACOSX_DEPLOYMENT_TARGET, which build-diff-sidecar.sh sets: with the variable unset 1.88.0 builds fine, with ANY value (14.0, 15.0, 26.0) it fails. Rust 1.98.1 builds cleanly with the deployment target set. This file is untouched by Ivrix and identical to upstream cmux main, so this is an upstream macOS 26 breakage rather than something the sync introduced. Bumping it here because the app cannot otherwise be built on a current macOS; drop this commit if you would rather hold the pin and fix it upstream instead.
Upstream keeps adding buttons to the leading controls row, so each sync pushed the direction toggle further toward the middle of the window and it ended up cramped. It now lives in its own `.right` titlebar accessory, pinned to the trailing edge, and the `buttonRowWidth` reservation hack it needed in the leading row is gone. Two things this needed that are easy to get wrong in a titlebar accessory: - Vertical alignment. AppKit hands the accessory a full-height titlebar slot (32pt) but sizes the accessory from its own view's frame, so a button-height (28pt) view lands on the slot's bottom edge and reads as misaligned. The controller now takes the slot's height and centres the button inside it. - Clicks. The symbol is backed by an NSImageView, which wins AppKit hit testing inside the accessory and swallowed the mouse-down before SwiftUI's Button saw it, so the toggle did nothing. The icon is decoration, so it is no longer hit-testable; the button's own contentShape owns the hit area. Verified by clicking the control and watching `terminal.textDirection` flip ltr -> rtl. The accessory mirrors the leading row's view structure (a TitlebarAccessoryContainerView wrapping the hosting view) because the hosting view's hitTest only resolves a left-mouse-down through that path. Claude-Session: https://claude.ai/code/session_01GC88h6yLLyAKizGSw2cgVJ
Sets the fork's own version. The upstream merge had carried cmux's MARKETING_VERSION/CURRENT_PROJECT_VERSION (0.64.25 / 106) into the project file; shipping that would have broken Sparkle's version comparison against the 1.1.3 users already have, and named the build after upstream. 1.2.0 / 105 follows Ivrix 1.1.3 / 104. Claude-Session: https://claude.ai/code/session_01GC88h6yLLyAKizGSw2cgVJ
Apple rejected the Ivrix 1.2.0 notarization (submission 949eb880) with 12
errors across exactly two paths, both new in this upstream sync and both
outside the inside-out signing loops:
Contents/Library/cmux Computer Use.app/Contents/MacOS/cmux-cua
Contents/Library/SystemExtensions/cmuxTunnel.systemextension/.../cmuxTunnel
The loops covered Resources/bin, PlugIns and Frameworks, so both stayed
ad-hoc signed: no Developer ID, no secure timestamp, no hardened runtime.
The Computer Use helper is now signed with the helper entitlements and
without --deep, matching step 2 of upstream's scripts/sign-cmux-bundle.sh.
The Cloud tunnel system extension is removed from the bundle instead, which
is what upstream's own script does whenever the profile lacks the
capability. Two independent reasons it cannot ship in Ivrix:
1. TunnelExtension/*.entitlements hardcode cmux's team (7WLXT3NR37) and
need a Developer ID NetworkExtension profile. Ivrix signs as
Q2V86449AC and has none, so the extension could never activate.
2. macOS rejects allow-unsigned-executable-memory and
disable-library-validation on an app bundling a packet-tunnel system
extension, and scripts/ivrix.entitlements needs both. Shipping it
would break app launch, not just notarization.
Also adds a pre-flight audit that asserts every nested Mach-O carries the
Developer ID authority and the hardened runtime before anything is uploaded,
so a gap like this fails locally in seconds rather than after a multi-minute
round-trip through Apple's notary service. Non-Mach-O helpers are left to the
bundle seal, since signing a script stores the signature in an xattr that
Sparkle's BinaryDelta refuses to diff.
Claude-Session: https://claude.ai/code/session_01GC88h6yLLyAKizGSw2cgVJ
The appcast hardcoded 13.0, carried forward since Ivrix 1.0.0. Upstream raised MACOSX_DEPLOYMENT_TARGET to 14.0 during the 2026-09 sync, so the shipped 1.2.0 bundle declares LSMinimumSystemVersion 14.0 and its Mach-O headers say minos 14.0, while the feed still advertised 13.0. Sparkle uses minimumSystemVersion to decide whether to offer an update at all, so a macOS 13 machine would have been offered a build it cannot launch. Read it from MACOSX_DEPLOYMENT_TARGET the same way the build number is read, so the next floor change carries into the feed on its own. Claude-Session: https://claude.ai/code/session_01GC88h6yLLyAKizGSw2cgVJ
DananzMolt
merged commit Oct 15, 2026
bacfb3a
into
ivrix-prompt-selection-edit-app
25 of 58 checks passed
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 15, 2026 12:39 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 15, 2026 12:39 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 16, 2026 12:30 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 17, 2026 11:39 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 18, 2026 12:05 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 19, 2026 14:44 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 20, 2026 12:46 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 21, 2026 12:59 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 22, 2026 13:00 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 23, 2026 12:40 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 24, 2026 12:03 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 25, 2026 12:36 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 26, 2026 14:21 — with
GitHub Actions
Error
DananzMolt
had a problem deploying
to
cloud-vm-image-checks
October 27, 2026 13:19 — with
GitHub Actions
Error
DananzMolt
requested a deployment
to
cloud-vm-image-checks
October 28, 2026 14:05 — with
GitHub Actions
Queued
This branch is being deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Brings Ivrix up from its 2026-07-26 base (
015b603d) to current cmux main (2d93494c, 2026-09-21). Companion ghostty PR: Dananz/ghostty#1.Base is
ivrix-prompt-selection-edit-app(the v1.1.3 line) because that is the real parent of this work. Notehebrew-bidiis stale: its only unique commits are 3 merge commits, and every real commit on it is a rebased duplicate of what is on the v1.1.3 line.Approach
A real
git merge -X diff-algorithm=histogram, not the squash-onto-a-fresh-base of previous syncs (86f946a9b7). That gives future syncs an ancestor, and it resolved far better:Surface.zigon the ghostty side merged clean where a squashedgit apply -3produced 12 conflict hunks.Conflicts (17 files)
about.appName,dialog.quitCmux.title,menu.app.about,menu.quitCmux); all 4 are still Ivrix in all 19 locales. The other ~2,500 body-copy strings mentioning cmux are deliberately left alone.groupanddisplayNameinto sibling files;toggleTextDirectionre-added across all three.SettingsSearchIndexto its own file; the two Ivrix rows follow it there.hostArchitectureinit, defaulting the fallback to Ivrix's appcast, never upstream cmux's.appliedHebrewFont, dropped the stalebellAudioSoundfield upstream replaced withTerminalBellService.Two compile breaks the merge could not see
iconLabel()gained a requiredforegroundColor; the titlebar direction button now passes it.ShortcutAction.dockShortcutRoutingDispositionis an exhaustive switch.toggleTextDirectionis.mainContainer: it flips a global UserDefaults value, not a surface tree, so it must not be Dock-scoped.Verification
cmux-cuaRun Script phase, which spawns libtool from an Xcode.app toolchain path — this machine has only Command Line Tools, no Xcode.app. That script and crate are pure upstream, untouched here. Link and bundle are therefore unverified locally and need a machine with Xcode.Deliberately not done
Version left at Ivrix 1.1.3 / 104 — this is a sync, not a release.