fix(ios): preserve final-probe xcodebuild diagnostics - #1776
fix(ios): preserve final-probe xcodebuild diagnostics#1776emmanuelchucks wants to merge 2 commits into
Conversation
There was a problem hiding this comment.
Pull request overview
This PR adjusts the iOS runner connection failure precedence so that when the physical-device runner process exits during the final connection probe, the user-facing error preserves the actionable xcodebuild diagnostics (instead of being replaced by the generic “Runner did not accept connection”).
Changes:
- After the connection retry loop completes for physical devices, re-check the runner child’s
exitCodeand throwbuildRunnerEarlyExitErrorwhen it has exited. - Add a regression test that simulates the “child exits during final probe” race and asserts the nested
xcodebuildstderr and exit code are preserved.
Reviewed changes
Copilot reviewed 2 out of 2 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
src/platforms/apple/core/runner/runner-transport.ts |
Adds a post-retry early-exit check for physical-device sessions to preserve xcodebuild diagnostics. |
src/platforms/apple/core/__tests__/runner-transport.test.ts |
Adds a regression test covering the final-probe race and asserting the early-exit error details. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
|
Exact head [P2 topology] CI is also owner-blocked rather than green: all eight exact-head Actions runs are |
|
Addressed in
The PR description now reflects the current head. This head is ready for CI approval. |
There was a problem hiding this comment.
Pull request overview
Copilot reviewed 13 out of 13 changed files in this pull request and generated no new comments.
Suppressed comments (1)
src/platforms/apple/core/runner/runner-transport.ts:92
fetchWithTimeoutcan surface a raw AbortError (non-AppError) when the caller-providedrequestSignalis aborted mid-request. That error then normalizes to an UNKNOWN error instead of the standard request-canceled AppError shape. Since this helper is now exported and shared, it’s safer to translate request-driven aborts intocreateRequestCanceledError()here.
const signal = requestSignal ? AbortSignal.any([requestSignal, timeoutSignal]) : timeoutSignal;
return await fetch(url, { ...init, signal });
|
Exact head The only current blocker is owner-action CI: all eight exact-head Actions runs concluded |
Summary
Runner did not accept connection.Closes #1775.
Validation
Runner did not accept connectionreceived instead of the xcodebuild early-exit error.pnpm check:affected --runon Node 22.22.0 passes 274 files and 2,225 tests; changed-line coverage is 92/118 (77.97%) and changed-branch coverage is 64/87 (73.56%). Package verification, formatting, lint, typecheck, layering, Fallow, build, affected coverage, and provider integration pass.The physical-device reproduction is recorded in #1775. This PR changes terminal error precedence without manufacturing another certificate-trust failure on a device.
Scope: 13 files, confined to Apple runner transport, mirrored tests, shared transport fixtures, and the moved Fallow baseline entry. No CLI, wire, Swift runner, documentation, or skill changes.