Skip to content

docs(dev-client): coverage status + #136 sub-2 root-cause diagnosis#183

Merged
Lykhoyda merged 3 commits into
mainfrom
feat/dev-client-harness
May 29, 2026
Merged

docs(dev-client): coverage status + #136 sub-2 root-cause diagnosis#183
Lykhoyda merged 3 commits into
mainfrom
feat/dev-client-harness

Conversation

@Lykhoyda

Copy link
Copy Markdown
Owner

Summary

Adds docs-site/src/content/docs/dev-client-coverage.md — the published coverage record for the Expo Dev Client picker + tutorial-modal handling in scripts/cdp-bridge/src/tools/dev-client-picker.ts (238 LOC, previously zero live coverage). Docs-only — no shipped code changed (the one in-scope fix was deferred; see below).

Companion to the workspace-repo PR that adds the harness fixtures: Lykhoyda/rn-dev-agent-workspace#12 (the two standalone .mjs suites that reproduce the picker + tutorial states).

What the coverage doc records

What works — picker detection (when a device session exists) via device_find text match + 3-tier server-row matcher; auto-advance race re-probe; the Metro-down ~10ms fast path; CDP being non-perturbing to both surfaces.

What's broken (verified by harness)

  • Multi-device routing + dev-client picker hangs (combined session feedback) #136 sub-2cdp_status hangs ~33.5s when the picker is up + Metro is up, then returns a misleading ok:true. Root-caused live (DC-Task 8): the pre-autoConnect picker guard no-ops on a cold MCP start (gated on hasActiveSession()), stale C++ targets pass filterValidTargets so the fast "no Hermes target" bail never fires, and waitForReact(REACT_READY_TIMEOUT_MS=30_000) at setup.ts:67 then burns its full 30s because the picker blocks the bundle.
  • No MCP-exposed picker-dismiss tool (handleDevClientPicker() is internal-only).
  • Tutorial modal (Session feedback (IX-2997, ~6h): 5 wins + 5 friction items #173 sub-4) is rendered in expo-dev-menu's separate native surface — CDP-blind, no non-perturbing programmatic detector.

Deferred (with rationale + concrete approaches): the #136 sub-2 fix (>50 LOC across the connect chain — tracked in a dedicated follow-up issue), a dismiss MCP tool, tutorial detection/dismissal, and the CI workflow (DC-Task 9 — partly broken as drafted + low ROI guarding an unfixed bug; revisit once the fix lands).

Why docs-only (no fix here)

The #136 sub-2 fix can't be done safely within the ≤50 LOC in-scope budget — the dominant cost is the 30s waitForReact shared by every connect path, and a target-shape picker heuristic false-positives on normal bundle reloads (verified live). The correct fix (typed PickerBlockingBundleError on a status-scoped bounded React probe) threads through 4-5 files. Filed as a dedicated follow-up issue rather than rushed into shipped code.

Test plan

Refs

🤖 Generated with Claude Code

Lykhoyda and others added 3 commits May 29, 2026 13:14
…cation

Empty 4-section skeleton (Works / Broken / Fixed / Deferred) populated by
DC-Task 8's verify pass. References the standalone .mjs suites in the
workspace repo that exercise dev-client-picker.ts.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
DC-Task 8 verify pass. #136 sub-2 hang reproduced live (cdp_status ~33.5s
with Dev Client picker up + Metro up); root cause is the 30s waitForReact
in performSetup (setup.ts:67) against stale C++ targets that pass
filterValidTargets while the picker blocks the bundle. Both harness suites
re-run green (picker Metro-down 10ms no-hang; tutorial Metro-up). Fix
deferred: no safe <=50 LOC change; proposed follow-up approach documented.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
…age doc

CI deferred: the planned macos-15 harness workflow is (a) partly broken as
drafted — the picker suite needs Metro DOWN, the tutorial suite needs Metro
UP, but the workflow starts Metro once for both — and (b) low ROI today,
since both suites are reproduction fixtures with weak assertions guarding a
deferred-unfixed bug. Revisit when #136 sub-2 is fixed (CI then guards the
fix; workflow must run picker Metro-DOWN then tutorial Metro-UP).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
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