Skip to content

fix(iOS): stabilize preview route test and keep it off macOS CI - #13607

Merged
teamleaderleo merged 7 commits into
mainfrom
fix/13563-ios-test-routing
Sep 22, 2026
Merged

teamleaderleo merged 7 commits into
mainfrom
fix/13563-ios-test-routing

Conversation

@teamleaderleo

@teamleaderleo teamleaderleo commented Sep 22, 2026 •

Copy link
Copy Markdown
Collaborator

Fixes #13563.

Changes

  • add the missing tests/test_build_graph_health.py → preflight guard ownership entry, which current main's guard workflow already references
  • remove the unrelated hasUnread mutation from previewTextChangeReconfiguresInPlaceWithoutTableReload(), so the test isolates the preview-text-only route its name/assertion describes
  • keep unread/native-action reload behavior covered by the separate read-state test
  • classify Packages/iOS/CmuxMobileShellUI/Tests/** as macOS-neutral because that package test target is exercised by test-ios.yml, not the macOS Swift-package lane
  • add a Linux routing regression that pins macos=false, web=false, and release_build=false for that test subtree

Evidence

Failing iPhone run: https://github.com/manaflow-ai/cmux/actions/runs/35682638589

Failure:

WorkspaceListScrollUpdateTests.previewTextChangeReconfiguresInPlaceWithoutTableReload()
expected .reconfiguredInPlace
observed .tableReload

The test changed both previewText and hasUnread. The production coordinator intentionally treats hasUnread changes as native-action payload changes, which select the table reload path. The fix removes only that unrelated mutation.

A later unchanged-iOS run passed, confirming this was test-state/contract instability rather than a signing regression.

This PR changes the CI router itself, so it should exercise routing validation once. After merge, isolated CmuxMobileShellUI/Tests/** edits will stay off the macOS lane.


View with [code]smith Autofix with [code]smith
Need help on this PR? Tag @codesmith-bot with what you need. Autofix is disabled.


Summary by cubic

Stabilizes the iOS preview text routing test and keeps CmuxMobileShellUI test edits off the macOS CI lane.

  • Removes the unrelated hasUnread mutation from previewTextChangeReconfiguresInPlaceWithoutTableReload(), since hasUnread changes intentionally select the table reload path; read-state behavior stays covered by its own test.
  • Classifies Packages/iOS/CmuxMobileShellUI/Tests/** as macOS-neutral in the CI router so test-only changes there no longer trigger the macOS Swift-package lane.
  • Adds a routing regression test asserting that the test subtree sets macos=false, web=false, and release_build=false.
  • Registers tests/test_build_graph_health.py under the preflight guard group and syncs the related step ownership entries in workflow_guard_groups.py, keeping only guarded entries.

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

Review in cubic

Summary by CodeRabbit

  • Tests

    • Updated workspace list coverage to verify that preview-text changes refresh items in place without reloading the full list.
    • Added coverage confirming iOS-only test changes do not trigger unnecessary macOS processing.
  • Chores

    • Improved CI change classification for iOS test updates.
    • Added ownership tracking for nightly maintenance and build-health validation steps, improving routing and accountability for automated checks.

@coderabbitai

coderabbitai Bot commented Sep 22, 2026 •

Copy link
Copy Markdown

Review in Change Stack →

Navigate logical layers of code changes, visualize relationships, and explore their blast radius.

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Repository: manaflow-ai/cmux/.coderabbit.yaml

Review profile: ASSERTIVE

Plan: Advanced

Run ID: ed26ccf5-1ae3-4004-94d2-b61b0f8fa1fa

📥 Commits

Reviewing files that changed from the base of the PR and between 6cfa1b0 and e5f3312.

📒 Files selected for processing (4)
  • Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift
  • scripts/ci/detect_ci_change_areas.py
  • scripts/ci/workflow_guard_groups.py
  • tests/test_ci_linux_guard_routing.py
💤 Files with no reviewable changes (1)
  • Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift

Included review availability: Your plan provides up to 10 included reviews per hour; 0 remain after this review.


📝 Walkthrough

Walkthrough

The change updates an iOS test to use a preview-text mutation, classifies iOS package tests as macOS-neutral, adds classification coverage, and assigns ownership for two CI paths.

Changes

CI routing and test alignment

Layer / File(s) Summary
iOS test and macOS classification
Packages/iOS/CmuxMobileShellUI/Tests/..., scripts/ci/detect_ci_change_areas.py, tests/test_ci_linux_guard_routing.py
The test now changes workspace.previewText. iOS package tests are classified as macOS-neutral. A test verifies that this change does not enable macos, web, or release_build.
Workflow ownership mappings
scripts/ci/workflow_guard_groups.py
The nightly-prune Python setup step is assigned to release-tooling. Build-graph health validation and its test path are assigned to preflight.

Priority: ➖ Normal

Estimated code review effort: 2 (Simple) | ~10 minutes

Change: Bug fix · Severity of issue fixed: Medium

Merge Risk: ⚪ Minimal · up to e5f33

The change isolates the flaky iOS test and refines CI routing and ownership; no merge-blocking production or CI risk remains.

🚥 Pre-merge checks | ✅ 23 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Out of Scope Changes check ⚠️ Warning The changes in scripts/ci/detect_ci_change_areas.py and tests/test_ci_linux_guard_routing.py change macOS CI routing for iOS test paths. The ownership entries in `scripts/ci/workflow_guard_groups.… Remove the unrelated CI routing and ownership changes from this pull request, or link them to a separate issue that requires those changes.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 3 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (23 passed)
Check name Status Explanation
Title check ✅ Passed The title clearly summarizes the two primary changes: stabilizing the iOS preview-route test and excluding it from macOS CI.
Description check ✅ Passed The description clearly explains the problem, changes, rationale, affected tests, CI routing behavior, and validation evidence. It is sufficiently complete despite using Changes and Evidence sections …
Linked Issues check ✅ Passed Issue #13563 requires isolation of the flaky preview-route test from unrelated mutations. The test now changes only workspace.previewText before coordinator.update; it no longer sets `workspace.ha…
Cmux Cloud Persistent Session And Early Input ✅ Passed PASS: The authoritative pull-request diff changes only an iOS test and CI routing/ownership files. It introduces no Cloud terminal creation, transport, cmux-tui client, PTY readiness, input routing, a…
Cmux Swift Actor Isolation ✅ Passed PASS. The authoritative PR diff contains one Swift change, and it is a test-only deletion in WorkspaceListScrollUpdateTests.swift that removes workspace.hasUnread = true. The remaining changes are…
Cmux Swift Blocking Runtime ✅ Passed PASS: The PR changes only one Swift test file and removes a hasUnread assignment. It adds no blocking or timing primitive. The other changes are Python CI routing and ownership updates, so the produ…
Cmux Browser Automation Off-Main ✅ Passed PASS. The PR changes only an iOS test, CI change-area classification, CI ownership mappings, and Linux routing coverage. The authoritative diff contains no browser.* command, WebKit wait, socket-wor…
Cmux Expensive Synchronous Load ✅ Passed PASS. The authoritative diff changes only one iOS test Swift file and CI Python files. It removes a test mutation and adds no production Swift code or synchronous agent-history load. No changed lines …
Cmux Cache Substitution Correctness ✅ Passed PASS. The authoritative PR diff changes one Swift test file under Packages/iOS/CmuxMobileShellUI/Tests/ and three Python CI/test files. It makes no production Swift, TypeScript, or JavaScript change…
Cmux No Hacky Sleeps ✅ Passed PASS. The pull request introduces no fixed sleeps, timers, polling, delayed dispatch, or wall-clock synchronization. The Swift change removes an unrelated state mutation from a test. The Python change…
Cmux Algorithmic Complexity ✅ Passed PASS: The PR changes only an iOS test, CI classification/ownership data, and a routing regression test. The Swift change removes one test fixture mutation. The CI change adds one constant-time prefix …
Cmux Swift Concurrency ✅ Passed The Swift portion of the PR only removes workspace.hasUnread = true from an XCTest/Testing test. The authoritative diff adds no Swift lines and introduces no DispatchQueue, Combine, completion-han…
Cmux Swift @Concurrent ✅ Passed The only Swift diff removes workspace.hasUnread = true from an existing synchronous test. The changed test remains in an @MainActor suite, and the diff introduces no async, nonisolated, or `@c…
Cmux Swift Package Boundaries ✅ Passed PASS: The only Swift change is a one-line edit in Packages/iOS/CmuxMobileShellUI/Tests/CmuxMobileShellUITests/WorkspaceListScrollUpdateTests.swift, under the SwiftPM test target. The other changes a…
Cmux Swiftpm Lockfiles ✅ Passed The PR changes only an iOS test, CI routing logic, guard ownership data, and a routing test. It changes no Package.swift dependency, Package.resolved file, Xcode project package reference, or cmux-own…
Cmux Swift Logging ✅ Passed The PR adds no production Swift logging. Its only Swift change deletes workspace.hasUnread = true from a test. The remaining changes are Python CI routing and ownership updates, so no prohibited log…
Cmux User-Facing Error Privacy ✅ Passed PASS: The pull request changes only an iOS test and CI routing/ownership files. It adds no cmux app UI, product CLI, or product API error text. The changed CI diagnostics are internal tooling, and the…
Cmux Full Internationalization ✅ Passed PASS: The diff changes only an iOS test and CI routing/ownership tests and scripts. It adds no production user-facing Swift or web text, localization catalog, Info.plist, or web message entry. The int…
Cmux Swiftui State Layout ✅ Passed PASS: The only Swift change removes workspace.hasUnread = true from a UIKit WorkspaceListScrollUpdateTests test. The diff adds no SwiftUI view, ObservableObject/@Published state, `GeometryRead…
Cmux Architecture Rethink ✅ Passed PASS: The only Swift change removes workspace.hasUnread = true from a test that targets the preview-text route. The coordinator already owns the route invariant: hasUnread changes trigger native-a…
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed PASS: The PR changes one Swift test file only. It removes workspace.hasUnread = true from previewTextChangeReconfiguresInPlaceWithoutTableReload() and adds no NSWindow, NSPanel, `NSWindowContr…
Cmux Source Artifacts ✅ Passed All four changed paths are intentional source, test, and CI configuration files. The diff contains one test isolation change, CI routing logic, guard ownership mappings, and a routing regression test.…
Cmux No Test Or Debug Seam In Production Source ✅ Passed PASS: The authoritative PR diff changes one Swift file under Packages/iOS/CmuxMobileShellUI/Tests/ and three Python files. It changes no Swift file under a production Sources/ path and adds no pro…
Full details: Out of Scope Changes check

Explanation

The changes in scripts/ci/detect_ci_change_areas.py and tests/test_ci_linux_guard_routing.py change macOS CI routing for iOS test paths. The ownership entries in scripts/ci/workflow_guard_groups.py register unrelated nightly-prune and build-graph-health steps. Issue #13563 addresses the flaky WorkspaceListScrollUpdateTests route assertion and does not require these CI routing or ownership changes.

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 1
📝 Generate docstrings 💡
  • Commit to this branch
  • Create a new PR
🧪 Generate unit tests (beta)
  • Commit to this branch
  • Create a new PR

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.

@github-actions

Copy link
Copy Markdown
Contributor

All contributors have signed the CLA ✍️ ✅
Posted by the CLA Assistant Lite bot.

@blacksmith-sh

This comment has been minimized.

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.

iOS WorkspaceListScrollUpdateTests preview reconfigure test flakes on iPhone simulator

1 participant