You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(cdp): fast-fail cdp_status when the Dev Client picker blocks the bundle (closes#184) (#187)
cdp_status with the Expo Dev Client "Development servers" picker up AND Metro
running hung ~33.5s: stale C++ targets pass filterValidTargets, the 1+1 probe
passes, and performSetup's waitForReact then burns its full 30s before returning
a misleading ok:true.
Fix: thread a connect intent ('default' | 'status') through
autoConnect -> discoverAndConnect -> connectToTarget. For a status-scoped connect
against a non-Hermes target, run a bounded React-reachability probe (default 5s,
RN_PICKER_PROBE_BUDGET_MS-overridable) BEFORE setup()'s 30s waitForReact. If
React isn't reachable, throw the typed PickerBlockingBundleError, which bypasses
both the connectToTarget retry loop and the discoverAndConnect candidate loop;
status.ts maps it to a fast failResult with code PICKER_BLOCKING and an
actionable message ("select your Metro server, then retry cdp_status").
Deliberately NOT changing the global REACT_READY_TIMEOUT_MS (shared by every
connect path) and NOT adding a pre-autoConnect target-shape heuristic (which
false-positives on healthy reloads). Hermes targets skip the probe entirely, so
legitimate slow first-builds keep the full budget; non-status connect paths are
unchanged.
New pure helpers (tested without a real WebSocket, per the repo's
formatConnectFailureMessage/stickyPlatformFilters convention):
- probeReactReachable(evaluate, budgetMs, pollMs) -> boolean (setup.ts)
- shouldRunPickerProbe(intent, target), PickerBlockingBundleError (connect.ts)
Full suite 1563 pass; tsc clean. End-to-end picker-up assertion belongs to the
deferred Dev Client harness CI (DC-Task 9 / #136).
Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
0 commit comments