Commit graph

1682 commits

Author SHA1 Message Date
Lawrence Chen
183c5601be
Make remote sidebar directory canonicalization preserve live paths 2026-03-19 01:23:53 -07:00
Lawrence Chen
55ec827d48
Add remote sidebar directory canonicalization regression test 2026-03-19 01:14:47 -07:00
Lawrence Chen
0010e10bf5
Stabilize sidebar directory ordering when split focus changes (#1798)
* Add sidebar directory ordering regression test

* Stabilize sidebar directory ordering

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-19 01:05:12 -07:00
Lawrence Chen
7cbac356fc
Add optional single-click focus for inactive panes (#1796)
* Add failing first-click pane focus tests

* Enable optional first-click focus for inactive panes

* Address PR review follow-ups

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-19 01:01:10 -07:00
Lawrence Chen
5cab7c4a7b
Fix CI test timeout: stream output, bump to 30m (#1783)
* Fix CI test timeout: stream xcodebuild output and bump timeout to 30m

The test split PR (#1717) applied output streaming (tee) and timeout bump
only to ci-macos-compat.yml, not ci.yml. The main CI tests job was still
capturing all xcodebuild output in a $() subshell (making logs blank) and
using a 20 minute timeout (too tight after the test file split).

Port the same fixes from ci-macos-compat.yml:
- Stream xcodebuild output via tee so CI logs show progress in real time
- Bump timeout-minutes from 20 to 30
- Update the SPM retry guard test for the new tee pattern

* Fix hanging test: auto-confirm window close in last-surface Cmd+W test

testCmdWClosesWindowWhenClosingLastSurfaceInLastWorkspace hung for 26+
minutes on CI because it sent Cmd+W to close the last surface without
setting debugCloseMainWindowConfirmationHandler. The window close path
shows a modal confirmation dialog that blocks the RunLoop indefinitely
on headless runners.

Set the handler to auto-confirm, matching the pattern used by
testCmdCtrlWClosesWindowAfterConfirmation.

* Skip last-surface close test on CI: PTY teardown blocks on headless runners

The confirmation handler fix wasn't sufficient. The hang is in Ghostty
surface/PTY teardown when closing the last terminal surface, not the
window close confirmation. Shell process termination blocks indefinitely
on headless CI runners without a TTY.

Skip with XCTSkip when CI env var is set. The test still runs locally
and can be covered via E2E on runners with virtual displays.

* Skip hanging test via -skip-testing flag in xcodebuild

The CI env var isn't visible inside xcodebuild's test host process, so
the XCTSkip approach didn't work. Use -skip-testing on the xcodebuild
command line instead.

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 22:19:37 -07:00
Lawrence Chen
bf1692fc30
Merge pull request #1774 from gaelic-ghost/add/release-script-logs-launch-status
Report release launch status in reloadp.sh
2026-03-18 22:18:20 -07:00
Austin Wang
539109195b
Merge main into sidebar PR status branch (#1776)
* test(sidebar): add failing PR checks regressions

* fix(sidebar): show workspace PR status

* refactor(sidebar): restore PR icon style

* refactor(sidebar): simplify PR check labels

* test(sidebar): cover focused workspace PR selection

* fix(sidebar): scope workspace PRs to current branch

* test(sidebar): cover stale PR after branch change

* fix(sidebar): clear stale PRs on branch changes

* test(sidebar): cover workspace PR false positives

* fix(sidebar): stop false-positive workspace PR badges

* test(cmuxTests): remove duplicate sidebar PR regressions

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 12:34:55 -07:00
Austin Wang
e203c51c7a
Show update-available banner automatically on launch (#1651)
* Show update-available banner automatically on launch

Probe for updates immediately on launch via Sparkle's
checkForUpdateInformation() so the sidebar surfaces a passive update
indicator without waiting for the 24h scheduler. When Sparkle detects
an available update in the background, the pill now shows
"Update Available: X.Y.Z" with accent styling while the updater is
idle. Clicking it triggers the full interactive update flow.

Also fixes thread safety in delegate callbacks by dispatching
@Published mutations to the main queue.

Closes #1643

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Add periodic background update probe every 15 minutes

The launch-only probe wouldn't catch updates published while the app
is already running. Add a repeating 15-minute timer that calls
checkForUpdateInformation() so the sidebar banner appears within a
reasonable window after a new version is published.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Change background update probe interval to 30 minutes

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

* Change update check interval to 1 hour and migrate existing users

Reduce Sparkle's scheduled check interval from 24h to 1h so update
banners appear sooner. Migrate users stuck on the old 24h default by
bumping the migration key to v2. Align background probe interval with
the Sparkle check interval instead of hardcoding 30 minutes.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>

---------

Co-authored-by: Claude Opus 4.6 <noreply@anthropic.com>
2026-03-18 12:30:44 -07:00
Gale W
f6d2b1e172 Poll release launch status before warning 2026-03-18 15:03:11 -04:00
Gale W
e55108b888 Make release reload report launch status 2026-03-18 13:22:31 -04:00
Lawrence Chen
63e65a7f5c
Merge pull request #1724 from manaflow-ai/feat-display-harness-manifest-env
Fix display harness manifest handoff in UI test
2026-03-18 06:07:56 -07:00
Lawrence Chen
e4c3d93e6c
Merge pull request #1479 from manaflow-ai/feat-hidden-titlebar-minimalism-reset
Hide workspace titlebar chrome in minimal mode
2026-03-18 06:07:29 -07:00
Lawrence Chen
637a0eed13
Add command palette minimal mode actions 2026-03-18 04:18:11 -07:00
Lawrence Chen
b4b345d4ad
Add command palette minimal mode toggle UI test 2026-03-18 04:13:01 -07:00
Lawrence Chen
1e908b2b75
Merge origin/main into feat-hidden-titlebar-minimalism-reset 2026-03-18 04:05:43 -07:00
Lawrence Chen
1311d4aec3
Merge pull request #1740 from manaflow-ai/task-command-palette-check-ordering
Fix command palette ordering for check query
2026-03-18 03:52:10 -07:00
Lawrence Chen
e99bc40285
Fix test target build after split test sync 2026-03-18 03:49:24 -07:00
Lawrence Chen
34a5f71bde
Merge remote-tracking branch 'origin/main' into feat-display-harness-manifest-env 2026-03-18 03:35:46 -07:00
Lawrence Chen
d63f852719
Stabilize command palette ordering UI test 2026-03-18 03:34:36 -07:00
Lawrence Chen
fbe209cb33
Read the prebuilt display helper path from the harness manifest 2026-03-18 03:30:32 -07:00
Lawrence Chen
e4ded73982
Add PostHog and Resend disclosures to privacy policy (#1744)
The privacy policy previously only mentioned Sentry, Sparkle, and
Ghostty. Added PostHog (website analytics, cookies) and Resend
(transactional email for feedback) to both the data collection
section and the third-party services list.

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 03:30:09 -07:00
Lawrence Chen
e569254ef3
Wire split test files into build phase, add test timeout (#1743)
The previous PR (#1717) added 15 test files to the pbxproj PBXBuildFile and
PBXGroup sections but missed adding them to the cmuxTests Sources build phase
(F1000005), so they were never compiled in CI.

Also add executionTimeAllowance = 30s to AppDelegateShortcutRoutingTests to
prevent testCmdWClosesWindowWhenClosingLastSurfaceInLastWorkspace from hanging
indefinitely on CI (the actual root cause of the timeout).

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 03:25:31 -07:00
Lawrence Chen
8512e6d8a5
fix: skip identical session autosave writes (#1732)
* test: cover repeated identical session saves

* fix: skip identical session snapshot writes

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 03:24:40 -07:00
Lawrence Chen
8a74dc2d05
Use dynamic copyright year in Terms of Service (#1742)
SSR the current year instead of hardcoding it.

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 03:24:15 -07:00
Lawrence Chen
d33e1d1cf9
SEO hardening: canonicals, sitemap x-default, legal dates (#1741)
- Add canonical tags to community, nightly, wall-of-love, and all
  legal pages (prevents duplicate content with trailing slashes)
- Add x-default hreflang to sitemap for all entries
- Add legal pages (privacy-policy, terms-of-service, eula) to sitemap
- Stabilize sitemap lastModified to fixed dates instead of new Date()
  (avoids noisy lastmod changes on every deploy)
- Update legal page dates to March 18, 2026 (domain migration is a
  material change to the "Site" definition)
- Update copyright year to 2026

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 03:22:58 -07:00
Lawrence Chen
7fb1f50966
Launch display helper from inside the UI test sandbox 2026-03-18 03:22:04 -07:00
Lawrence Chen
377d62e8fe
Fix empty env prefix in e2e workflow 2026-03-18 03:19:29 -07:00
Lawrence Chen
2c81192299
Prefer command palette title matches over keywords 2026-03-18 03:13:37 -07:00
Lawrence Chen
8340c01428
Add command palette ordering regression test 2026-03-18 03:13:28 -07:00
Lawrence Chen
1c6d5568f7
Move display harness rendezvous files to /tmp 2026-03-18 03:13:23 -07:00
Lawrence Chen
cb4197ecee
Make founders email selectable in feedback success view (#1733)
Add .textSelection(.enabled) to the success body text so users can
select and copy the founders@manaflow.com email address.

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 02:59:55 -07:00
Lawrence Chen
de1aa7a6ae
Include hardware details in feedback submissions (#1726)
Add chip (e.g. Apple M1 Pro), RAM, hardware model, architecture
(arm64/x86_64), and display info to feedback metadata. All fields are
non-sensitive system properties collected via sysctlbyname, ProcessInfo,
and NSScreen. Server-side route accepts and renders the new fields in
both plain text and HTML email bodies.

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 02:59:16 -07:00
Austin Wang
0a99bb504c
fix: remove restricted web-browser entitlement (#1727) 2026-03-18 02:32:58 -07:00
Austin Wang
2f08e1bee0
Revert "fix: repair NIGHTLY Sparkle quarantine metadata (#1703)" (#1725)
This reverts commit 629b63dfb8.
2026-03-18 01:56:36 -07:00
Lawrence Chen
95cd26c0b6
Restore stable display harness manifest path 2026-03-18 01:46:32 -07:00
Lawrence Chen
b1e2d1cb19
Pass display harness manifest path into UI test 2026-03-18 01:40:04 -07:00
Lawrence Chen
c1543ea49a
Fix floating portal terminal after nightly update relaunch (#1696)
* test: add background-prime visibility regression

* fix: hide background-primed workspaces from portals
2026-03-18 01:39:12 -07:00
Lawrence Chen
cabd5b8a00
Revert testimonial quotes back to cmux.dev (#1722)
These are user-generated quotes that should preserve the original
wording. The domain migration should not rewrite what users said.

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 01:34:45 -07:00
Lawrence Chen
387742a5a0
Update all remaining cmux.dev references to cmux.com (#1721)
- Swift app: feedback API endpoint, docs URLs, changelog URL, CLI help
- PostHog proxy: r.cmux.dev -> r.cmux.com
- All 20 README files: docs and blog links
- Homebrew cask: homepage URL in update-homebrew workflow

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 01:32:12 -07:00
Lawrence Chen
798c1fbc42
Fix laggy terminal sync during sidebar drags (#1598)
* Fix sidebar drag terminal resize lag

* Add display resolution churn regression

* Prelaunch display churn helper in e2e workflow

* Use manifest handoff for display churn UI test

* Fix e2e display churn harness startup

* Resolve display churn UI test socket path

* Use marker-based socket discovery in display UI test

* Add failing sidebar drag portal regression tests

* Fix sidebar drag terminal portal resize lag

* Add failing scoped resize regression tests

* Fix terminal portal resize scheduling lag

* Add failing zsh resize prompt regression test

* Fix zsh resize prompt duplication

* Fix Sequoia sidebar resize regression

* Guard display-resolution CI runner

* Run display-resolution CI on WarpBuild

* Allow backgrounded display regression app launch

* Launch display regression app directly

* Launch display regression app via NSWorkspace

* Load display regression launch env from manifest

* Write display regression manifest in runner temp dir

* Write display regression manifest in shared tmp

* Write display regression manifest in repo scratch dir

* Launch display regression app with explicit env

* Avoid xcodebuild broken pipe in compat CI

* Launch display regression via XCUIApplication

* Harden display regression socket readiness

* Trust display socket diagnostics path

* Replace display socket probe with render diagnostics

* Write display churn start marker atomically

* Move display churn harness out of /tmp

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 01:28:11 -07:00
Austin Wang
629b63dfb8
fix: repair NIGHTLY Sparkle quarantine metadata (#1703)
* test: add quarantine regression coverage

* fix: repair Sparkle quarantine metadata for nightly updates

* fix: repair extracted Sparkle app on extraction callbacks
2026-03-18 01:23:53 -07:00
Lawrence Chen
ac83af62ae
Split 16k-line mega test file, bump CI timeout, stream xcodebuild output (#1717)
CmuxWebViewKeyEquivalentTests.swift grew to 15,907 lines with 100+ test classes.
Swift compiles per-file, so this single file serialized all type-checking onto one
compiler process, pushing CI past the 20-minute timeout after core-file changes.

Split into 10 domain-based files (1k-3k lines each) so Xcode can compile them in
parallel. Also bump timeout-minutes from 20 to 30 for headroom, stream xcodebuild
output via tee instead of capturing to a variable (makes CI logs debuggable), and
add 5 test files that were missing from the pbxproj Sources build phase.

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-18 01:17:25 -07:00
Lawrence Chen
33d21ea19e
feat(web): redirect cmux.dev to cmux.com with 301s for SEO (#1716)
Redirect cmux.dev to cmux.com with 301s for SEO
2026-03-18 01:16:43 -07:00
Austin Wang
55cb5c6763
Fix sidebar workspace PR status display and false positives (#1636)
* test(sidebar): add failing PR checks regressions

* fix(sidebar): show workspace PR status

* refactor(sidebar): restore PR icon style

* refactor(sidebar): simplify PR check labels

* test(sidebar): cover focused workspace PR selection

* fix(sidebar): scope workspace PRs to current branch

* test(sidebar): cover stale PR after branch change

* fix(sidebar): clear stale PRs on branch changes

* test(sidebar): cover workspace PR false positives

* fix(sidebar): stop false-positive workspace PR badges

* test(cmuxTests): remove duplicate sidebar PR regressions
2026-03-17 22:57:12 -07:00
Austin Wang
bdd95902f2
Restore last-surface close preference toggle (#1679)
* test: cover last-surface close preference regression

* fix: restore last-surface close preference
2026-03-17 22:36:32 -07:00
Lawrence Chen
b64fb301c1
fix(terminal): execute Return after Korean IME commit (#1671)
* test(terminal): cover Return after Korean IME commit

* fix(terminal): execute Return after Korean IME commit

---------

Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-17 22:07:45 -07:00
Lawrence Chen
58de044f4f
Rename "Import From Browser" to "Import Browser Data" (#1672)
Co-authored-by: Lawrence Chen <lawrencecchen@users.noreply.github.com>
2026-03-17 22:07:19 -07:00
Lawrence Chen
e505782a31
Merge remote-tracking branch 'origin/main' into feat-hidden-titlebar-minimalism-reset 2026-03-17 20:06:43 -07:00
Lawrence Chen
03820ae20f
Update bonsplit for minimal mode titlebar double click 2026-03-17 20:05:24 -07:00
Lawrence Chen
853da3af19
Update bonsplit for empty tab bar drag fix 2026-03-17 19:57:27 -07:00