@deeeed/metamask-harness 0.46.0 → 0.47.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 +28 -0
- package/README.md +1 -1
- package/adapters/manifest.json +12 -4
- package/adapters/mobile/wait-for-bridge.cjs +550 -0
- package/adapters/mobile/wait-for-bridge.sh +11 -148
- package/bin/mm-harness +7 -2
- package/dist/adapters/mobile/prepare.js +26 -18
- package/dist/adapters/mobile/runtime-decision.js +1 -0
- package/dist/cli-commands.js +2 -0
- package/dist/command-contract.js +7 -0
- package/dist/commands/checklist.js +1 -0
- package/dist/commands/help.js +76 -0
- package/dist/commands/parse-args.js +2 -1
- package/dist/commands/recipe-quality.js +1 -1
- package/dist/commands/tutorial.js +46 -0
- package/dist/mm-harness-cli.js +45 -6
- package/docs/CONTRIBUTING.md +2 -0
- package/docs/QA.md +2 -2
- package/library/actions/mobile/perps/perps.mjs +1 -1
- package/package.json +2 -2
- package/scripts/site-contrast.mjs +6 -2
- package/site/assets/help-recipes.json +113 -0
- package/site/architecture.html +0 -497
- package/site/assets/metamask-fox.svg +0 -24
- package/site/assets/progress.mjs +0 -323
- package/site/assets/style.css +0 -1066
- package/site/cheatsheet.html +0 -307
- package/site/ecosystem.html +0 -162
- package/site/how-it-works.html +0 -692
- package/site/index.html +0 -184
- package/site/perps-advanced-orders-qa.html +0 -96
- package/site/perps.html +0 -265
- package/site/recipes.html +0 -423
- package/site/reviewers.html +0 -375
- package/site/tutorials/index.html +0 -181
- package/site/tutorials/v1.html +0 -212
- package/site/tutorials/v2.html +0 -207
- package/site/tutorials/v3.html +0 -258
- package/site/tutorials/v4.html +0 -196
- package/site/tutorials/v5.html +0 -164
- package/site/tutorials/v6.html +0 -166
- package/site/tutorials/v7.html +0 -185
package/site/tutorials/v3.html
DELETED
|
@@ -1,258 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>V3 — Skills and your team's library</title>
|
|
7
|
-
<meta name="description" content="Install the agentic skills into a checkout and declare your team's recipe library, with the perps library as the worked example.">
|
|
8
|
-
<link rel="icon" href="../assets/metamask-fox.svg" type="image/svg+xml">
|
|
9
|
-
<link rel="stylesheet" href="../assets/style.css?v=4">
|
|
10
|
-
</head>
|
|
11
|
-
<body data-progress-page="v3">
|
|
12
|
-
<a class="skip" href="#steps">Skip to the checklist</a>
|
|
13
|
-
|
|
14
|
-
<header class="topbar">
|
|
15
|
-
<div class="wrap topbar-inner">
|
|
16
|
-
<a class="brand" href="../index.html">
|
|
17
|
-
<img class="brand-mark" src="../assets/metamask-fox.svg" alt="" width="22" height="22">
|
|
18
|
-
<span class="brand-name">recipes</span>
|
|
19
|
-
</a>
|
|
20
|
-
<nav class="nav" aria-label="Main">
|
|
21
|
-
<a class="nav-cta" href="../index.html#prompt">Quick start</a>
|
|
22
|
-
<a href="../how-it-works.html">How it works</a>
|
|
23
|
-
<a href="../perps.html">Team / Perps</a>
|
|
24
|
-
<a href="../cheatsheet.html">Cheatsheet</a>
|
|
25
|
-
<a href="../architecture.html">Architecture</a>
|
|
26
|
-
<a href="index.html" aria-current="page">Tutorials</a>
|
|
27
|
-
</nav>
|
|
28
|
-
</div>
|
|
29
|
-
</header>
|
|
30
|
-
|
|
31
|
-
<div class="progress-rail">
|
|
32
|
-
<div class="wrap progress-inner">
|
|
33
|
-
<div class="progress-track" role="progressbar" aria-label="Tutorial progress" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
|
|
34
|
-
<div class="progress-fill"></div>
|
|
35
|
-
</div>
|
|
36
|
-
<span class="progress-label">0/5 steps</span>
|
|
37
|
-
<button type="button" class="progress-reset">Reset</button>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<main>
|
|
42
|
-
<section class="wrap hero" style="padding-bottom:1rem">
|
|
43
|
-
<span class="eyebrow">Tutorial V3 · 5 minutes</span>
|
|
44
|
-
<h1>Skills and your team's library</h1>
|
|
45
|
-
<p class="lede">
|
|
46
|
-
Two things turn a bare harness into your team's setup: skills that carry the workflow, and a library
|
|
47
|
-
that carries the recipes. Both install into a checkout.
|
|
48
|
-
</p>
|
|
49
|
-
<div class="hero-meta">
|
|
50
|
-
<span>prerequisite: <a href="../how-it-works.html#steps">the walkthrough</a></span>
|
|
51
|
-
<span>worked example: the perps library</span>
|
|
52
|
-
</div>
|
|
53
|
-
</section>
|
|
54
|
-
|
|
55
|
-
<section class="wrap">
|
|
56
|
-
<div class="vid-thumb" style="border-radius:var(--radius);border:1px solid var(--line);margin-bottom:1.5rem">
|
|
57
|
-
<div style="text-align:center;padding:1rem">
|
|
58
|
-
<div class="vid-id" style="font-size:2.6rem">V3</div>
|
|
59
|
-
<p style="color:var(--text-dim);margin:.5rem 0 0;font-size:.92rem">Video recording in progress</p>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
<h2>Skills versus libraries</h2>
|
|
64
|
-
<div class="table-scroll">
|
|
65
|
-
<table>
|
|
66
|
-
<thead><tr><th></th><th>Skills</th><th>Recipe library</th></tr></thead>
|
|
67
|
-
<tbody>
|
|
68
|
-
<tr><td>Carry</td><td>The workflow an agent follows.</td><td>Recipes and domain actions.</td></tr>
|
|
69
|
-
<tr><td>Live in</td><td><code>Consensys/skills</code>, installed per checkout.</td><td>A team repo, declared by path.</td></tr>
|
|
70
|
-
<tr><td>Needed to run a recipe</td><td>No.</td><td>Yes, for your team's recipes.</td></tr>
|
|
71
|
-
</tbody>
|
|
72
|
-
</table>
|
|
73
|
-
</div>
|
|
74
|
-
|
|
75
|
-
<div class="note blue">
|
|
76
|
-
<span class="note-title">Layering</span>
|
|
77
|
-
<p>
|
|
78
|
-
Personal beats domain beats default, for skills and libraries alike. Your own overrides your team's,
|
|
79
|
-
which overrides what ships. A library that shadows another is reported in the run summary's
|
|
80
|
-
<code>shadowed</code> list rather than silently winning.
|
|
81
|
-
</p>
|
|
82
|
-
</div>
|
|
83
|
-
</section>
|
|
84
|
-
|
|
85
|
-
<section class="wrap">
|
|
86
|
-
<h2 id="steps">Set it up</h2>
|
|
87
|
-
|
|
88
|
-
<div class="agent-card">
|
|
89
|
-
<h3 style="margin-top:0">Paste this into your agent</h3>
|
|
90
|
-
<div class="cmd cmd-hero"><pre><code>Task: install the latest recipe skills and shared MetaMask Perps recipe library,
|
|
91
|
-
then prove one real recipe runs end to end.
|
|
92
|
-
|
|
93
|
-
1. Work from the MetaMask product checkout I started you in. Run
|
|
94
|
-
`npm i -g @deeeed/metamask-harness@latest` and `mm-harness --version`.
|
|
95
|
-
2. Install the latest Consensys recipe skills into this checkout:
|
|
96
|
-
`yarn skills --maturity experimental --include
|
|
97
|
-
agentic/recipe-cook,agentic/recipe-quality --save`
|
|
98
|
-
This command updates the skills sources before syncing. Show me that
|
|
99
|
-
recipe-cook and recipe-quality were installed.
|
|
100
|
-
3. Use this exact library directory:
|
|
101
|
-
`$HOME/shared-library/metamask-recipe-perps`.
|
|
102
|
-
If it does not exist, clone
|
|
103
|
-
`git@github.com:MetaMask/experimental-metamask-recipe-perps.git` there.
|
|
104
|
-
If it exists and is clean, update it with `git pull --ff-only`; if it is
|
|
105
|
-
dirty, preserve it and report that instead of changing its files.
|
|
106
|
-
If cloning reports 404 or permission denied, stop and tell me that repository
|
|
107
|
-
access is missing; do not search for a substitute repository.
|
|
108
|
-
4. Run `mm-harness run --list --library
|
|
109
|
-
"perps=$HOME/shared-library/metamask-recipe-perps"` and show me the recipes
|
|
110
|
-
tagged `[perps]`. Use this explicit `--library` on every later command; do not
|
|
111
|
-
assume an `export` survives between tool shells.
|
|
112
|
-
5. Run `mm-harness status`. If the app is not ready, follow its public `Next:`
|
|
113
|
-
command while preserving the same device UUID or serial used during setup.
|
|
114
|
-
6. Choose only a recipe actually printed by step 4 for THIS checkout — the
|
|
115
|
-
`[perps]` set differs per adapter, so do not copy a name from the docs.
|
|
116
|
-
`perps.snapshot-market` is a good non-mutating pick on Core;
|
|
117
|
-
`perps.open-market` is its Extension/Mobile counterpart. If neither is in
|
|
118
|
-
your list, use the bundled `wallet.smoke` (Extension/Mobile) or
|
|
119
|
-
`runner.smoke` (Core).
|
|
120
|
-
7. Run the chosen recipe with `--describe`, then `--plan`, then for real with
|
|
121
|
-
`--artifacts-dir ./first-team-recipe-artifacts`. Include
|
|
122
|
-
`--library "perps=$HOME/shared-library/metamask-recipe-perps"` each time.
|
|
123
|
-
For a Perps recipe use `network=testnet market=BTC`. Never place an order or
|
|
124
|
-
use mainnet in this setup proof.
|
|
125
|
-
8. Show me summary.json status, every trace.json node result, and all artifact
|
|
126
|
-
paths. Then confirm the checkout is ready for a bug-fix task using the
|
|
127
|
-
installed recipe-cook skill.</code></pre></div>
|
|
128
|
-
</div>
|
|
129
|
-
|
|
130
|
-
<ol class="steps">
|
|
131
|
-
<li class="step" data-step="skills">
|
|
132
|
-
<div class="step-head">
|
|
133
|
-
<input type="checkbox" class="step-check" id="v3-skills" aria-labelledby="t3-skills">
|
|
134
|
-
<h3 class="step-title" id="t3-skills">Install the skills into your checkout</h3>
|
|
135
|
-
</div>
|
|
136
|
-
<p class="step-why">Run this from the product checkout you work in.</p>
|
|
137
|
-
<div class="cmd"><pre><code><span class="p">$ </span>yarn skills --maturity experimental --include agentic/recipe-cook,agentic/recipe-quality --save</code></pre></div>
|
|
138
|
-
<p class="step-why">
|
|
139
|
-
The agentic skills carry <code>experimental</code> maturity, so they are visible only when
|
|
140
|
-
experimental skills are enabled. <code>recipe-cook</code> is the one you want first — it owns
|
|
141
|
-
the authoring and review flows covered in <a href="v4.html">V4</a>.
|
|
142
|
-
</p>
|
|
143
|
-
<details class="fail">
|
|
144
|
-
<summary>If it fails</summary>
|
|
145
|
-
<div class="fail-body">
|
|
146
|
-
<p><strong>No <code>skills</code> script</strong> — not every repo has the tooling wired yet. Check the skills repo for the current install path for your checkout.</p>
|
|
147
|
-
<p><strong>The skill does not appear</strong> — confirm experimental maturity is enabled; that is the usual cause.</p>
|
|
148
|
-
</div>
|
|
149
|
-
</details>
|
|
150
|
-
</li>
|
|
151
|
-
|
|
152
|
-
<li class="step" data-step="clone">
|
|
153
|
-
<div class="step-head">
|
|
154
|
-
<input type="checkbox" class="step-check" id="v3-clone" aria-labelledby="t3-clone">
|
|
155
|
-
<h3 class="step-title" id="t3-clone">Clone your team's library</h3>
|
|
156
|
-
</div>
|
|
157
|
-
<p class="step-why">The perps library, as the worked example:</p>
|
|
158
|
-
<div class="cmd"><pre><code><span class="p">$ </span>git clone git@github.com:MetaMask/experimental-metamask-recipe-perps.git \
|
|
159
|
-
"$HOME/shared-library/metamask-recipe-perps"</code></pre></div>
|
|
160
|
-
<div class="note">
|
|
161
|
-
<span class="note-title">A 404 means access, not a typo</span>
|
|
162
|
-
<p>
|
|
163
|
-
The repository is private. If the clone fails with a 404, your account cannot see it yet — ask
|
|
164
|
-
for access rather than hunting for the right URL.
|
|
165
|
-
</p>
|
|
166
|
-
</div>
|
|
167
|
-
<p class="step-why">
|
|
168
|
-
Already have it somewhere? Symlink that checkout instead of making a second copy.
|
|
169
|
-
</p>
|
|
170
|
-
</li>
|
|
171
|
-
|
|
172
|
-
<li class="step" data-step="declare">
|
|
173
|
-
<div class="step-head">
|
|
174
|
-
<input type="checkbox" class="step-check" id="v3-declare" aria-labelledby="t3-declare">
|
|
175
|
-
<h3 class="step-title" id="t3-declare">Declare it</h3>
|
|
176
|
-
</div>
|
|
177
|
-
<p class="step-why">One <code>name=path</code> entry, absolute path:</p>
|
|
178
|
-
<div class="cmd"><pre><code><span class="p">$ </span>export RECIPE_LIBRARY_PATH="perps=$HOME/shared-library/metamask-recipe-perps"</code></pre></div>
|
|
179
|
-
<p class="step-why">Several libraries are colon-separated, and the name is how they are labelled in output:</p>
|
|
180
|
-
<div class="cmd"><pre><code><span class="p">$ </span>export RECIPE_LIBRARY_PATH="perps=$HOME/shared-library/metamask-recipe-perps:mine=$HOME/dev/my-recipes"</code></pre></div>
|
|
181
|
-
<p class="step-why">
|
|
182
|
-
Put it in your shell profile so every session has it. Per-command, <code>--library
|
|
183
|
-
perps=<path></code> does the same thing and is repeatable.
|
|
184
|
-
</p>
|
|
185
|
-
</li>
|
|
186
|
-
|
|
187
|
-
<li class="step" data-step="verify">
|
|
188
|
-
<div class="step-head">
|
|
189
|
-
<input type="checkbox" class="step-check" id="v3-verify" aria-labelledby="t3-verify">
|
|
190
|
-
<h3 class="step-title" id="t3-verify">Prove discovery sees it</h3>
|
|
191
|
-
</div>
|
|
192
|
-
<p class="step-why">This is the step people skip, then spend an afternoon on.</p>
|
|
193
|
-
<div class="cmd"><pre><code><span class="p">$ </span>mm-harness run --list</code></pre></div>
|
|
194
|
-
<div class="out-label">Expected — library recipes tagged with your library's name</div>
|
|
195
|
-
<div class="out">runnable recipes (core)
|
|
196
|
-
Inspect: mm-harness run <recipe> --describe
|
|
197
|
-
perps.ensure-market-state <span class="hint">[perps]</span> variant=core params=network,market,side,…
|
|
198
|
-
perps.prove-order <span class="hint">[perps]</span> variant=core params=network,market,side,order_type,…
|
|
199
|
-
perps.snapshot-market <span class="hint">[perps]</span> variant=core params=network,market
|
|
200
|
-
perps.smoke <span class="dim">[metamask]</span> variant=core — Non-mutating Perps domain smoke…
|
|
201
|
-
runner.smoke <span class="dim">[metamask]</span> variant=core — Proves the headless Core runner…</div>
|
|
202
|
-
<p class="step-why">
|
|
203
|
-
The tag is the proof: <code>[perps]</code> came from your library, <code>[metamask]</code> ships
|
|
204
|
-
with the harness. No tags from your library means it was not loaded. This example is a Core
|
|
205
|
-
checkout; Extension and Mobile print their own variants, so work from your list, not this one.
|
|
206
|
-
</p>
|
|
207
|
-
<details class="fail">
|
|
208
|
-
<summary>If it fails</summary>
|
|
209
|
-
<div class="fail-body">
|
|
210
|
-
<p><strong>Only <code>[metamask]</code> recipes</strong> — the variable is unset in this shell, or the path is wrong or relative. Echo it and check the path exists.</p>
|
|
211
|
-
<p><strong>Fewer recipes than expected</strong> — recipes declare which adapters they support. A mobile-only recipe will not appear in a core checkout. <code>--describe</code> shows the variant.</p>
|
|
212
|
-
</div>
|
|
213
|
-
</details>
|
|
214
|
-
</li>
|
|
215
|
-
|
|
216
|
-
<li class="step" data-step="run">
|
|
217
|
-
<div class="step-head">
|
|
218
|
-
<input type="checkbox" class="step-check" id="v3-run" aria-labelledby="t3-run">
|
|
219
|
-
<h3 class="step-title" id="t3-run">Read one before running it</h3>
|
|
220
|
-
</div>
|
|
221
|
-
<p class="step-why">Team recipes take parameters and many mutate testnet state.</p>
|
|
222
|
-
<div class="cmd"><pre><code><span class="p">$ </span>mm-harness run perps.prove-order --describe
|
|
223
|
-
<span class="p">$ </span>mm-harness run perps.prove-order market=ETH side=short order_type=limit --plan</code></pre></div>
|
|
224
|
-
<p class="step-why">
|
|
225
|
-
Drop <code>--plan</code> when the mutation and its cleanup are what you want. The perps library's
|
|
226
|
-
<code>README.md</code> is its onboarding doc, and <code>docs/AUTHORING.md</code> covers writing
|
|
227
|
-
recipes into it.
|
|
228
|
-
</p>
|
|
229
|
-
</li>
|
|
230
|
-
</ol>
|
|
231
|
-
|
|
232
|
-
<div class="doctrine">
|
|
233
|
-
<p>
|
|
234
|
-
<span class="k">Your team's library follows the same pattern:</span> a repo of recipes plus domain
|
|
235
|
-
actions, cloned and declared by path. Nothing about the perps setup above is perps-specific except
|
|
236
|
-
the URL.
|
|
237
|
-
</p>
|
|
238
|
-
</div>
|
|
239
|
-
|
|
240
|
-
<hr class="sep">
|
|
241
|
-
<div class="btn-row">
|
|
242
|
-
<a class="btn btn-primary" href="v4.html">Next: cook a recipe →</a>
|
|
243
|
-
<a class="btn btn-ghost" href="../architecture.html#libraries">Where libraries fit</a>
|
|
244
|
-
<a class="btn btn-ghost" href="index.html">Back to the series</a>
|
|
245
|
-
</div>
|
|
246
|
-
</section>
|
|
247
|
-
</main>
|
|
248
|
-
|
|
249
|
-
<footer class="footer">
|
|
250
|
-
<div class="wrap">
|
|
251
|
-
<p>Internal getting-started guide for proving MetaMask changes with recipes. Not official MetaMask product documentation.</p>
|
|
252
|
-
<p>Sample output moves between releases; trust your terminal over this page.</p>
|
|
253
|
-
</div>
|
|
254
|
-
</footer>
|
|
255
|
-
|
|
256
|
-
<script type="module" src="../assets/progress.mjs?v=4"></script>
|
|
257
|
-
</body>
|
|
258
|
-
</html>
|
package/site/tutorials/v4.html
DELETED
|
@@ -1,196 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>V4 — Cook a recipe from an acceptance criterion</title>
|
|
7
|
-
<meta name="description" content="Turn one acceptance criterion into a proof with the recipe-cook skill: discover, author, validate, run.">
|
|
8
|
-
<link rel="icon" href="../assets/metamask-fox.svg" type="image/svg+xml">
|
|
9
|
-
<link rel="stylesheet" href="../assets/style.css?v=4">
|
|
10
|
-
</head>
|
|
11
|
-
<body data-progress-page="v4">
|
|
12
|
-
<a class="skip" href="#steps">Skip to the checklist</a>
|
|
13
|
-
|
|
14
|
-
<header class="topbar">
|
|
15
|
-
<div class="wrap topbar-inner">
|
|
16
|
-
<a class="brand" href="../index.html">
|
|
17
|
-
<img class="brand-mark" src="../assets/metamask-fox.svg" alt="" width="22" height="22">
|
|
18
|
-
<span class="brand-name">recipes</span>
|
|
19
|
-
</a>
|
|
20
|
-
<nav class="nav" aria-label="Main">
|
|
21
|
-
<a class="nav-cta" href="../index.html#prompt">Quick start</a>
|
|
22
|
-
<a href="../how-it-works.html">How it works</a>
|
|
23
|
-
<a href="../perps.html">Team / Perps</a>
|
|
24
|
-
<a href="../cheatsheet.html">Cheatsheet</a>
|
|
25
|
-
<a href="../architecture.html">Architecture</a>
|
|
26
|
-
<a href="index.html" aria-current="page">Tutorials</a>
|
|
27
|
-
</nav>
|
|
28
|
-
</div>
|
|
29
|
-
</header>
|
|
30
|
-
|
|
31
|
-
<div class="progress-rail">
|
|
32
|
-
<div class="wrap progress-inner">
|
|
33
|
-
<div class="progress-track" role="progressbar" aria-label="Tutorial progress" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
|
|
34
|
-
<div class="progress-fill"></div>
|
|
35
|
-
</div>
|
|
36
|
-
<span class="progress-label">0/5 steps</span>
|
|
37
|
-
<button type="button" class="progress-reset">Reset</button>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<main>
|
|
42
|
-
<section class="wrap hero" style="padding-bottom:1rem">
|
|
43
|
-
<span class="eyebrow">Tutorial V4 · 8–10 minutes</span>
|
|
44
|
-
<h1>Cook a recipe from an acceptance criterion</h1>
|
|
45
|
-
<p class="lede">
|
|
46
|
-
Take one criterion off a ticket and end with a rerunnable proof of it. The
|
|
47
|
-
<code>recipe-cook</code> skill drives this; you steer at the gates.
|
|
48
|
-
</p>
|
|
49
|
-
<div class="hero-meta">
|
|
50
|
-
<span>prerequisite: <a href="v3.html">V3</a></span>
|
|
51
|
-
<span>skill maturity: experimental</span>
|
|
52
|
-
</div>
|
|
53
|
-
</section>
|
|
54
|
-
|
|
55
|
-
<section class="wrap">
|
|
56
|
-
<div class="vid-thumb" style="border-radius:var(--radius);border:1px solid var(--line);margin-bottom:1.5rem">
|
|
57
|
-
<div style="text-align:center;padding:1rem">
|
|
58
|
-
<div class="vid-id" style="font-size:2.6rem">V4</div>
|
|
59
|
-
<p style="color:var(--text-dim);margin:.5rem 0 0;font-size:.92rem">Video recording in progress</p>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
<h2>The flow</h2>
|
|
64
|
-
<p>Cook classifies the request, then runs one checklist to completion.</p>
|
|
65
|
-
|
|
66
|
-
<div class="stack">
|
|
67
|
-
<div class="layer layer-static">
|
|
68
|
-
<span class="layer-n">1</span><span class="layer-name">Classify</span>
|
|
69
|
-
<span class="layer-sub">dev · fix-bug · review-pr</span>
|
|
70
|
-
</div>
|
|
71
|
-
<div class="arrow" aria-hidden="true">↓</div>
|
|
72
|
-
<div class="layer layer-static">
|
|
73
|
-
<span class="layer-n">2</span><span class="layer-name">List and select a template</span>
|
|
74
|
-
<span class="layer-sub">discovery, then your pick</span>
|
|
75
|
-
</div>
|
|
76
|
-
<div class="arrow" aria-hidden="true">↓</div>
|
|
77
|
-
<div class="layer layer-static">
|
|
78
|
-
<span class="layer-n">3</span><span class="layer-name">Materialize one task</span>
|
|
79
|
-
<span class="layer-sub">an immutable checklist, one harness</span>
|
|
80
|
-
</div>
|
|
81
|
-
<div class="arrow" aria-hidden="true">↓</div>
|
|
82
|
-
<div class="layer layer-static">
|
|
83
|
-
<span class="layer-n">4</span><span class="layer-name">Execute the gates</span>
|
|
84
|
-
<span class="layer-sub">author, validate, run, mark</span>
|
|
85
|
-
</div>
|
|
86
|
-
</div>
|
|
87
|
-
|
|
88
|
-
<p>
|
|
89
|
-
Template discovery runs through <code>mm-harness execution-template</code>, the same discovery
|
|
90
|
-
contract as actions and recipes. Your team's library can supply its own templates.
|
|
91
|
-
</p>
|
|
92
|
-
|
|
93
|
-
<div class="note">
|
|
94
|
-
<span class="note-title">Step 2 stops for you</span>
|
|
95
|
-
<p>
|
|
96
|
-
For <code>dev</code> and <code>fix-bug</code>, Cook prints the compatible template IDs with a
|
|
97
|
-
recommendation and then stops. It takes no further action until you reply with a number or an
|
|
98
|
-
exact ID. This is the steering point: the flow is chosen by you, not inferred.
|
|
99
|
-
</p>
|
|
100
|
-
</div>
|
|
101
|
-
</section>
|
|
102
|
-
|
|
103
|
-
<section class="wrap">
|
|
104
|
-
<h2 id="steps">Follow along</h2>
|
|
105
|
-
<p>Pick a small, real criterion — one observable behaviour, not a whole epic.</p>
|
|
106
|
-
|
|
107
|
-
<ol class="steps">
|
|
108
|
-
<li class="step" data-step="invoke">
|
|
109
|
-
<div class="step-head">
|
|
110
|
-
<input type="checkbox" class="step-check" id="v4-invoke" aria-labelledby="t4-invoke">
|
|
111
|
-
<h3 class="step-title" id="t4-invoke">Start Cook in your checkout</h3>
|
|
112
|
-
</div>
|
|
113
|
-
<p class="step-why">In Claude or Cursor, invoke the skill with your task in plain language:</p>
|
|
114
|
-
<div class="cmd"><pre><code>/mms-recipe-cook Prove that a resting limit order can be repriced without losing its trigger</code></pre></div>
|
|
115
|
-
<p class="step-why">In Codex, the same skill is addressed as <code>$mms-recipe-cook</code>. Product is auto-detected; you will not be asked which repo you are in.</p>
|
|
116
|
-
</li>
|
|
117
|
-
|
|
118
|
-
<li class="step" data-step="select">
|
|
119
|
-
<div class="step-head">
|
|
120
|
-
<input type="checkbox" class="step-check" id="v4-select" aria-labelledby="t4-select">
|
|
121
|
-
<h3 class="step-title" id="t4-select">Choose the template</h3>
|
|
122
|
-
</div>
|
|
123
|
-
<p class="step-why">
|
|
124
|
-
Cook lists compatible IDs with one recommended. Reply with the number. It recommends an
|
|
125
|
-
interactive template when human judgment is still needed and an autonomous one when it is not.
|
|
126
|
-
</p>
|
|
127
|
-
</li>
|
|
128
|
-
|
|
129
|
-
<li class="step" data-step="discover">
|
|
130
|
-
<div class="step-head">
|
|
131
|
-
<input type="checkbox" class="step-check" id="v4-discover" aria-labelledby="t4-discover">
|
|
132
|
-
<h3 class="step-title" id="t4-discover">Watch discovery set the boundary</h3>
|
|
133
|
-
</div>
|
|
134
|
-
<p class="step-why">
|
|
135
|
-
Before authoring anything, the vocabulary is fixed. Run it yourself to see what Cook is choosing
|
|
136
|
-
from:
|
|
137
|
-
</p>
|
|
138
|
-
<div class="cmd"><pre><code><span class="p">$ </span>mm-harness actions --categories
|
|
139
|
-
<span class="p">$ </span>mm-harness actions --action assert_orders</code></pre></div>
|
|
140
|
-
<p class="step-why">
|
|
141
|
-
An action outside this list cannot be written into a working recipe — validation rejects it
|
|
142
|
-
before execution. That constraint is what makes the output trustworthy rather than plausible.
|
|
143
|
-
</p>
|
|
144
|
-
</li>
|
|
145
|
-
|
|
146
|
-
<li class="step" data-step="plan">
|
|
147
|
-
<div class="step-head">
|
|
148
|
-
<input type="checkbox" class="step-check" id="v4-plan" aria-labelledby="t4-plan">
|
|
149
|
-
<h3 class="step-title" id="t4-plan">Validate before executing</h3>
|
|
150
|
-
</div>
|
|
151
|
-
<p class="step-why">Exit 5 means the recipe is wrong and nothing ran.</p>
|
|
152
|
-
<div class="cmd"><pre><code><span class="p">$ </span>mm-harness run ./my-recipe.json --plan</code></pre></div>
|
|
153
|
-
<div class="out"><span class="ok">✓</span> [static] validate.schema: recipe document schema + action existence/platform vs the adapter manifest
|
|
154
|
-
<span class="dim">·</span> [conditional] execute.nodes: would execute 4 recipe node(s)</div>
|
|
155
|
-
</li>
|
|
156
|
-
|
|
157
|
-
<li class="step" data-step="prove">
|
|
158
|
-
<div class="step-head">
|
|
159
|
-
<input type="checkbox" class="step-check" id="v4-prove" aria-labelledby="t4-prove">
|
|
160
|
-
<h3 class="step-title" id="t4-prove">Run it, then try to break it</h3>
|
|
161
|
-
</div>
|
|
162
|
-
<div class="cmd"><pre><code><span class="p">$ </span>mm-harness run ./my-recipe.json --artifacts-dir ./proof</code></pre></div>
|
|
163
|
-
<div class="doctrine">
|
|
164
|
-
<p>
|
|
165
|
-
<span class="k">Then revert the change and run it again.</span> A recipe you have watched fail
|
|
166
|
-
for the right reason is one you can trust when it passes. If reverting the behaviour leaves it
|
|
167
|
-
green, it is not proving what you think.
|
|
168
|
-
</p>
|
|
169
|
-
</div>
|
|
170
|
-
<p class="step-why">
|
|
171
|
-
Expect one failure-and-fix loop during authoring. Each error names its own next command; follow
|
|
172
|
-
it rather than guessing. <a href="../recipes.html#falsifiability">The falsifiability test</a>
|
|
173
|
-
lists the four shapes that pass for the wrong reasons.
|
|
174
|
-
</p>
|
|
175
|
-
</li>
|
|
176
|
-
</ol>
|
|
177
|
-
|
|
178
|
-
<hr class="sep">
|
|
179
|
-
<div class="btn-row">
|
|
180
|
-
<a class="btn btn-primary" href="v5.html">Next: PR QA review →</a>
|
|
181
|
-
<a class="btn btn-ghost" href="../recipes.html">What makes a recipe good</a>
|
|
182
|
-
<a class="btn btn-ghost" href="index.html">Back to the series</a>
|
|
183
|
-
</div>
|
|
184
|
-
</section>
|
|
185
|
-
</main>
|
|
186
|
-
|
|
187
|
-
<footer class="footer">
|
|
188
|
-
<div class="wrap">
|
|
189
|
-
<p>Internal getting-started guide for proving MetaMask changes with recipes. Not official MetaMask product documentation.</p>
|
|
190
|
-
<p>Sample output moves between releases; trust your terminal over this page.</p>
|
|
191
|
-
</div>
|
|
192
|
-
</footer>
|
|
193
|
-
|
|
194
|
-
<script type="module" src="../assets/progress.mjs?v=4"></script>
|
|
195
|
-
</body>
|
|
196
|
-
</html>
|
package/site/tutorials/v5.html
DELETED
|
@@ -1,164 +0,0 @@
|
|
|
1
|
-
<!DOCTYPE html>
|
|
2
|
-
<html lang="en">
|
|
3
|
-
<head>
|
|
4
|
-
<meta charset="utf-8">
|
|
5
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
6
|
-
<title>V5 — PR QA review from one link</title>
|
|
7
|
-
<meta name="description" content="Give the review skill one pull request URL and get a per-criterion verdict table backed by on-device evidence.">
|
|
8
|
-
<link rel="icon" href="../assets/metamask-fox.svg" type="image/svg+xml">
|
|
9
|
-
<link rel="stylesheet" href="../assets/style.css?v=4">
|
|
10
|
-
</head>
|
|
11
|
-
<body data-progress-page="v5">
|
|
12
|
-
<a class="skip" href="#flow">Skip to the flow</a>
|
|
13
|
-
|
|
14
|
-
<header class="topbar">
|
|
15
|
-
<div class="wrap topbar-inner">
|
|
16
|
-
<a class="brand" href="../index.html">
|
|
17
|
-
<img class="brand-mark" src="../assets/metamask-fox.svg" alt="" width="22" height="22">
|
|
18
|
-
<span class="brand-name">recipes</span>
|
|
19
|
-
</a>
|
|
20
|
-
<nav class="nav" aria-label="Main">
|
|
21
|
-
<a class="nav-cta" href="../index.html#prompt">Quick start</a>
|
|
22
|
-
<a href="../how-it-works.html">How it works</a>
|
|
23
|
-
<a href="../perps.html">Team / Perps</a>
|
|
24
|
-
<a href="../cheatsheet.html">Cheatsheet</a>
|
|
25
|
-
<a href="../architecture.html">Architecture</a>
|
|
26
|
-
<a href="index.html" aria-current="page">Tutorials</a>
|
|
27
|
-
</nav>
|
|
28
|
-
</div>
|
|
29
|
-
</header>
|
|
30
|
-
|
|
31
|
-
<div class="progress-rail">
|
|
32
|
-
<div class="wrap progress-inner">
|
|
33
|
-
<div class="progress-track" role="progressbar" aria-label="Tutorial progress" aria-valuemin="0" aria-valuemax="100" aria-valuenow="0">
|
|
34
|
-
<div class="progress-fill"></div>
|
|
35
|
-
</div>
|
|
36
|
-
<span class="progress-label">0/4 steps</span>
|
|
37
|
-
<button type="button" class="progress-reset">Reset</button>
|
|
38
|
-
</div>
|
|
39
|
-
</div>
|
|
40
|
-
|
|
41
|
-
<main>
|
|
42
|
-
<section class="wrap hero" style="padding-bottom:1rem">
|
|
43
|
-
<span class="eyebrow">Tutorial V5 · 8–10 minutes</span>
|
|
44
|
-
<h1>PR QA review from one link</h1>
|
|
45
|
-
<p class="lede">
|
|
46
|
-
One pull request URL in, a per-criterion verdict table with evidence paths out. You confirm nothing
|
|
47
|
-
gets posted.
|
|
48
|
-
</p>
|
|
49
|
-
<div class="hero-meta">
|
|
50
|
-
<span class="badge soon">skill not merged yet</span>
|
|
51
|
-
<span>maturity: experimental</span>
|
|
52
|
-
</div>
|
|
53
|
-
</section>
|
|
54
|
-
|
|
55
|
-
<section class="wrap">
|
|
56
|
-
<div class="vid-thumb" style="border-radius:var(--radius);border:1px solid var(--line);margin-bottom:1.5rem">
|
|
57
|
-
<div style="text-align:center;padding:1rem">
|
|
58
|
-
<div class="vid-id" style="font-size:2.6rem">V5</div>
|
|
59
|
-
<p style="color:var(--text-dim);margin:.5rem 0 0;font-size:.92rem">Video recording in progress</p>
|
|
60
|
-
</div>
|
|
61
|
-
</div>
|
|
62
|
-
|
|
63
|
-
<div class="note">
|
|
64
|
-
<span class="note-title">Status: shipping, not yet merged</span>
|
|
65
|
-
<p>
|
|
66
|
-
The PR QA review skill is on a branch, not on the skills repo's main branch. This page describes
|
|
67
|
-
the flow as built so you know what is coming; there is no install command here yet, because one
|
|
68
|
-
that does not resolve is worse than none. <a href="v4.html">V4's</a> <code>recipe-cook</code> is
|
|
69
|
-
merged and available today — the review flow is one of its modes.
|
|
70
|
-
</p>
|
|
71
|
-
</div>
|
|
72
|
-
</section>
|
|
73
|
-
|
|
74
|
-
<section class="wrap">
|
|
75
|
-
<h2 id="flow">The flow</h2>
|
|
76
|
-
|
|
77
|
-
<ol class="steps">
|
|
78
|
-
<li class="step" data-step="url">
|
|
79
|
-
<div class="step-head">
|
|
80
|
-
<input type="checkbox" class="step-check" id="v5-url" aria-labelledby="t5-url">
|
|
81
|
-
<h3 class="step-title" id="t5-url">One URL, matched to your checkout</h3>
|
|
82
|
-
</div>
|
|
83
|
-
<p class="step-why">
|
|
84
|
-
Exactly one pull request from <code>metamask-mobile</code> or <code>metamask-extension</code>. A
|
|
85
|
-
URL for the other client is rejected before any checkout or runtime work — the review runs
|
|
86
|
-
against a real build, so it has to be the right one. Given no URL, it reads the current branch's
|
|
87
|
-
pull request.
|
|
88
|
-
</p>
|
|
89
|
-
</li>
|
|
90
|
-
|
|
91
|
-
<li class="step" data-step="ac">
|
|
92
|
-
<div class="step-head">
|
|
93
|
-
<input type="checkbox" class="step-check" id="v5-ac" aria-labelledby="t5-ac">
|
|
94
|
-
<h3 class="step-title" id="t5-ac">Criteria are extracted, then frozen</h3>
|
|
95
|
-
</div>
|
|
96
|
-
<p class="step-why">
|
|
97
|
-
Supply criteria and they are preserved verbatim, never merged with or overwritten by the pull
|
|
98
|
-
request body. Supply none and they are extracted from it. Either way they are frozen before any
|
|
99
|
-
runtime work starts, so the thing being proven cannot drift to match what turned out to be
|
|
100
|
-
provable.
|
|
101
|
-
</p>
|
|
102
|
-
<div class="note blue">
|
|
103
|
-
<span class="note-title">Missing criteria are a finding, not a gap to fill</span>
|
|
104
|
-
<p>
|
|
105
|
-
A pull request with nothing to extract produces a hygiene finding. The skill does not invent
|
|
106
|
-
criteria to have something to test.
|
|
107
|
-
</p>
|
|
108
|
-
</div>
|
|
109
|
-
</li>
|
|
110
|
-
|
|
111
|
-
<li class="step" data-step="run">
|
|
112
|
-
<div class="step-head">
|
|
113
|
-
<input type="checkbox" class="step-check" id="v5-run" aria-labelledby="t5-run">
|
|
114
|
-
<h3 class="step-title" id="t5-run">Proof runs on a real device</h3>
|
|
115
|
-
</div>
|
|
116
|
-
<p class="step-why">
|
|
117
|
-
The branch is checked out, the app launched under harness control, and each criterion exercised
|
|
118
|
-
against the running build. Evidence lands in a bundle you can open — the same structure
|
|
119
|
-
<a href="v2.html">V2</a> walks.
|
|
120
|
-
</p>
|
|
121
|
-
</li>
|
|
122
|
-
|
|
123
|
-
<li class="step" data-step="verdict">
|
|
124
|
-
<div class="step-head">
|
|
125
|
-
<input type="checkbox" class="step-check" id="v5-verdict" aria-labelledby="t5-verdict">
|
|
126
|
-
<h3 class="step-title" id="t5-verdict">A verdict table you post yourself</h3>
|
|
127
|
-
</div>
|
|
128
|
-
<p class="step-why">
|
|
129
|
-
Output is a QA report plus a proposed review reply, per criterion, with evidence paths.
|
|
130
|
-
</p>
|
|
131
|
-
<div class="doctrine">
|
|
132
|
-
<p>
|
|
133
|
-
<span class="k">It never posts.</span> The reply comes back for you to read, edit, and submit.
|
|
134
|
-
A machine-generated review that appears on a colleague's pull request without a human deciding
|
|
135
|
-
to send it is not review — it is noise with your name on it.
|
|
136
|
-
</p>
|
|
137
|
-
</div>
|
|
138
|
-
<p class="step-why">
|
|
139
|
-
The verdict that matters most is the honest one: a criterion the surface genuinely cannot
|
|
140
|
-
demonstrate is reported as needing a human, not quietly passed. A gesture-driven interaction with
|
|
141
|
-
no automatable surface is the standard example — it gets classified, not faked.
|
|
142
|
-
</p>
|
|
143
|
-
</li>
|
|
144
|
-
</ol>
|
|
145
|
-
|
|
146
|
-
<hr class="sep">
|
|
147
|
-
<div class="btn-row">
|
|
148
|
-
<a class="btn btn-primary" href="v6.html">Next: release validation →</a>
|
|
149
|
-
<a class="btn btn-ghost" href="../reviewers.html">How to read the evidence it produces</a>
|
|
150
|
-
<a class="btn btn-ghost" href="index.html">Back to the series</a>
|
|
151
|
-
</div>
|
|
152
|
-
</section>
|
|
153
|
-
</main>
|
|
154
|
-
|
|
155
|
-
<footer class="footer">
|
|
156
|
-
<div class="wrap">
|
|
157
|
-
<p>Internal getting-started guide for proving MetaMask changes with recipes. Not official MetaMask product documentation.</p>
|
|
158
|
-
<p>Sample output moves between releases; trust your terminal over this page.</p>
|
|
159
|
-
</div>
|
|
160
|
-
</footer>
|
|
161
|
-
|
|
162
|
-
<script type="module" src="../assets/progress.mjs?v=4"></script>
|
|
163
|
-
</body>
|
|
164
|
-
</html>
|