@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 +11 -0
- package/adapters/mobile/verify.sh +1 -1
- package/dist/commands/launch/index.js +7 -2
- package/package.json +1 -1
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":
|
|
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
|
-
|
|
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";
|