@deeeed/metamask-harness 0.51.3 → 0.51.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,17 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.51.5 - 2026-09-14
6
+
7
+ ### Fixed
8
+
9
+ - The relaunch-instead-of-rebuild recovery from 0.51.4 also recognizes the `wait-for-bridge: readiness deadline expired` line (the waiter prints it before "no bridge target matched" when the poll runs out), and `launch` now reports which recovery it takes and with which tier, so a prepare log shows why a second build happened.
10
+ ## 0.51.4 - 2026-09-14
11
+
12
+ ### Fixed
13
+
14
+ - Mobile `launch --build` recovery: when the freshly built client does not answer the bridge, the harness restarts that client instead of building it a second time. Two full slot prepares had spent a second 20-minute build on an app that only needed a relaunch (first launch after a clean rebuild crashed in expo-modules on both machines; the second launch worked).
15
+ - Mobile `verify` live smoke: the `cdp.target` probe's bridge status call now gets the node's one-minute budget (`cdp_timeout_ms`) instead of the 10-second bridge default, so an app still hydrating accounts right after a fixture unlock is not reported as "did not expose a selected app route".
5
16
  ## 0.51.3 - 2026-09-14
6
17
 
7
18
  ### Fixed
@@ -447,7 +447,7 @@ if [ "$STATIC_ONLY" = false ]; then
447
447
  "entry": "status",
448
448
  "nodes": {
449
449
  "status": { "action": "app.status", "intent": "Read Mobile app status through the v1 runner", "next": "cdp-probe" },
450
- "cdp-probe": { "action": "cdp.target", "intent": "Verify the React Native debug bridge target is reachable", "require_reachable": true, "timeout_ms": 15000, "next": "done" },
450
+ "cdp-probe": { "action": "cdp.target", "intent": "Verify the React Native debug bridge target is reachable", "require_reachable": true, "timeout_ms": 60000, "cdp_timeout_ms": 60000, "next": "done" },
451
451
  "done": { "action": "end", "status": "pass" }
452
452
  }
453
453
  }
@@ -421,10 +421,15 @@ async function handleLaunchLocked(argv, stream) {
421
421
  const recoveryCode = restartMobileApp ? "mobile.app-restarted" : RECOVERY_CODE[adapter];
422
422
  state.attemptedRecoveries.push(recoveryCode);
423
423
  stream.phase("recover");
424
+ const recoveryTier = restartMobileApp && tier === "build" ? "quick" : tier;
425
+ if (!jsonOutput) {
426
+ process.stderr.write(`launch: recovering (${recoveryCode}) with the ${recoveryTier} tier
427
+ `);
428
+ }
424
429
  attempt = await executeComposition(
425
430
  adapter,
426
431
  mobileTarget,
427
- tier,
432
+ recoveryTier,
428
433
  wantWatch,
429
434
  target,
430
435
  machine,
@@ -468,7 +473,7 @@ function ambiguousConfiguredIosSimulator(output) {
468
473
  return /open-device: iOS simulator target ("[^"]+") is ambiguous/u.exec(output)?.[1];
469
474
  }
470
475
  function mobileBridgeTargetMissing(output) {
471
- return /no bridge target matched/iu.test(output);
476
+ return /no bridge target matched|wait-for-bridge: readiness deadline expired/iu.test(output);
472
477
  }
473
478
  function mobileProvisionCommand(target, mobileTarget) {
474
479
  const platform = mobileTarget === "android" ? "android" : "ios";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deeeed/metamask-harness",
3
- "version": "0.51.3",
3
+ "version": "0.51.5",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mm-harness": "bin/mm-harness"