Skip to content

Fix BrowserOmnibarSuggestionsUITests e2e lane - #6940

Closed
austinywang wants to merge 46 commits into
mainfrom
issue-5934-e2e-browseromnibarsuggestionsuitests-cannot-r
Closed

austinywang wants to merge 46 commits into
mainfrom
issue-5934-e2e-browseromnibarsuggestionsuitests-cannot-r

Conversation

@austinywang

@austinywang austinywang commented Jun 26, 2026 •

Copy link
Copy Markdown
Contributor

Fixes #5934.

Summary

  • Route manual e2e auto runs through the display-capable macOS runner variable and remove the known-bad Warp GUI option.
  • Add the two failing BrowserOmnibarSuggestionsUITests methods to the existing PR UI regression lane.
  • Stabilize the depot-sensitive omnibar tests by waiting for observable focus and inline-completion accessibility state.

Local validation

  • ./tests/test_ci_self_hosted_guard.sh
  • python3 scripts/swift_file_length_budget.py
  • python3 tests/test_ci_change_areas.py
  • git diff --check
  • YAML parse for .github/workflows/ci.yml and .github/workflows/test-e2e.yml

Note: I did not run reload.sh or local xcodebuild, per issue instructions. The depot failures are GUI timing/focus-sensitive and are not cleanly reproducible locally under that constraint; the existing UITests plus the added PR UI regression lane are the executable signals.


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


Summary by cubic

Stabilizes the BrowserOmnibarSuggestions e2e lane by pinning UI tests to a display-capable Depot macOS runner, driving Backspace through the app’s control socket to invoke a real deleteBackward event, and fixing inline-completion deletion at typed/display boundaries so the typed prefix updates correctly. CI now runs browser UI regressions before display-churn and removes the persistent virtual-display helper.

  • Bug Fixes
    • CI/e2e: fail-closed to a Depot display runner via MACOS_RUNNER_DISPLAY; validate runner identity; run omnibar and browser-find regressions before display-churn; remove Warp choices; update run-name/concurrency/cache; add guard enforcing the display-runner invariant.
    • UI tests: wait for goto_split setup and ensure the app is foreground; focus by clicking the omnibar pill/field; type via the app and wait for suggestions/inline completion; send Backspace via the control socket (simulate_shortcut backspace) and assert the typed prefix is revealed before Escape; clean temp data on teardown.
    • Omnibar: handle deleteBackward(_:) only when the inline selection is active and skip mid-prefix carets; treat carets at typed or display inline boundaries as active; rename predicate to inlineCompletionSelectionIsActive; add Swift Testing unit coverage for boundary and mid-prefix deletion.

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

Review in cubic

Summary by CodeRabbit

  • New Features
    • Added a control-socket client to improve how UI tests interact with the omnibar.
    • Expanded macOS UI regression coverage for omnibar suggestion and inline completion flows.
  • Bug Fixes
    • Improved omnibar UI test determinism with per-test state isolation and readiness waiting.
    • Updated inline completion/backspace handling behavior and added regression checks around inline-boundary vs mid-prefix cases.
  • CI / Tests
    • Enhanced macOS UI regression with virtual display health verification.
    • Updated E2E auto-runner selection to use the GUI runner display variable, including related validation and caching changes.

@vercel

vercel Bot commented Jun 26, 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 Jul 5, 2026 12:54am
cmux-staging Building Building Preview, Comment Jul 5, 2026 12:54am

@coderabbitai

coderabbitai Bot commented Jun 26, 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
📝 Walkthrough

Walkthrough

The PR updates macOS runner selection, adds a persistent virtual-display check before omnibar UI regressions, and changes omnibar inline backspace handling with updated unit and UI test synchronization.

Changes

Omnibar regression CI and test flow

Layer / File(s) Summary
E2E runner defaults
.github/workflows/test-e2e.yml, tests/test_ci_self_hosted_guard.sh
Auto-runner selection, concurrency, runs-on, Depot validation, and cache references now use MACOS_RUNNER_DISPLAY.
UI regression job step
.github/workflows/ci.yml
ui-regressions adds a virtual-display health check and then runs the two BrowserOmnibarSuggestionsUITests cases with a 180-second execution allowance.
Inline backspace command handling
Sources/Panels/BrowserPanelView.swift, cmuxTests/OmnibarAndToolsTests.swift
deleteBackward interception now uses inlineCompletionSelectionIsActive(...); the unit test harness adds selector dispatch support and boundary and mid-prefix deletion tests.
Omnibar UI test synchronization
cmuxUITests/BrowserOmnibarSuggestionsUITests.swift, cmuxUITests/ControlSocketReadinessUITestSupport.swift
The omnibar UI tests add teardown cleanup, goto-split readiness polling, socket readiness helpers, typing helpers, and updated inline-completion and backspace assertions.

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

  • manaflow-ai/cmux#4922 — Updates the same macOS E2E workflow and self-hosted guard around runner selection and fallback validation.
  • manaflow-ai/cmux#6407 — Touches the same .github/workflows/ci.yml virtual-display setup for UI regressions.
  • manaflow-ai/cmux#6650 — Also changes test-e2e.yml and the guard script around macOS runner display selection.

Suggested reviewers

  • lawrencecchen

Poem

I nibbled the backspace, soft and neat,
While runner moons kept time with beat.
A virtual hush, then tests took flight,
The omnibar sparkled clear and bright,
Hop-hop — green paths beneath my feet.


Important

Pre-merge checks failed

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

❌ Failed checks (1 error, 2 warnings)

Check name Status Explanation Resolution
Cmux Swift Blocking Runtime ❌ Error ChatScreen added a production .task(id:) that uses Task.sleep(for: .seconds(8)) to auto-dismiss the error banner. Replace the sleep with a cancellation-aware timer/state transition or other real signal; keep timing delays out of shipped Swift code.
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
Description check ⚠️ Warning The description has Summary and validation notes, but it misses the required Testing, Demo Video, Review Trigger, and Checklist sections. Add the missing template sections, especially Testing, Demo Video for the UI changes, the review-trigger comment block, and the checklist items.
✅ Passed checks (22 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes address both linked requirements: rerouting auto to the display-capable macOS runner and stabilizing the two depot-sensitive omnibar tests.
Out of Scope Changes check ✅ Passed No clear out-of-scope changes are evident; the CI, UI test, and helper updates all support the linked omnibar lane fix.
Cmux Swift Actor Isolation ✅ Passed Only production Swift change is BrowserPanelView UI code; it stays within a SwiftUI View/@mainactor Coordinator and adds no new Sendable models/protocols or background-store access.
Cmux Browser Automation Off-Main ✅ Passed PASS: browser.wait/eval/screenshot/cookies/storage/state/addscript are already worker-routed, covered by policy tests; this PR only adds UI/backspace coverage.
Cmux Expensive Synchronous Load ✅ Passed PASS: the only production hunk switches deleteBackward to a pure selection helper; no new RestorableAgentSessionIndex.load(), file scans, or JSON loads were added to main-actor app code.
Cmux Cache Substitution Correctness ✅ Passed PASS: the only production Swift change is inline-backspace handling; submit/snapshot code still reads the editor synchronously, with no persistence/history/undo cache swap.
Cmux No Hacky Sleeps ✅ Passed No non-Swift runtime diff adds sleeps/polling; the only shell change is a regex/comment update, and workflow YAML is out of scope.
Cmux Algorithmic Complexity ✅ Passed The only production change is an O(1) inline-completion backspace predicate; no new full-collection scans, batch rescans, or repeated sorting/filtering were introduced.
Cmux Swift Concurrency ✅ Passed Diff only adds test-boundary socket/polling helpers and a UI command tweak; no new DispatchQueue/Combine/completion-handler or fire-and-forget Task patterns were added.
Cmux Swift @Concurrent ✅ Passed No new async/@Concurrent mismatch: the diff adds only synchronous UI-test/helpers and @MainActor tests; deleteBackward stays sync and actor-isolated.
Cmux Swift File And Package Boundaries ✅ Passed Production touch is a 1-line AppKit backspace predicate tweak in an existing 7,952-line UI file; the 867/319/1559-line additions are tests/support, not production boundaries.
Cmux Swiftpm Lockfiles ✅ Passed Diff touches workflows and Swift sources only; no Package.swift, Package.resolved, project.pbxproj, or .gitignore changes, so the SwiftPM lockfile rule isn’t implicated.
Cmux Swift Logging ✅ Passed BrowserPanelView only adds #if DEBUG cmuxDebugLog calls; no new print/NSLog/file logging or unsafe Logger constants in the changed production Swift code.
Cmux User-Facing Error Privacy ✅ Passed Diff only touches a test file and a budget TSV; no production UI/error copy changed, and no user-facing messages expose vendor/internal details.
Cmux Full Internationalization ✅ Passed Only tests/CI plus a logic-only BrowserPanelView tweak changed; no new user-facing copy or locale/catalog files were added.
Cmux Swiftui State Layout ✅ Passed No new SwiftUI state/layout antipatterns were introduced; the only app code edit is an AppKit bridge command-handler tweak in OmnibarTextFieldRepresentable.
Cmux Architecture Rethink ✅ Passed PASS: Production Swift change is a small inline-backspace invariant fix; the added polling/socket logic is test-only synchronization, which the rule allows.
Cmux Swift Auxiliary Window Close Shortcuts ✅ Passed No NSWindow/WindowGroup/NSPanel ownership changes; BrowserPanelView only tweaks omnibar backspace handling, so the auxiliary-window rule isn’t implicated.
Cmux Source Artifacts ✅ Passed All touched paths are workflows, Swift source/tests, or a shell test script; no artifact, cache, temp, or generated-output paths were added.
Cmux No Test Or Debug Seam In Production Source ✅ Passed Sources/Panels/BrowserPanelView.swift only changes inline backspace logic; no new debug/test-only member or wrapper accessor was added, and test scaffolding stays in Tests/UITests.
Cmux No Ambient Global State ✅ Passed No new production ambient-global-state surface: BrowserPanelView only tweaks a method, and the new test helper is instance-based rather than a singleton or static namespace.
Title check ✅ Passed The title clearly summarizes the main change: fixing the BrowserOmnibarSuggestionsUITests e2e lane.
✨ 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 issue-5934-e2e-browseromnibarsuggestionsuitests-cannot-r

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.

…romnibarsuggestionsuitests-cannot-r

# Conflicts:
#	.github/swift-file-length-budget.tsv
@greptile-apps

greptile-apps Bot commented Jun 26, 2026 •

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR stabilizes the BrowserOmnibarSuggestionsUITests e2e lane by pinning the ui-regressions CI job to a display-capable Depot runner (fail-closed), replacing the unreliable virtual display with native WindowServer, and fixing inline-completion backspace logic to handle both the typed-prefix and display-text boundary positions.

  • CI: ui-regressions now enforces MACOS_RUNNER_DISPLAY must start with depot-, adds the two omnibar tests before display-churn steps, and removes the persistent virtual-display helper that had been a source of flake.
  • Production Swift: selectionIsInlineBoundary expands the intercept guard to cover carets at either the typed-prefix end or the full display-text end, and doCommandBy for deleteBackward is now correctly routed through inlineCompletionSelectionIsActive to cover both boundaries.
  • UITests: Backspace is now driven through the control socket (simulate_shortcut backspace) instead of a synthesized XCUITest key event, and the test waits for observable webViewFocused focus before typing; new OmnibarInlineDeletionSwiftTests covers typed-boundary, display-boundary, and mid-prefix cases.

Confidence Score: 5/5

Safe to merge — the production Swift change is narrow, well-tested by new unit tests, and the UITest and CI changes are all in test/infra code.

The production change in BrowserPanelView.swift is a small, focused expansion of the backspace-intercept predicate, covered by three new Swift Testing unit tests. The UITest improvements remove a known flaky pattern (XCUITest key-event backspace) and replace it with a socket-driven command with an explicit readiness gate. The CI changes correctly fail closed to a display-capable Depot runner and add the two new tests before the display-churn step. No unguarded paths, no dropped state, no timing races introduced.

No files require special attention.

Important Files Changed

Filename Overview
Sources/Panels/BrowserPanelView.swift Renames selectionIsTypedPrefixBoundary to selectionIsInlineBoundary and adds display-text end position as a second valid boundary; doCommandBy deleteBackward handler now calls inlineCompletionSelectionIsActive instead of the narrower suffixSelectionMatchesInline — correctly expanding when backspace is intercepted.
cmuxTests/OmnibarInlineDeletionSwiftTests.swift New Swift Testing unit file covering typed-boundary, display-boundary, and mid-prefix caret cases for deleteBackward; harness is confined to cmuxTests/ with @testable import, no production seam.
cmuxUITests/BrowserOmnibarSuggestionsUITests.swift Replaces unreliable XCUITest key-event backspace with socket-based simulate_shortcut; adds waitForGotoSplitSetup/waitForSocketPong readiness gates; uses shared controlSocketCommandViaNetcat free function (fixing the prior ControlSocketClient visibility bug); teardown now cleans socket paths.
.github/workflows/ci.yml ui-regressions runner is now fail-closed to a depot-* display runner; adds omnibar and browser-find regression steps before display-churn; removes persistent virtual display helper that caused flake.
.github/workflows/test-e2e.yml Switches auto-run runner resolution from MACOS_RUNNER_15 to MACOS_RUNNER_DISPLAY; drops warp- option; updates run-name, concurrency group, and cache keys consistently.
tests/test_ci_self_hosted_guard.sh Adds check_ui_regressions_display_runner_fail_closed to validate the new depot-* guard and non-depot error exit; updates e2e variable reference from MACOS_RUNNER_15 to MACOS_RUNNER_DISPLAY.
cmux.xcodeproj/project.pbxproj Adds OmnibarInlineDeletionSwiftTests.swift to the cmuxTests target — routine project file update with no issues.

Sequence Diagram

%%{init: {'theme': 'neutral'}}%%
sequenceDiagram
    participant CI as ci.yml (ui-regressions)
    participant Depot as Depot macOS Runner
    participant XCTest as XCUITest
    participant Socket as Control Socket
    participant App as cmux App

    CI->>Depot: "run on depot-macos-* (fail-closed guard)"
    Depot->>XCTest: xcodebuild test-without-building
    XCTest->>App: launch with CMUX_SOCKET_PATH + CMUX_UI_TEST_GOTO_SPLIT_SETUP
    App-->>XCTest: "webViewFocused=true (goto_split data file)"
    XCTest->>App: typeQueryAndWaitForSuggestions("exam")
    App-->>XCTest: BrowserOmnibarSuggestions visible
    XCTest->>XCTest: waitForInlineCompletion("example.com")
    XCTest->>Socket: simulate_shortcut backspace
    Socket->>App: AppKit deleteBackward event
    App->>App: inlineCompletionSelectionIsActive() → onDeleteBackwardWithInlineSelection()
    App-->>XCTest: "omnibar.value == "exa""
    XCTest->>XCTest: waitForCondition → assert "exa"
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 CI as ci.yml (ui-regressions)
    participant Depot as Depot macOS Runner
    participant XCTest as XCUITest
    participant Socket as Control Socket
    participant App as cmux App

    CI->>Depot: "run on depot-macos-* (fail-closed guard)"
    Depot->>XCTest: xcodebuild test-without-building
    XCTest->>App: launch with CMUX_SOCKET_PATH + CMUX_UI_TEST_GOTO_SPLIT_SETUP
    App-->>XCTest: "webViewFocused=true (goto_split data file)"
    XCTest->>App: typeQueryAndWaitForSuggestions("exam")
    App-->>XCTest: BrowserOmnibarSuggestions visible
    XCTest->>XCTest: waitForInlineCompletion("example.com")
    XCTest->>Socket: simulate_shortcut backspace
    Socket->>App: AppKit deleteBackward event
    App->>App: inlineCompletionSelectionIsActive() → onDeleteBackwardWithInlineSelection()
    App-->>XCTest: "omnibar.value == "exa""
    XCTest->>XCTest: waitForCondition → assert "exa"
Loading

Reviews (34): Last reviewed commit: "test: use socket shortcut for omnibar ba..." | Re-trigger Greptile

@blacksmith-sh

This comment has been minimized.

@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 `@cmuxUITests/BrowserOmnibarSuggestionsUITests.swift`:
- Line 594: The test in BrowserOmnibarSuggestionsUITests is using a fixed
RunLoop.current.run delay before the socket backspace assertion, which should be
removed. Rely on the existing waitForInlineCompletion state instead, or replace
the sleep with a direct wait on the specific readiness predicate that guarantees
the socket is ready. Update the backspace test flow so the assertion is driven
by observable causality rather than wall-clock timing.
🪄 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: a7567668-3b9b-438e-8835-0cc7e2ca58d8

📥 Commits

Reviewing files that changed from the base of the PR and between fbc6a48 and 302aa04.

⛔ Files ignored due to path filters (1)
  • .github/swift-file-length-budget.tsv is excluded by !**/*.tsv
📒 Files selected for processing (5)
  • .github/workflows/ci.yml
  • .github/workflows/test-e2e.yml
  • Sources/TerminalController.swift
  • cmuxUITests/BrowserOmnibarSuggestionsUITests.swift
  • tests/test_ci_self_hosted_guard.sh

Comment thread cmuxUITests/BrowserOmnibarSuggestionsUITests.swift Outdated
@austinywang
austinywang force-pushed the issue-5934-e2e-browseromnibarsuggestionsuitests-cannot-r branch from a53e8f4 to 6bf81e2 Compare June 27, 2026 05:55
@austinywang
austinywang force-pushed the issue-5934-e2e-browseromnibarsuggestionsuitests-cannot-r branch from 6bf81e2 to 0c34b81 Compare June 27, 2026 06:09

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

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
Sources/Panels/BrowserPanelView.swift (1)

4619-4627: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Keep inlineCompletionSelectionIsActive(...) boundary-only

deleteBackward now routes through onDeleteBackwardWithInlineSelection() whenever this helper is true. Keep that helper limited to the typed-prefix boundary or a selected suffix; if it ever matches a mid-prefix caret, Backspace will delete the trailing character instead of the character before the cursor.

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

In `@Sources/Panels/BrowserPanelView.swift` around lines 4619 - 4627, Keep
inlineCompletionSelectionIsActive(textView, inline:) limited to the typed-prefix
boundary or a selected suffix so deleteBackward only uses
onDeleteBackwardWithInlineSelection() in those cases. Review the helper’s
matching logic in BrowserPanelView and ensure a mid-prefix caret does not
satisfy it; otherwise Backspace will remove the wrong character. Preserve the
existing deleteBackward selector flow and adjust the helper’s boundary checks
rather than the caller.
🤖 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.

Outside diff comments:
In `@Sources/Panels/BrowserPanelView.swift`:
- Around line 4619-4627: Keep inlineCompletionSelectionIsActive(textView,
inline:) limited to the typed-prefix boundary or a selected suffix so
deleteBackward only uses onDeleteBackwardWithInlineSelection() in those cases.
Review the helper’s matching logic in BrowserPanelView and ensure a mid-prefix
caret does not satisfy it; otherwise Backspace will remove the wrong character.
Preserve the existing deleteBackward selector flow and adjust the helper’s
boundary checks rather than the caller.

ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: ASSERTIVE

Plan: Pro

Run ID: 75f93372-8a46-4919-b01d-d1e629baf1dc

📥 Commits

Reviewing files that changed from the base of the PR and between 5fc4ba8 and 106cdc1.

⛔ Files ignored due to path filters (1)
  • .github/swift-file-length-budget.tsv is excluded by !**/*.tsv
📒 Files selected for processing (3)
  • Sources/Panels/BrowserPanelView.swift
  • cmuxTests/OmnibarAndToolsTests.swift
  • cmuxUITests/BrowserOmnibarSuggestionsUITests.swift

austinywang and others added 2 commits July 1, 2026 18:37
…s-cannot-r

Resolve .github/swift-file-length-budget.tsv by regenerating it with
scripts/swift_file_length_budget.py --write-budget (per repo policy; not hand-edited).

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
testInlineAutocompleteBackspaceDeletesTypedPrefixCharacter dispatches
Ctrl+H through the control socket (simulate_shortcut), which runs
synchronously on the main thread (v2MainSync -> AppKit sendEvent ->
the omnibar deleteBackward) and only acks after that hop returns. Right
after the omnibar renders inline suggestions the main thread can stay
busy longer than the default 2s netcat read window, so nc closes before
the ack lands and socketCommand returns nil even though the dispatch is
healthy -- the failure diagnostics captured right after still report
socketPingResponse=PONG, socketAcceptLoopAlive=1, and 5 live windows.

Give this single call a generous 10s budget instead of retrying: Ctrl+H
mutates the buffer, so re-dispatching after a lost ack would delete a
second character and corrupt the assertion. Scoped via a new
responseTimeout parameter on socketCommand (default 2s leaves the ping
readiness probe unchanged).

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

@cubic-dev-ai cubic-dev-ai 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.

No issues found across 7 files

Re-trigger cubic

The ui-regressions job runs browser XCUITests directly against the
runner's native WindowServer display instead of self-provisioning a
virtual display: the job is pinned to a Depot display runner via repo
variable MACOS_RUNNER_DISPLAY, and the existing 'Validate display runner
identity' step fails the job if a requested depot-* runner resolves
outside Depot. That invariant is why this lane dropped its old persistent
virtual display, and why the later display-churn step still creates its
own scoped virtual display (it exercises display add/remove churn). The
prior green run on this branch confirmed both browser UI steps pass on the
pinned display runner without a virtual display. Documenting inline so the
design is legible to future reviewers.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
austinywang and others added 2 commits July 1, 2026 22:45
The ui-regressions lane failed in
testInlineAutocompleteBackspaceDeletesTypedPrefixCharacter: the control
socket's `simulate_shortcut ctrl+h` returned nil even with a 10s netcat read
window, while the app was demonstrably up (ping->PONG, main window visible,
omnibar.value readable both before and after the call).

Root cause: `simulate_shortcut` dispatches onto the main thread via `v2MainSync`
(DispatchQueue.main.sync) and only writes its "OK" ack after that hop returns.
`ping` never hops to main, so it always answers -- which let `waitForSocketPong`
pass via its ping/diagnostics fallback and masked that the mutating command's
main-thread hop was being starved by concurrent XCUITest main-thread traffic
right after the suggestions render. Widening the netcat timeout cannot fix a hop
that never gets serviced (proven: 2s and 10s both return nil).

Drive Backspace as a real HID key event through XCUITest instead
(`app.typeKey(.delete)`), which reaches the focused omnibar and invokes
`deleteBackward(_:)` -- the exact command BrowserPanelView intercepts for
inline-completion boundary deletion -- over the always-serviced event path the
sibling Cmd+A test already relies on. Remove the now-unused per-test socket
scaffolding (launch env, pong gate, diagnostics + netcat helpers); every other
test in this file already launches without it.

Side effect: file drops from 882 to 832 lines, back under its
swift-file-length budget, fixing the workflow-guard-tests
"Validate Swift file length budget" failure without a budget bump.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
…romnibarsuggestionsuitests-cannot-r

# Conflicts:
#	.github/swift-file-length-budget.tsv
@lawrencecchen lawrencecchen added the stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening. label Sep 23, 2026
@github-project-automation github-project-automation Bot moved this from Todo to Done in cmux backlog Sep 23, 2026

This branch was successfully deployed

1 active deployment
Preview – cmux — dd8e1ea7 Deployed Jul 5, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

stale-revisit Closed after 30+ days without activity; preserved for possible revisit or reopening.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

e2e: BrowserOmnibarSuggestionsUITests cannot run on the default warp lane, and 2 tests fail on main on depot

3 participants