Skip to content

fix: serialize platform groups + report-based device pass/fail#122

Merged
TomKalina merged 1 commit into
mainfrom
fix/ios-platform-serialization-report-pass
Jun 15, 2026
Merged

fix: serialize platform groups + report-based device pass/fail#122
TomKalina merged 1 commit into
mainfrom
fix/ios-platform-serialization-report-pass

Conversation

@TomKalina

Copy link
Copy Markdown
Owner

Summary

  • iOS sim XCUITest driver bring-up (xcodebuild test-without-building on the runner port) loses its port race under the host load of several concurrent Android Maestro processes → every iOS flow fails with Failed to connect to /127.0.0.1:<port>. Add concurrentPlatforms (default false): run the iOS and Android groups sequentially (iOS first, on an idle machine) instead of Promise.all. Opt in to overlap on a beefy machine.
  • A device that ran every flow green but whose Maestro process exited non-zero in post-suite DebugLogStore.finalizeRun (NoSuchFileException zipping ~/Library/Logs/maestro, or the idle-kill watchdog firing during finalize) was wrongly counted as failed. Add devicePassed(): pass when exit==0 OR the JUnit report shows tests>0 and zero failures/errors. Used in summary, headline tally, and live row.

Test plan

  • deno check + deno lint clean
  • deno test green — 70 passed (added 5 devicePassed cases + 1 concurrentPlatforms default)
  • Verified on device: the full admin_mobile suite runs 33/33 green on the iOS sim in isolation (same suite died after flow 1 when the iOS group overlapped 3 concurrent Android runs)

Two independent failure modes seen running the full suite across 3
Android + iOS sim + physical iPhone:

1. iOS sim XCUITest driver bring-up (xcodebuild test-without-building on
   TEST_RUNNER_PORT) loses its port race under the host load of several
   concurrent Android Maestro processes, so every iOS flow fails with
   'Unable to set permissions ...: Failed to connect to /127.0.0.1:<port>'.
   The iOS and Android groups previously ran via Promise.all. Add
   concurrentPlatforms (default false): run the groups sequentially, iOS
   first on an idle machine. In isolation the iOS suite runs green.

2. A device that ran every flow green but whose Maestro process exited
   non-zero in post-suite DebugLogStore.finalizeRun (NoSuchFileException
   zipping ~/Library/Logs/maestro, or the idle-kill watchdog firing during
   finalize) was counted as a failed device. Add devicePassed(): a device
   passes when exit==0 OR its JUnit report shows tests>0 and zero
   failures/errors. Used in the summary, headline tally, and live row.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@TomKalina TomKalina merged commit a226c60 into main Jun 15, 2026
1 check failed
@TomKalina TomKalina deleted the fix/ios-platform-serialization-report-pass branch June 15, 2026 08:43
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.

1 participant