@deeeed/metamask-harness 0.47.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.
@@ -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=&lt;path&gt;</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 &lt;recipe&gt; --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>
@@ -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>
@@ -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>