@deeeed/metamask-harness 0.91.5 → 0.91.7

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,23 @@
2
2
 
3
3
  ## Unreleased
4
4
 
5
+ ## 0.91.7 - 2026-10-13
6
+
7
+ ### Changed
8
+
9
+ - Use the coordinated Farmslot recipe closure for fresh task attempt directories, selected-package checks and declared output provenance. Reusing a retained `--artifacts-dir` refuses and preserves its evidence.
10
+
11
+ ### Fixed
12
+
13
+ - Render PR validation logs from the selected retained attempt, including when an older legacy report remains.
14
+
15
+ ## 0.91.6 - 2026-10-13
16
+
17
+ ### Fixed
18
+
19
+ - Keep all bundled recipe intents within the shared conformance limit, with a full-library regression check.
20
+ - Adopt recipe-cli 0.14.3 so proof plans reject invalid intents before execution.
21
+
5
22
  ## 0.91.5 - 2026-10-13
6
23
 
7
24
  ### Changed
@@ -779,7 +779,7 @@ Common overrides:
779
779
  --adapter <{adapters}> Target adapter (auto-detected inside a checkout)
780
780
  --platform <ios|android> Mobile platform preference; use --adapter for the product adapter
781
781
  --target <path> Checkout path (default: cwd)
782
- --artifacts-dir <dir> Override evidence output (default: active task/artifacts, otherwise a checkout-local temp/recipe/runs/<run>)
782
+ --artifacts-dir <dir> Fresh evidence output (default: active task/artifacts/recipe-runs/<attempt>, otherwise checkout-local temp/recipe/runs/<run>); retained packages cannot be reused
783
783
  --funding-request <absolute-file> Original consented mutation request for external-mutation actions
784
784
  --funding-preflight <absolute-file> Eligible funding preflight bound to the request bytes
785
785
  --funding-release-proof <absolute-file> Exact release proof independently bound to funding eligibility
@@ -1,5 +1,9 @@
1
1
  import fs from "node:fs";
2
+ import { createRequire } from "node:module";
2
3
  import path from "node:path";
4
+ const { readRecipeAttemptSelection } = createRequire(import.meta.url)(
5
+ "@farmslot/agent-runtime/scripts/retained-recipe-attempt.cjs"
6
+ );
3
7
  const PROSE_FILE = "pr-description.md";
4
8
  const BODY_FILE = "pr-body.md";
5
9
  const RECIPE_HEADING = "## **Validation Recipe**";
@@ -77,7 +81,9 @@ function renderPrBody(input) {
77
81
  throw new Error(`Missing ${path.relative(input.taskDir, prosePath)}: write the PR description there first.`);
78
82
  }
79
83
  const recipePath = path.join(artifacts, "recipe.json");
80
- const reportPath = path.join(artifacts, "recipe-run", "report.md");
84
+ const selected = readRecipeAttemptSelection(input.taskDir);
85
+ const reportRoot = selected?.relativeArtifactRoot ?? "recipe-run";
86
+ const reportPath = path.join(artifacts, reportRoot, "report.md");
81
87
  const workflowPath = path.join(artifacts, "workflow.mmd");
82
88
  const machine = [];
83
89
  let recipe = null;
@@ -91,7 +97,7 @@ function renderPrBody(input) {
91
97
  const hasReport = fs.existsSync(reportPath);
92
98
  machine.push([
93
99
  LOGS_HEADING,
94
- hasReport ? logsSection(reportPath, input.command) : "Not applicable: no recipe run report under `artifacts/recipe-run/`."
100
+ hasReport ? logsSection(reportPath, input.command) : `Not applicable: no recipe run report under \`artifacts/${reportRoot}/\`.`
95
101
  ]);
96
102
  const hasWorkflow = fs.existsSync(workflowPath);
97
103
  if (hasWorkflow) {
@@ -25,7 +25,7 @@
25
25
  "action": "metamask.perps.start_state",
26
26
  "network": "{{params.network}}",
27
27
  "next": "CONTROLLER_UNAVAILABLE",
28
- "intent": "NETWORK_SETUP_FAILED unless the controller initializes in the requested network before proof. Recovery: mm-harness doctor --fix"
28
+ "intent": "Network setup failed before proof. Next: mm-harness doctor --fix"
29
29
  },
30
30
  "status": {
31
31
  "action": "app.status",
@@ -37,14 +37,14 @@
37
37
  "network": "{{params.network}}",
38
38
  "timeout_ms": "{{params.timeout_ms}}",
39
39
  "next": "ACCOUNT_READ_FAILED",
40
- "intent": "CONTROLLER_UNAVAILABLE unless the Perps controller imports and reads the requested-network account in time. Recovery: mm-harness doctor --fix"
40
+ "intent": "Perps controller is unavailable on the selected network. Next: mm-harness doctor --fix"
41
41
  },
42
42
  "ACCOUNT_READ_FAILED": {
43
43
  "action": "assert_output",
44
44
  "source": "CONTROLLER_UNAVAILABLE",
45
45
  "assert": { "path": "$.accountState.totalBalance", "operator": "matches", "value": "^-?[0-9]+(\\.[0-9]+)?$" },
46
46
  "next": "done",
47
- "intent": "ACCOUNT_READ_FAILED unless the read returned a numeric balance; the controller reports an unreachable venue as a placeholder. Recovery: check network access to HyperLiquid testnet, then rerun"
47
+ "intent": "Account read returned no numeric balance. Next: check HyperLiquid testnet access"
48
48
  },
49
49
  "done": {
50
50
  "action": "end",
@@ -27,7 +27,7 @@
27
27
  "network": "{{params.network}}",
28
28
  "account": "{{params.account}}",
29
29
  "next": "read-positions",
30
- "intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
30
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
31
31
  },
32
32
  "status": {
33
33
  "action": "app.status",
@@ -33,7 +33,7 @@
33
33
  "network": "{{params.network}}",
34
34
  "account": "{{params.account}}",
35
35
  "next": "read_snapshot",
36
- "intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
36
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
37
37
  },
38
38
  "status": {
39
39
  "action": "app.status",
@@ -54,7 +54,7 @@
54
54
  "CONSOLE_ERRORS": {
55
55
  "action": "metamask.app.assert_no_console_errors",
56
56
  "next": "screenshot",
57
- "intent": "CONSOLE_ERRORS if the app logged an error outside the console allowlist since launch. Recovery: fix the error, or allowlist known noise with a reason in a library's diagnostics/console-allowlist.json"
57
+ "intent": "Unexpected app console error. Next: fix it or add explained noise to diagnostics/console-allowlist.json"
58
58
  },
59
59
  "screenshot": {
60
60
  "action": "ui.screenshot",
@@ -41,7 +41,7 @@
41
41
  "positions": false,
42
42
  "orders": false,
43
43
  "next": "market-detail",
44
- "intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
44
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
45
45
  },
46
46
  "require-cdp": {
47
47
  "action": "cdp.target",
@@ -27,7 +27,7 @@
27
27
  "positions": false,
28
28
  "orders": false,
29
29
  "next": "read-home",
30
- "intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
30
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
31
31
  },
32
32
  "status": {
33
33
  "action": "app.status",
@@ -54,7 +54,7 @@
54
54
  "CONSOLE_ERRORS": {
55
55
  "action": "metamask.app.assert_no_console_errors",
56
56
  "next": "screenshot",
57
- "intent": "CONSOLE_ERRORS if the app logged an error outside the console allowlist since launch. Recovery: fix the error, or allowlist known noise with a reason in a library's diagnostics/console-allowlist.json"
57
+ "intent": "Unexpected app console error. Next: fix it or add explained noise to diagnostics/console-allowlist.json"
58
58
  },
59
59
  "screenshot": {
60
60
  "action": "ui.screenshot",
@@ -27,7 +27,7 @@
27
27
  "positions": false,
28
28
  "orders": false,
29
29
  "next": "observe-perps",
30
- "intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
30
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
31
31
  },
32
32
  "status": {
33
33
  "action": "app.status",
@@ -37,7 +37,7 @@
37
37
  "positions": false,
38
38
  "orders": false,
39
39
  "next": "open-market-list",
40
- "intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
40
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
41
41
  },
42
42
  "open-perps": {
43
43
  "action": "ui.navigate",
@@ -45,7 +45,7 @@
45
45
  "positions": false,
46
46
  "orders": false,
47
47
  "next": "open-market-list",
48
- "intent": "Establish and read back the configured Perps network before proof; default testnet. Preserve accounts, positions and orders."
48
+ "intent": "Verify the configured Perps network before proof; default testnet. Keep accounts and orders."
49
49
  },
50
50
  "open-perps": {
51
51
  "action": "ui.navigate",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@deeeed/metamask-harness",
3
- "version": "0.91.5",
3
+ "version": "0.91.7",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "mm-harness": "bin/mm-harness"
@@ -21,15 +21,15 @@
21
21
  "check:syntax": "find . -name '*.mjs' -print0 | xargs -0 -n1 node --check"
22
22
  },
23
23
  "dependencies": {
24
- "@farmslot/adapter-node": "0.1.14",
25
- "@farmslot/adapter-rn": "0.20.1",
26
- "@farmslot/adapter-sdk": "0.9.1",
27
- "@farmslot/adapter-web": "0.7.2",
28
- "@farmslot/agent-runtime": "0.18.1",
24
+ "@farmslot/adapter-node": "0.1.15",
25
+ "@farmslot/adapter-rn": "0.21.0",
26
+ "@farmslot/adapter-sdk": "0.10.0",
27
+ "@farmslot/adapter-web": "0.8.0",
28
+ "@farmslot/agent-runtime": "0.19.0",
29
29
  "@farmslot/handoff": "^0.3.1",
30
- "@farmslot/protocol": "0.40.0",
31
- "@farmslot/recipe-cli": "0.14.2",
32
- "@farmslot/recipe-runner": "0.31.0",
30
+ "@farmslot/protocol": "0.41.0",
31
+ "@farmslot/recipe-cli": "0.15.0",
32
+ "@farmslot/recipe-runner": "0.32.0",
33
33
  "agent-device": "0.19.3",
34
34
  "commander": "^12.0.0",
35
35
  "esbuild": "0.28.1",