@deeeed/metamask-harness 0.79.0 → 0.80.0
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 +47 -0
- package/README.md +1 -1
- package/adapters/extension/ensure-browser.sh +2 -2
- package/adapters/extension/inject.mjs +0 -1
- package/adapters/extension/launch-browser.cjs +39 -613
- package/adapters/extension/readiness.mjs +2 -5
- package/adapters/extension/reattach.sh +2 -2
- package/adapters/extension/stamp-runtime-title.cjs +1 -1
- package/adapters/manifest.json +2 -34
- package/adapters/mobile/bridge-runtime/cdp-bridge.cjs +57 -1358
- package/adapters/mobile/bridge-runtime/teaching.cjs +20 -0
- package/adapters/mobile/inject.sh +16 -0
- package/adapters/mobile/launch-console-forwarder.cjs +1 -2
- package/adapters/mobile/open-device.sh +2 -2
- package/adapters/mobile/reload-app.mjs +4 -4
- package/adapters/mobile/reset-app-data.sh +1 -1
- package/adapters/mobile/start-console-forwarder.sh +3 -2
- package/adapters/mobile/start-metro.sh +17 -12
- package/adapters/mobile/wait-for-bridge.cjs +2 -2
- package/adapters/shared/harness-source-fingerprint.mjs +13 -8
- package/adapters/shared/open-debug.mjs +2 -2
- package/adapters/shared/sync-wallet-fixture.sh +8 -5
- package/adapters/terminal/cleanup.mjs +2 -1
- package/adapters/terminal/inject.mjs +2 -1
- package/bin/mm-harness +9 -28
- package/dist/adapters/checkout-files.js +16 -0
- package/dist/adapters/console-capture.js +14 -1
- package/dist/adapters/core/actions.js +4 -3
- package/dist/adapters/core/overlay.js +1 -1
- package/dist/adapters/core/readiness.js +28 -1
- package/dist/adapters/core/run.js +2 -2
- package/dist/adapters/core/surface.js +16 -1
- package/dist/adapters/extension/browser-pid.js +56 -0
- package/dist/adapters/extension/console-capture.js +1 -1
- package/dist/adapters/extension/doctor-checks.js +1 -1
- package/dist/adapters/extension/ensure-ready.js +5 -4
- package/dist/adapters/extension/extension-id.js +1 -1
- package/dist/adapters/extension/feature-flags.js +1 -1
- package/dist/adapters/extension/fixtures.js +1 -2
- package/dist/adapters/extension/launch.js +4 -5
- package/dist/adapters/extension/launched-browser.js +1 -2
- package/dist/adapters/extension/network-observer.js +1 -1
- package/dist/adapters/extension/overlay.js +1 -1
- package/dist/adapters/extension/product-config.js +1 -1
- package/dist/adapters/extension/readiness.js +1 -1
- package/dist/adapters/extension/reload.js +1 -1
- package/dist/adapters/extension/run.js +24 -10
- package/dist/adapters/extension/runtime-decision.js +2 -1
- package/dist/adapters/extension/runtime.js +9 -5
- package/dist/adapters/extension/surface.js +15 -2
- package/dist/adapters/extension/verify.js +2 -2
- package/dist/adapters/harness-freshness.js +2 -1
- package/dist/adapters/mobile/android-gfxinfo-performance.js +1 -3
- package/dist/adapters/mobile/app-identity.js +10 -0
- package/dist/adapters/mobile/doctor-checks.js +1 -1
- package/dist/adapters/mobile/fixtures.js +1 -1
- package/dist/adapters/mobile/launch.js +27 -28
- package/dist/adapters/mobile/lifecycle.js +1 -1
- package/dist/adapters/mobile/metro-env.js +9 -59
- package/dist/adapters/mobile/performance-observer.js +1 -1
- package/dist/adapters/mobile/prepare-target.js +1 -1
- package/dist/adapters/mobile/prepare.js +3 -4
- package/dist/adapters/mobile/provision.js +1 -1
- package/dist/adapters/mobile/readiness.js +1 -1
- package/dist/adapters/mobile/recording-target.js +15 -0
- package/dist/adapters/mobile/release-artifact-state.js +1 -1
- package/dist/adapters/mobile/reload.js +1 -1
- package/dist/adapters/mobile/run.js +8 -7
- package/dist/adapters/mobile/runtime-decision.js +2 -4
- package/dist/adapters/mobile/source-freshness.js +22 -126
- package/dist/adapters/mobile/surface.js +26 -3
- package/dist/adapters/mobile/ui.js +16 -5
- package/dist/adapters/mobile/verify.js +2 -3
- package/dist/adapters/performance/cdp-trace.js +1 -1
- package/dist/adapters/performance/device-platform.js +1 -1
- package/dist/adapters/slot-ports.js +1 -1
- package/dist/adapters/surface.js +1 -0
- package/dist/adapters/terminal/console-capture.js +1 -1
- package/dist/adapters/terminal/launch.js +1 -1
- package/dist/adapters/terminal/run.js +25 -2
- package/dist/adapters/terminal/surface.js +7 -1
- package/dist/adapters.js +8 -4
- package/dist/advisor-policy.js +1 -1
- package/dist/checkout-view.js +1 -2
- package/dist/cli.js +28 -15
- package/dist/command-contract.js +1 -26
- package/dist/commands/call.js +10 -24
- package/dist/commands/check.js +3 -4
- package/dist/commands/checklist.js +1 -1
- package/dist/commands/completion-candidates.js +2 -10
- package/dist/commands/config.js +2 -2
- package/dist/commands/core-readiness.js +12 -7
- package/dist/commands/debug.js +3 -3
- package/dist/commands/device-target.js +5 -5
- package/dist/commands/doctor.js +2 -14
- package/dist/commands/domain.js +2 -2
- package/dist/commands/ensure-ready.js +1 -7
- package/dist/commands/fixtures.js +5 -6
- package/dist/commands/help.js +3 -4
- package/dist/commands/launch/device.js +10 -17
- package/dist/commands/launch/extension.js +2 -8
- package/dist/commands/launch/mobile.js +1 -1
- package/dist/commands/list-executables.js +1 -3
- package/dist/commands/logs.js +3 -3
- package/dist/commands/manifest.js +1 -12
- package/dist/commands/mobile-device-view.js +4 -2
- package/dist/commands/overlay.js +110 -0
- package/dist/commands/pin.js +1 -1
- package/dist/commands/pr-body.js +2 -2
- package/dist/commands/prepare.js +4 -9
- package/dist/commands/provision.js +3 -12
- package/dist/commands/recipe-advice.js +1 -2
- package/dist/commands/recipe-quality.js +2 -3
- package/dist/commands/resolve-extension.js +1 -7
- package/dist/commands/review.js +4 -4
- package/dist/commands/run-engine.js +12 -51
- package/dist/commands/run.js +4 -25
- package/dist/commands/runtime-decision.js +1 -6
- package/dist/commands/runtime-health.js +1 -7
- package/dist/commands/runtime-launch.js +1 -13
- package/dist/commands/self-test.js +2 -6
- package/dist/commands/status-watch.js +1 -2
- package/dist/commands/status.js +2 -5
- package/dist/commands/task-init.js +2 -3
- package/dist/commands/tutorial.js +2 -2
- package/dist/commands/update.js +1 -1
- package/dist/completions-cache.js +1 -1
- package/dist/console-classifier.js +19 -0
- package/dist/doctor.js +2 -3
- package/dist/funding-execution-context.js +15 -1
- package/dist/host.js +32 -0
- package/dist/index.js +1 -6
- package/dist/live-tsx.js +49 -0
- package/dist/mm-harness-cli.js +2 -4
- package/dist/network-observation.js +4 -4
- package/dist/paths.js +34 -64
- package/dist/performance-observation.js +2 -2
- package/dist/progress.js +1 -1
- package/dist/recipe-assistance-context.js +1 -3
- package/dist/recipe-security.js +2 -59
- package/dist/review/knowledge.js +2 -2
- package/dist/runner.js +5 -3
- package/dist/runtime-context.js +1 -1
- package/dist/task-view.js +2 -3
- package/docs/CONTRIBUTING.md +1 -1
- package/docs/cli-contract.md +2 -2
- package/docs/feature-guard.md +90 -0
- package/library/README.md +3 -1
- package/library/actions/core/perps/_controller.mjs +153 -130
- package/library/actions/core/perps/quote_fees.mjs +58 -0
- package/library/actions/core/wallet/_fixture-accounts.mjs +69 -0
- package/library/actions/core/wallet/list_accounts.mjs +14 -57
- package/library/actions/extension/feature_flags/state.mjs +1 -1
- package/library/actions/extension/platform/cdp.mjs +2 -8
- package/library/actions/harness-exports.mjs +1 -6
- package/library/actions/mobile/app/network-control.mjs +6 -8
- package/library/actions/mobile/perps/prepare_local_snapshot_endpoint.mjs +1 -1
- package/library/actions/mobile/platform/bridge.mjs +8 -8
- package/library/actions/mobile/platform/native-session-name.mjs +21 -1
- package/library/actions/mobile/platform/native-session.mjs +3 -4
- package/library/actions/mobile/platform/observe-ui.mjs +12 -6
- package/library/actions/mobile/ui/native-navigation.mjs +4 -3
- package/library/actions/mobile/wallet/native-ui.mjs +3 -2
- package/library/actions/shared/analytics/_adapter.mjs +1 -1
- package/library/actions/shared/console-findings.mjs +1 -1
- package/library/actions/terminal/platform/runtime.mjs +2 -1
- package/library/manifests/core.action-manifest.json +83 -13
- package/package.json +8 -9
- package/adapters/extension/lib/slot-title.cjs +0 -292
- package/adapters/mobile/bridge-runtime/console-forwarder.cjs +0 -472
- package/adapters/mobile/bridge-runtime/lib/bridge-errors.cjs +0 -125
- package/adapters/mobile/bridge-runtime/lib/cdp-broker.cjs +0 -1055
- package/adapters/mobile/bridge-runtime/lib/cdp-eval.cjs +0 -110
- package/adapters/mobile/bridge-runtime/lib/config.cjs +0 -61
- package/adapters/mobile/bridge-runtime/lib/console-format.cjs +0 -53
- package/adapters/mobile/bridge-runtime/lib/devtools-proxy.cjs +0 -177
- package/adapters/mobile/bridge-runtime/lib/issue-capture.cjs +0 -446
- package/adapters/mobile/bridge-runtime/lib/match-bridge-target.cjs +0 -84
- package/adapters/mobile/bridge-runtime/lib/target-discovery.cjs +0 -403
- package/adapters/mobile/bridge-runtime/lib/ws-client.cjs +0 -116
- package/adapters/mobile/coalesce-metro-log.cjs +0 -24
- package/adapters/mobile/launch-metro.cjs +0 -77
- package/adapters/mobile/metro-config.cjs +0 -98
- package/adapters/mobile/metro-log-generation.cjs +0 -106
- package/dist/adapters/mobile/frame-metrics.js +0 -118
- package/dist/adapters/mobile/video-recorder.js +0 -289
- package/dist/artifact-files.js +0 -92
- package/dist/checkout-lock.js +0 -149
- package/dist/cli-color.js +0 -98
- package/dist/command-journal.js +0 -308
- package/dist/commands/last.js +0 -60
- package/dist/commands/launch/index.js +0 -109
- package/dist/commands/parse-args.js +0 -279
- package/dist/commands/reload.js +0 -41
- package/dist/commands/run-report.js +0 -241
- package/dist/commands/shared.js +0 -323
- package/dist/commands/stop.js +0 -60
- package/dist/devices.js +0 -100
- package/dist/execution-provenance.js +0 -332
- package/dist/harness.js +0 -451
- package/dist/heal-bounds.js +0 -137
- package/dist/json-stream.js +0 -60
- package/dist/leaf-invoke.js +0 -19
- package/dist/library-provenance.js +0 -33
- package/dist/live-adapter-contract.js +0 -380
- package/dist/recording-target.js +0 -120
- package/dist/run-diagnostics.js +0 -364
- package/dist/run-recording.js +0 -481
- package/dist/runtime-proof.js +0 -90
- package/library/actions/mobile/platform/tool-paths.mjs +0 -123
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,53 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.80.0 - 2026-10-06
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- Core `metamask.perps.quote_fees`: quotes an order's fees through the controller's `calculateFees` (read-only, testnet by default). `rewards_discount_bips` makes the headless `RewardsController:getPerpsDiscountForAccount` answer with that discount (with the Ethereum mainnet network context the controller builds the account id from), so a rewards discount can be proven live; without it the controller has no rewards source, as before.
|
|
10
|
+
- Feature-loss guard for the platform migration (repo tooling; the package's behaviour is unchanged): `scripts/feature-inventory.mjs` checks the build against the frozen 0.76.0 capability inventory (`tests/feature-inventory/`), `scripts/differential.mjs` runs the same commands on the frozen 0.76.0 install and the packed checkout on real slots and reports every difference, and `scripts/release-smoke.mjs` runs the fixed recorded release smoke set (`tests/release-smoke/`). See `docs/feature-guard.md`.
|
|
11
|
+
|
|
12
|
+
### Changed
|
|
13
|
+
|
|
14
|
+
- `tsx` is a runtime dependency: Core live adapter scripts run under the target's own tsx when it has one and under the harness's otherwise, no longer a nearby Farmslot checkout's (`TSX_BIN` still wins). The CLI itself still runs from `dist/`.
|
|
15
|
+
- The generic React Native runtime moves to `@farmslot/adapter-rn` 0.17.0 and the shared CDP broker to `@farmslot/recipe-runner/cdp-broker`:
|
|
16
|
+
- the Hermes bridge libraries and the console forwarder;
|
|
17
|
+
- the Metro config wrapper, launcher and log helpers;
|
|
18
|
+
- adb/idb tool discovery, connected-device listing, the device video recorders, frame metrics, and the Metro-env and source fingerprints.
|
|
19
|
+
|
|
20
|
+
mm-harness keeps the MetaMask parts: `cdp-bridge.cjs` and its recovery hints, the platform action bridge, the fingerprint input lists, `start-metro.sh` and `wait-for-bridge`. The Mobile overlay vendors the bridge libraries next to `cdp-bridge.cjs`, so `temp/recipe/harness/mobile/bridge-runtime/` stays the same.
|
|
21
|
+
- `adapters/mobile/bridge-runtime/cdp-bridge.cjs` is now the MetaMask preset over `@farmslot/adapter-rn/bridge-runtime/bridge-core.cjs` (adapter-rn 0.17.0). It keeps the wallet commands (`status`, `list-accounts`, `get-selected-account`, `switch-account`, `unlock`), the navigator route table, the recovery hints, the Perps and Homepage perf markers and the wallet-ready check; every other command, target selection, the debugger-slot lock and the typed errors come from the package. Same path, commands, output and exit codes.
|
|
22
|
+
- The Mobile library's native UI actions no longer default to MetaMask: they read the app under test from `ANDROID_PACKAGE_ID` / `IOS_BUNDLE_ID`, and native UI observation reads the app's display name from `METAMASK_RECIPE_MOBILE_APP_LABEL`; each fails with a `Next:` hint when missing. The Mobile adapter sets all three (`io.metamask`, `io.metamask.MetaMask`, `MetaMask` unless already set) in the `run` and `call` env and for the in-process UI bridge commands, so observation output is unchanged.
|
|
23
|
+
- **Renamed env (no aliases):**
|
|
24
|
+
- `MM_HARNESS_ADB_PATH` / `MM_HARNESS_IDB_PATH` → `RECIPE_RN_ADB_PATH` / `RECIPE_RN_IDB_PATH`;
|
|
25
|
+
- `MM_HARNESS_EXPLICIT_PLATFORM` → `RECIPE_RN_EXPLICIT_PLATFORM`;
|
|
26
|
+
- `MM_HARNESS_METRO_{PROJECT_ROOT,BASE_CONFIG,ENV_FINGERPRINT,LOG_ARCHIVE_COUNT,LOG_ARCHIVE_BYTES}` → `RECIPE_RN_METRO_*`.
|
|
27
|
+
|
|
28
|
+
The first Mobile launch after upgrading restarts a Metro that an older version started, because its recorded environment names changed. Source and Metro-env fingerprints are unchanged, so recorded baselines stay valid.
|
|
29
|
+
- Depend on `@farmslot/recipe-cli` 0.4.1, `@farmslot/adapter-sdk` 0.3.1, `@farmslot/recipe-runner` 0.24.0 and `@farmslot/agent-runtime` 0.17.0, and drop the `es-module-lexer` dependency (live adapter bundling now lives in `@farmslot/recipe-cli`).
|
|
30
|
+
- `@farmslot/expo-recipe` 0.14.0 is replaced by `@farmslot/adapter-rn` 0.17.0, the same package under its new name, so the install holds one `@farmslot/recipe-runner`. The Mobile native UI provider (`createAgentDeviceUiTransport`, `NATIVE_UI_ACTIONS`) and the `mobile/wallet/native-ui`, `mobile/platform/native-session` and `mobile/ui/native-navigation` library actions import `@farmslot/adapter-rn`; a library action that imported `@farmslot/expo-recipe` through the harness install imports `@farmslot/adapter-rn` instead.
|
|
31
|
+
- The generic harness support moves to `@farmslot/recipe-cli/harness` and mm-harness imports it directly: the resumability journal, the checkout lock, `JsonStreamWriter`, colour helpers, contained artifact writes, Git library provenance, shell-leaf invocation and the runtime path helpers (`recipeRuntimeDir`, `recipeRuntimePath`, `recipeHarnessRoot`, `recipeHarnessPath`, `harnessExecutable`). `src/host.ts` configures it as `mm-harness`, so env names (`MM_HARNESS_OPERATION_ID`, `MM_HARNESS_CHECKOUT_LOCK_TOKEN`, `MM_HARNESS_EXECUTABLE`), messages, journaled commands and the runtime layout are unchanged.
|
|
32
|
+
- `launch`, `reload`, `stop`, `last` and `install`/`verify`/`cleanup` run from the generic harness in `@farmslot/recipe-cli`. The built-in platforms declare what the commands used to hardcode: checkout detection, the Mobile `ios`/`android` targets, their launch and command flags, the failure patterns bounded healing classifies, and Mobile's `METRO_PORT` dev-server port name. mm-harness keeps its help text, the Runway install variant and the analytics collector stop as command options. Flags, messages, envelopes and exit codes are unchanged.
|
|
33
|
+
- Run evidence moves to `@farmslot/recipe-cli/harness` and mm-harness imports it directly: execution provenance, the framed recorder and its snapshots, the run report and product provenance, run diagnostics, live adapter scripts, run options, the behavioral proof checks, recipe trust input and failure envelopes, and the `Did you mean` suggestion. `src/host.ts` sets `recipeEnvPrefix: 'METAMASK_RECIPE'`, so the live adapter env names (`METAMASK_RECIPE_ADAPTER_INPUT`, `_OUTPUT`, `_LIVE_ADAPTER_DIR`, `_ACTION_SOURCE_MAP`), the `mm-harness-live-adapter-` and `.mm-harness-recording-` temp prefixes, messages, and `diagnostics.json`, `execution-provenance.json`, `product-provenance.json` and `report.md` are unchanged.
|
|
34
|
+
- The platform `run` member is the SDK's `AdapterRun`. The Extension declares `--launch-existing-dist` through `run.platformOptions`, sets `METAMASK_RECIPE_EXTENSION_AUTOLAUNCH` in its `run.activateEnv` (so only Extension runs set it now), reports the browser it drove through `run.browserProvenance`, and names `METAMASK_RECIPE_EXTENSION_ACTIVE_RECORDING_PID` as `recording.framed.activePidEnv`. Terminal reads its wallet request findings through `diagnostics.requestLog`; the console collector ownership check moves into the Extension and Terminal `verifyControl`. Mobile declares `--metro-port` as `devServer.portFlags`.
|
|
35
|
+
- Run diagnostics classify console lines through `src/console-classifier.ts`, which wraps `library/actions/shared/console-findings.mjs` (unchanged, still loadable by path).
|
|
36
|
+
- The Extension browser launch and slot titles moved to `@farmslot/adapter-web` 0.2.0 (`launch-browser`, `slot-title`). `adapters/extension/launch-browser.cjs` keeps its flags and now only passes MetaMask's part to the package: the build-handoff lock, `home.html` and its `MetaMask` title, the harness runtime paths that prove a browser is ours, and the `mm-harness launch` rerun hint. `adapters/extension/lib/slot-title.cjs` is gone; readiness, reattach, reopen, `ensure-ready` and `stamp-runtime-title` use the package, and the overlay no longer installs `scripts/lib/slot-title.cjs`. Behaviour is unchanged.
|
|
37
|
+
|
|
38
|
+
### Removed
|
|
39
|
+
|
|
40
|
+
- **BREAKING:** the package entry no longer exports `recipeHarnessPath`; import it from `@farmslot/recipe-cli/harness`. `library/actions/harness-exports.mjs` no longer bridges `recipeHarnessPath` or `recipeRuntimeDir` either; library actions import both from `@farmslot/recipe-cli/harness`.
|
|
41
|
+
- **BREAKING:** the package entry no longer exports `validateRuntimeProof`; import it from `@farmslot/recipe-cli/harness`. A script that resolves it through a locked harness install can use `createRequire(require.resolve('@deeeed/metamask-harness')).resolve('@farmslot/recipe-cli/harness')`.
|
|
42
|
+
- **BREAKING:** the package entry no longer exports `captureActiveRecipeRecordingSnapshot`; import it from `@farmslot/recipe-cli/harness`. `library/actions/harness-exports.mjs` no longer bridges it either.
|
|
43
|
+
|
|
44
|
+
### Fixed
|
|
45
|
+
|
|
46
|
+
- Core `metamask.perps.*` actions run again on current MetaMask/core, which no longer ships tsx (#10564): they failed with `CORE_DEPS_INCOMPLETE` even with `TSX_BIN` set. The `run`/`call` gate, `doctor` and execution resolve tsx the same way, and once dependencies are installed `doctor` (and `verify`) fail with the gate's reason when controller actions cannot run, instead of reporting ready; a checkout with no dependencies is reported not ready, as before. A source checkout's `bin/mm-harness` no longer overwrites the caller's `TSX_BIN`.
|
|
47
|
+
- Core Perps actions select any wallet fixture account: `dev2`–`dev7` (derived from the `dev1` mnemonic, as `list_accounts` shows them) by name, or a fixture account by its address, for reads and writes. An unknown name is refused, and a `0x` address is no longer replaced by `dev1` when a fixture is present: one outside the fixture is read as given and refused for signing.
|
|
48
|
+
- Local co-development links only the Farmslot packages the checkout has (`packages/<name>/package.json`). A package it lacks, such as one Farmslot has since renamed, keeps its installed, pinned copy, so `runner-deps-ready` passes again on a current Farmslot checkout.
|
|
49
|
+
- Extension `run --slot` works again next to a Farmslot checkout of any version (since 0.78.0 it exited 1, "Extension slot lookup requires a local host checkout", when the checkout predated `packages/recipe-runner`). The slot lookup finds the farm's pool by its pool files alone (`pool/*.json` with `slots`), with the same search as before: the configured root, else the nearest Farmslot checkout above the runner, then above the working directory. `@farmslot/*` code always comes from the harness's installed dependencies; a local Farmslot checkout supplies it only when `METAMASK_RUNNER_PROTOCOL_ROOT`, `.farmslot-root` (or, for `bin/mm-harness`'s tsx fallback, `FARMSLOT_ROOT`) names it, never because it sits nearby.
|
|
50
|
+
- Wallet fixture sync no longer replaces an explicit `FARMSLOT_ROOT` with `~/dev/farmslot`.
|
|
51
|
+
|
|
5
52
|
## 0.79.0 - 2026-10-05
|
|
6
53
|
|
|
7
54
|
### Changed
|
package/README.md
CHANGED
|
@@ -459,4 +459,4 @@ TASK.md holds the request; CHECKLIST.md is the sole step list. The frozen termin
|
|
|
459
459
|
|
|
460
460
|
### Portable runtime proof
|
|
461
461
|
|
|
462
|
-
`validateRuntimeProof(bundle, smokeTarget)` validates a retained Recipe v1 artifact package, requiring executed behavioral assertions for its declared targets. A passing command or end node alone is insufficient. QA skills
|
|
462
|
+
`validateRuntimeProof(bundle, smokeTarget)` from `@farmslot/recipe-cli/harness` validates a retained Recipe v1 artifact package, requiring executed behavioral assertions for its declared targets. A passing command or end node alone is insufficient. QA skills import it from the `@farmslot/recipe-cli` their locked harness installation depends on; no gateway, farm profile or run ID is required.
|
|
@@ -517,9 +517,9 @@ const releaseFocusHold = () => {
|
|
|
517
517
|
await page.goto(homeUrl, { waitUntil: 'load', timeout: 15000 });
|
|
518
518
|
|
|
519
519
|
// Set window title to slot ID (persists across SPA navigations)
|
|
520
|
-
const { applyPersistentSlotTitle } =
|
|
520
|
+
const { applyPersistentSlotTitle } = adapterWeb('slot-title');
|
|
521
521
|
const { evaluatePageViaCdp } = adapterWeb('playwright-cdp');
|
|
522
|
-
await evaluatePageViaCdp(page, applyPersistentSlotTitle, SLOT_ID);
|
|
522
|
+
await evaluatePageViaCdp(page, applyPersistentSlotTitle, { slotId: SLOT_ID, defaultTitle: 'MetaMask' });
|
|
523
523
|
|
|
524
524
|
// Wait for runtime state to settle, then unlock if needed.
|
|
525
525
|
const unlockSelector = '[data-testid=\"unlock-password\"]';
|
|
@@ -128,7 +128,6 @@ copyFile(path.join(runnerDir, 'adapters/shared/tmux-session.sh'), path.join(harn
|
|
|
128
128
|
copyFile(path.join(runnerDir, 'adapters/shared/tmux-viewer.sh'), path.join(harnessDir, 'scripts/lib/tmux-viewer.sh'));
|
|
129
129
|
copyFile(path.join(runnerDir, 'adapters/shared/log-tui.mjs'), path.join(harnessDir, 'scripts/lib/log-tui.mjs'));
|
|
130
130
|
copyAdapterWeb(path.join(harnessDir, 'scripts/node_modules/@farmslot/adapter-web'));
|
|
131
|
-
copyFile(path.join(runnerDir, 'adapters/extension/lib/slot-title.cjs'), path.join(harnessDir, 'scripts/lib/slot-title.cjs'));
|
|
132
131
|
copyFile(path.join(runnerDir, 'adapters/extension/lib/product-config.cjs'), path.join(harnessDir, 'scripts/lib/product-config.cjs'));
|
|
133
132
|
makeExecutableTree(path.join(harnessDir, 'scripts'));
|
|
134
133
|
fs.writeFileSync(path.join(harnessDir, 'installed-scripts.sha256'), `${dirContentHash(path.join(harnessDir, 'scripts'))}\n`);
|