From 5c4af98ec646b7c9ebca0de38ec6d634668e08cb Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 21 Sep 2026 21:36:14 -0700 Subject: [PATCH 1/7] ci: keep iOS shell UI tests off macOS --- scripts/ci/detect_ci_change_areas.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/ci/detect_ci_change_areas.py b/scripts/ci/detect_ci_change_areas.py index 81015ff9280a..da3c54eedb0c 100755 --- a/scripts/ci/detect_ci_change_areas.py +++ b/scripts/ci/detect_ci_change_areas.py @@ -294,6 +294,11 @@ def is_agent_session_web_change(path: str) -> bool: def is_macos_neutral(path: str) -> bool: if path in CI_CONTROL_PLANE_ONLY: return True + # CmuxMobileShellUI is an iOS-only package and its Tests target is exercised + # by test-ios.yml, not by the macOS Swift-package lane. Test-only edits here + # cannot affect desktop product bytes or macOS package tests. + if path.startswith("Packages/iOS/CmuxMobileShellUI/Tests/"): + return True # `cmux-tui/` is the standalone cmux-tui Rust project, gated by its own # workflow. Packages/iOS stays macOS-relevant because the desktop app # links CmuxMobileRPC, CmuxMobileTransport, and their package dependencies. From a3eefd6f233a94475675e443df7cefa6f401edf3 Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 21 Sep 2026 21:36:17 -0700 Subject: [PATCH 2/7] test(ci): cover iOS shell UI test routing --- tests/test_ci_linux_guard_routing.py | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/tests/test_ci_linux_guard_routing.py b/tests/test_ci_linux_guard_routing.py index 4ed1c021cbc4..c0ccced80e6e 100755 --- a/tests/test_ci_linux_guard_routing.py +++ b/tests/test_ci_linux_guard_routing.py @@ -14,6 +14,7 @@ from test_ci_change_areas import ( linux_preflight_needs, + module, run_guard_status, run_linux_preflight, run_tests_gate, @@ -59,6 +60,14 @@ def route(paths, event="pull_request", macos="false"): class LinuxGuardRoutingTests(unittest.TestCase): + def test_ios_shell_ui_test_only_change_skips_macos(self): + actual = module.classify_files([ + "Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift" + ]) + self.assertFalse(actual.macos) + self.assertFalse(actual.web) + self.assertFalse(actual.release_build) + def test_candidate_router_cannot_disable_its_own_guards(self): script = workflow_job_step_script("changes", "Route Linux guard suites") for changed in ( From a0a883cd6a1d664800886fdb904992674a87226c Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 21 Sep 2026 21:36:22 -0700 Subject: [PATCH 3/7] test(iOS): isolate preview text reconfigure route --- .../CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift b/Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift index 2cb4cd1d6af5..b32f4350da45 100644 --- a/Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift +++ b/Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift @@ -129,7 +129,6 @@ import UIKit coordinator.attach(to: tableView) workspace.previewText = "Agent finished: PR opened" - workspace.hasUnread = true coordinator.update(configuration: configuration(workspaces: [workspace]), in: tableView) #expect( From 0544389c5bf000b28f50e2b76f69ad004b18dd1f Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 21 Sep 2026 21:38:48 -0700 Subject: [PATCH 4/7] ci: register build graph health guard ownership --- scripts/ci/workflow_guard_groups.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ci/workflow_guard_groups.py b/scripts/ci/workflow_guard_groups.py index f622ace656a2..1db4cfbe53b9 100644 --- a/scripts/ci/workflow_guard_groups.py +++ b/scripts/ci/workflow_guard_groups.py @@ -175,6 +175,7 @@ "tests/test_bash_integration_no_done_notifications.py": frozenset(("quality-determinism",)), "tests/test_benchmark_dev_fleet_warm_slots.py": frozenset(("preflight",)), "tests/test_build_app_bundled_resources.sh": frozenset(("quality-runtime",)), + "tests/test_build_graph_health.py": frozenset(("preflight",)), "tests/test_build_metrics.py": frozenset(("ci",)), "tests/test_ci_app_host_failure_census.py": frozenset(("app-host-process",)), "tests/test_ci_app_host_guard_structure.py": frozenset(("ci",)), From 31390a0fc53920a26697af2647567a99697c38c8 Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 21 Sep 2026 21:40:41 -0700 Subject: [PATCH 5/7] ci: register build graph health step ownership --- scripts/ci/workflow_guard_groups.py | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ci/workflow_guard_groups.py b/scripts/ci/workflow_guard_groups.py index 1db4cfbe53b9..d90b5a3cb1cb 100644 --- a/scripts/ci/workflow_guard_groups.py +++ b/scripts/ci/workflow_guard_groups.py @@ -32,6 +32,7 @@ "Test macOS localization catalog tooling": "preflight", "Test review fabric contracts": "preflight", "Validate Blacksmith Testbox broker trust boundary": "ci", + "Validate build graph health tooling": "preflight", "Validate CI Xcode selection fast path": "release-notary", "Validate CI change area filter": "ci", "Validate CMUX INTERNAL main-push path filter": "release-ios", From 48456027cf6672debea54fa83a55368f20e212e7 Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 21 Sep 2026 21:42:53 -0700 Subject: [PATCH 6/7] ci: sync guard step ownership manifest --- scripts/ci/workflow_guard_groups.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ci/workflow_guard_groups.py b/scripts/ci/workflow_guard_groups.py index d90b5a3cb1cb..946fcb565cbb 100644 --- a/scripts/ci/workflow_guard_groups.py +++ b/scripts/ci/workflow_guard_groups.py @@ -28,10 +28,13 @@ STEP_OWNERS = { "Initialize Ghostty for Zig version guard": "release-tooling", "Run canonical CMUX CI guard profile": "ci", + "Set up Bun for guard tests": "preflight", "Test XCStrings catalog lint": "preflight", "Test macOS localization catalog tooling": "preflight", "Test review fabric contracts": "preflight", + "Set up Python 3.9 for nightly prune compatibility": "release-tooling", "Validate Blacksmith Testbox broker trust boundary": "ci", + "Prepare workflow guard Python dependencies": "ci", "Validate build graph health tooling": "preflight", "Validate CI Xcode selection fast path": "release-notary", "Validate CI change area filter": "ci", From e5f3312da8f3b666485cc46368f78fcd279ba32f Mon Sep 17 00:00:00 2001 From: Leo Date: Mon, 21 Sep 2026 21:45:32 -0700 Subject: [PATCH 7/7] ci: keep only guarded step ownership entries --- scripts/ci/workflow_guard_groups.py | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/ci/workflow_guard_groups.py b/scripts/ci/workflow_guard_groups.py index 946fcb565cbb..27e29cce3c95 100644 --- a/scripts/ci/workflow_guard_groups.py +++ b/scripts/ci/workflow_guard_groups.py @@ -28,13 +28,11 @@ STEP_OWNERS = { "Initialize Ghostty for Zig version guard": "release-tooling", "Run canonical CMUX CI guard profile": "ci", - "Set up Bun for guard tests": "preflight", "Test XCStrings catalog lint": "preflight", "Test macOS localization catalog tooling": "preflight", "Test review fabric contracts": "preflight", "Set up Python 3.9 for nightly prune compatibility": "release-tooling", "Validate Blacksmith Testbox broker trust boundary": "ci", - "Prepare workflow guard Python dependencies": "ci", "Validate build graph health tooling": "preflight", "Validate CI Xcode selection fast path": "release-notary", "Validate CI change area filter": "ci",