@deeeed/metamask-harness 0.53.0 → 0.54.1
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 +12 -0
- package/README.md +2 -2
- package/dist/command-contract.js +1 -1
- package/dist/commands/task-init.js +0 -1
- package/dist/mm-harness-cli.js +12 -8
- package/package.json +5 -5
- package/scripts/site-contrast.mjs +4 -4
- package/site/assets/help-recipes.json +20 -0
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,18 @@
|
|
|
2
2
|
|
|
3
3
|
## Unreleased
|
|
4
4
|
|
|
5
|
+
## 0.54.1 - 2026-09-18
|
|
6
|
+
|
|
7
|
+
### Changed
|
|
8
|
+
|
|
9
|
+
- `help --json` quality section carries the verdict rules (pass, warn, fail), the shape of an independent critique, and per-adapter review notes for Mobile, Extension and Core; the separate recipe-quality skill is retired in favour of this guidance.
|
|
10
|
+
|
|
11
|
+
## 0.54.0 - 2026-09-17
|
|
12
|
+
|
|
13
|
+
### Changed
|
|
14
|
+
|
|
15
|
+
- Farmslot protocol 0.28.0 and agent-runtime 0.10.0: an execution template no longer declares a run mode, so `task init` stops defaulting `--run-mode`. The flag stays accepted for a control plane that has one to pass; omit it for a skill or manual run and nothing invents a mode. Help, README, and site examples use the plain template ids the catalog now offers (`fix-bug/mobile`, `review-pr/static-perps.mobile`). Pins recipe-harness 0.16.3 and expo-recipe 0.9.2, the builds that also carry protocol 0.28.0, so a packed install keeps one protocol copy.
|
|
16
|
+
|
|
5
17
|
## 0.53.0 - 2026-09-17
|
|
6
18
|
|
|
7
19
|
### Added
|
package/README.md
CHANGED
|
@@ -129,7 +129,7 @@ mm-harness execution-template list --package-templates <catalog> --json
|
|
|
129
129
|
|
|
130
130
|
# Write the task directory the agent works from.
|
|
131
131
|
mm-harness task init temp/tasks/fix/TAT-1 \
|
|
132
|
-
--flow fix-bug --
|
|
132
|
+
--flow fix-bug --template fix-bug/mobile \
|
|
133
133
|
--package-templates <catalog> --title "Wrong total on the receipt" --ticket TAT-1
|
|
134
134
|
|
|
135
135
|
# Bring the checkout to a proven-ready state before the first step.
|
|
@@ -271,7 +271,7 @@ Unset `MM_HARNESS_BIN` to return to the published installation.
|
|
|
271
271
|
|
|
272
272
|
### Workflow entry points and completion
|
|
273
273
|
|
|
274
|
-
Explicitly invoke `mms-recipe-dev`, `mms-recipe-
|
|
274
|
+
Explicitly invoke `mms-recipe-dev`, `mms-recipe-fix-bug`, `mms-recipe-qa` or the team's static review skill. `mms-recipe-cook` selects or resumes their shared Markdown checklist. Matching descriptions or changed paths never activates these workflows.
|
|
275
275
|
|
|
276
276
|
Static Perps review uses a generated source checklist without installing or launching the app harness. `recipe-qa` freezes a PR, range or daily change window and requires runtime smoke plus selected recipe proof. Official release validation uses its named release profile and proof lane.
|
|
277
277
|
|
package/dist/command-contract.js
CHANGED
|
@@ -158,7 +158,7 @@ const PUBLIC_COMMAND_CONTRACTS = {
|
|
|
158
158
|
})
|
|
159
159
|
},
|
|
160
160
|
task: {
|
|
161
|
-
usage: "mm-harness task init <task-dir> --flow f --
|
|
161
|
+
usage: "mm-harness task init <task-dir> --flow f --template id --title t [options]",
|
|
162
162
|
options: options(HELP, JSON, {
|
|
163
163
|
"--flow": value(),
|
|
164
164
|
"--run-mode": value(["autonomous", "interactive", "validation"]),
|
|
@@ -11,7 +11,6 @@ function hasOption(argv, name) {
|
|
|
11
11
|
function metamaskDefaults(argv) {
|
|
12
12
|
const defaults = [];
|
|
13
13
|
if (!hasOption(argv, "--surface")) defaults.push("--surface", "skill");
|
|
14
|
-
if (!hasOption(argv, "--run-mode")) defaults.push("--run-mode", "autonomous");
|
|
15
14
|
if (!hasOption(argv, "--mark-command")) {
|
|
16
15
|
defaults.push("--mark-command", `${harnessExecutable()} checklist mark`);
|
|
17
16
|
}
|
package/dist/mm-harness-cli.js
CHANGED
|
@@ -275,7 +275,7 @@ Example:
|
|
|
275
275
|
{
|
|
276
276
|
name: "task",
|
|
277
277
|
summary: "Create the task directory an agent works from, out of a shared execution template.",
|
|
278
|
-
example: 'mm-harness task init temp/tasks/fix/TAT-1 --flow fix-bug --
|
|
278
|
+
example: 'mm-harness task init temp/tasks/fix/TAT-1 --flow fix-bug --template fix-bug/mobile --title "Wrong total"',
|
|
279
279
|
helpText: `mm-harness task init <task-dir> [options]
|
|
280
280
|
|
|
281
281
|
Write the task directory from a selected execution template: TASK.md, the
|
|
@@ -283,8 +283,8 @@ Example:
|
|
|
283
283
|
mm-harness checklist mark, and inputs/ (handoff.json, worker-terminal-contract.json).
|
|
284
284
|
checklist-target.json is NOT written \u2014 absent means CHECKLIST.md + SIGNAL.json.
|
|
285
285
|
|
|
286
|
-
Applied when you do not pass them: --surface skill, --
|
|
287
|
-
|
|
286
|
+
Applied when you do not pass them: --surface skill, --mark-command for this
|
|
287
|
+
executable, and --platform from the detected checkout.
|
|
288
288
|
|
|
289
289
|
Task:
|
|
290
290
|
--title <t> Task title (required)
|
|
@@ -294,7 +294,9 @@ Task:
|
|
|
294
294
|
|
|
295
295
|
Selection (same catalog as execution-template):
|
|
296
296
|
--flow <flow> Exact flow (required)
|
|
297
|
-
--run-mode <mode> autonomous|interactive|validation (
|
|
297
|
+
--run-mode <mode> autonomous|interactive|validation (optional;
|
|
298
|
+
set by the Farmslot control plane, omit for
|
|
299
|
+
skill/manual runs)
|
|
298
300
|
--platform <platform> Exact platform
|
|
299
301
|
--template <id> Exact template id (required)
|
|
300
302
|
--domain <domain> Exact domain
|
|
@@ -316,8 +318,8 @@ Identity and rendering:
|
|
|
316
318
|
--json Machine-readable output
|
|
317
319
|
|
|
318
320
|
Example:
|
|
319
|
-
mm-harness task init temp/tasks/fix/TAT-1 --flow fix-bug
|
|
320
|
-
--template fix-bug/
|
|
321
|
+
mm-harness task init temp/tasks/fix/TAT-1 --flow fix-bug \\
|
|
322
|
+
--template fix-bug/mobile --package-templates <path> \\
|
|
321
323
|
--title "Wrong total on the receipt" --ticket TAT-1 --json`
|
|
322
324
|
},
|
|
323
325
|
{
|
|
@@ -344,14 +346,16 @@ Common source/filter options:
|
|
|
344
346
|
--project-name <name> Source label for project templates
|
|
345
347
|
--flow <flow> Exact flow
|
|
346
348
|
--platform <platform> Exact platform
|
|
347
|
-
--run-mode <mode> autonomous|interactive|validation
|
|
349
|
+
--run-mode <mode> autonomous|interactive|validation (optional;
|
|
350
|
+
set by the Farmslot control plane, omit for
|
|
351
|
+
skill/manual runs)
|
|
348
352
|
--domain <domain> Exact domain
|
|
349
353
|
--id <id> Exact template id
|
|
350
354
|
--json Machine-readable output
|
|
351
355
|
|
|
352
356
|
Materialize:
|
|
353
357
|
mm-harness execution-template materialize <output> --flow fix-bug \\
|
|
354
|
-
--platform mobile --
|
|
358
|
+
--platform mobile --id fix-bug/mobile \\
|
|
355
359
|
--package-templates <path> --provenance <path> --json`
|
|
356
360
|
},
|
|
357
361
|
{
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@deeeed/metamask-harness",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.54.1",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"bin": {
|
|
6
6
|
"mm-harness": "bin/mm-harness"
|
|
@@ -20,11 +20,11 @@
|
|
|
20
20
|
"check:syntax": "find . -name '*.mjs' -print0 | xargs -0 -n1 node --check"
|
|
21
21
|
},
|
|
22
22
|
"dependencies": {
|
|
23
|
-
"@farmslot/agent-runtime": "0.
|
|
24
|
-
"@farmslot/expo-recipe": "0.9.
|
|
23
|
+
"@farmslot/agent-runtime": "0.10.0",
|
|
24
|
+
"@farmslot/expo-recipe": "0.9.2",
|
|
25
25
|
"@farmslot/handoff": "^0.3.1",
|
|
26
|
-
"@farmslot/protocol": "0.
|
|
27
|
-
"@farmslot/recipe-harness": "0.16.
|
|
26
|
+
"@farmslot/protocol": "0.28.0",
|
|
27
|
+
"@farmslot/recipe-harness": "0.16.3",
|
|
28
28
|
"agent-device": "0.19.3",
|
|
29
29
|
"commander": "^12.0.0",
|
|
30
30
|
"es-module-lexer": "2.3.1",
|
|
@@ -394,9 +394,9 @@ async function checkBehavior(browserEndpoint, port, pages) {
|
|
|
394
394
|
['/mms-recipe-qa', copied.work.join('\n')],
|
|
395
395
|
['/mms-recipe-cook', copied.work.join('\n')],
|
|
396
396
|
['/mms-recipe-performance', copied.work.join('\n')],
|
|
397
|
-
['/mms-recipe-
|
|
398
|
-
['
|
|
399
|
-
['agentic/recipe-
|
|
397
|
+
['/mms-recipe-pretty-pr', copied.work.join('\n')],
|
|
398
|
+
['perps/recipe-performance', copied.setup],
|
|
399
|
+
['agentic/recipe-pretty-pr', copied.setup],
|
|
400
400
|
];
|
|
401
401
|
const missing = expected.filter(([line, text]) => !text?.includes(line)).map(([line]) => line);
|
|
402
402
|
if (missing.length) {
|
|
@@ -448,7 +448,7 @@ async function checkBehavior(browserEndpoint, port, pages) {
|
|
|
448
448
|
return checked;
|
|
449
449
|
})()
|
|
450
450
|
`);
|
|
451
|
-
if (!previews.includes('review-pr/static-perps') || !previews.includes('qa/pr.extension')) {
|
|
451
|
+
if (!previews.includes('review-pr/static-perps.mobile') || !previews.includes('qa/pr.extension')) {
|
|
452
452
|
throw new Error('Static review and QA previews must both be available');
|
|
453
453
|
}
|
|
454
454
|
const progress = await page.evaluate(String.raw`
|
|
@@ -212,6 +212,26 @@
|
|
|
212
212
|
"mobile",
|
|
213
213
|
"extension"
|
|
214
214
|
]
|
|
215
|
+
},
|
|
216
|
+
"Verdict: pass when every named claim ran an executable path with an assertion and consistent evidence; warn when the supported claims pass but non-blocking gaps remain; fail when a named claim has no executable path or assertion, the graph can pass unconditionally, required evidence is missing or contradictory, or the relevant path did not run. A visual claim cannot pass without a settled capture. Write only the compact {verdict, reasons} to artifacts/recipe-quality-input.json and build the artifact with mm-harness recipe-quality build; never hand-author it.",
|
|
217
|
+
"Independent critique, when one is requested: the verdict with one evidence-backed sentence, uncovered or weak proof targets, graph, composition, adapter and reuse findings, evidence mismatches and flake risks, and the three highest-value concrete edits.",
|
|
218
|
+
{
|
|
219
|
+
"text": "State the simulator or device, build type and app state. Unlock through a fixture or a documented primitive; keep account, balance, network, permissions and feature flags deterministic; use existing page objects, test ids and fixtures; capture only after ui.wait_for, a route assertion or a state assertion; teardown must not leak balances, pending transactions, selected network, permissions or onboarding state into the next run.",
|
|
220
|
+
"adapters": [
|
|
221
|
+
"mobile"
|
|
222
|
+
]
|
|
223
|
+
},
|
|
224
|
+
{
|
|
225
|
+
"text": "State browser, build, fixture and the popup, fullscreen or service-worker context. Popup UI proven only through CDP eval or controller reads fails a visual claim; capture after settle; prefer existing e2e and fixture helpers over raw steps.",
|
|
226
|
+
"adapters": [
|
|
227
|
+
"extension"
|
|
228
|
+
]
|
|
229
|
+
},
|
|
230
|
+
{
|
|
231
|
+
"text": "Core is headless: prove claims with summary.json, trace.json, logs or package tests, never screenshots; use manifest-declared headless actions only; state the target package or workspace, fixture, start state and teardown for controller mutations; a non-visual criterion needs unit or package test coverage.",
|
|
232
|
+
"adapters": [
|
|
233
|
+
"core"
|
|
234
|
+
]
|
|
215
235
|
}
|
|
216
236
|
],
|
|
217
237
|
"commands": [
|