@deeeed/metamask-harness 0.34.4 → 0.35.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.
@@ -110,8 +110,10 @@ main { padding-bottom: 6rem; }
110
110
  .topbar-inner {
111
111
  display: flex;
112
112
  align-items: center;
113
- gap: 1.5rem;
114
- height: 60px;
113
+ flex-wrap: wrap;
114
+ gap: 0.5rem 1.5rem;
115
+ min-height: 60px;
116
+ padding: 0.5rem 0;
115
117
  }
116
118
 
117
119
  .brand {
@@ -125,31 +127,24 @@ main { padding-bottom: 6rem; }
125
127
  }
126
128
  .brand:hover { text-decoration: none; }
127
129
 
128
- /* Brand-adjacent mark: a geometric diamond, not a product logo. */
129
- .brand-mark {
130
- width: 20px;
131
- height: 20px;
132
- flex: none;
133
- border-radius: 5px;
134
- background: linear-gradient(145deg, var(--accent) 0%, var(--accent-deep) 100%);
135
- transform: rotate(45deg);
136
- box-shadow: 0 0 0 1px rgba(246, 133, 27, 0.3), 0 3px 12px rgba(246, 133, 27, 0.22);
137
- }
130
+ .brand-mark { width: 22px; height: 22px; flex: none; display: block; }
138
131
 
139
132
  .brand-name { font-family: var(--mono); font-size: 0.95rem; }
140
133
 
134
+ /* Six items fit a laptop on one line; below that they wrap onto a second row
135
+ rather than scrolling a label out of sight. */
141
136
  .nav {
142
137
  display: flex;
143
138
  gap: 0.3rem;
144
139
  margin-left: auto;
145
140
  min-width: 0;
146
- overflow-x: auto;
147
- flex-wrap: nowrap;
148
- scrollbar-width: thin;
141
+ flex-wrap: wrap;
142
+ justify-content: flex-end;
149
143
  }
150
144
 
151
145
  .nav a {
152
146
  flex: none;
147
+ white-space: nowrap;
153
148
  color: var(--text-dim);
154
149
  font-size: 0.885rem;
155
150
  font-weight: 500;
@@ -272,16 +267,7 @@ main { padding-bottom: 6rem; }
272
267
  text-align: center;
273
268
  }
274
269
 
275
- .lobby-mark {
276
- display: block;
277
- width: 26px;
278
- height: 26px;
279
- margin: 0 auto 2rem;
280
- border-radius: 7px;
281
- background: linear-gradient(145deg, var(--accent) 0%, var(--accent-deep) 100%);
282
- transform: rotate(45deg);
283
- box-shadow: 0 0 0 1px rgba(246, 133, 27, 0.3), 0 4px 18px rgba(246, 133, 27, 0.25);
284
- }
270
+ .lobby-mark { display: block; width: 52px; height: 52px; margin: 0 auto 1.6rem; }
285
271
 
286
272
  .lobby h1 {
287
273
  font-size: clamp(2rem, 4.6vw, 2.85rem);
@@ -352,17 +338,19 @@ main { padding-bottom: 6rem; }
352
338
  .qs-title {
353
339
  display: flex;
354
340
  align-items: center;
355
- gap: 0.65rem;
356
341
  font-size: 1.16rem;
357
342
  font-weight: 640;
358
343
  margin: 0 0 0.35rem;
359
344
  }
360
345
 
346
+ /* The margin rather than a flex gap: the badge stays separated from the title
347
+ even when the flex layout does not apply. */
361
348
  .qs-num {
362
349
  flex: none;
363
- width: 1.6rem;
364
- height: 1.6rem;
365
- display: grid;
350
+ width: 1.7rem;
351
+ height: 1.7rem;
352
+ margin-right: 0.75rem;
353
+ display: inline-grid;
366
354
  place-items: center;
367
355
  border-radius: 50%;
368
356
  background: var(--accent-soft);
@@ -370,6 +358,7 @@ main { padding-bottom: 6rem; }
370
358
  color: var(--accent);
371
359
  font-family: var(--mono);
372
360
  font-size: 0.8rem;
361
+ line-height: 1;
373
362
  }
374
363
 
375
364
  .qs-why { color: var(--text-dim); font-size: 0.95rem; margin-bottom: 0.9rem; }
@@ -960,6 +949,76 @@ tr[hidden], .filter-hidden { display: none !important; }
960
949
  .verdict.pass { color: var(--pass); }
961
950
  .verdict.fail { color: var(--fail); }
962
951
 
952
+ /* ---------- dependency map ----------
953
+ A column of nodes with the edge label between them, so the direction reads
954
+ top to bottom without a diagram library. */
955
+
956
+ .map { margin: 1.5rem 0 2.5rem; }
957
+
958
+ .node {
959
+ background: linear-gradient(180deg, var(--surface) 0%, var(--bg-raised) 100%);
960
+ border: 1px solid var(--line);
961
+ border-radius: var(--radius);
962
+ padding: 1.25rem 1.4rem;
963
+ }
964
+ .node:hover { border-color: var(--accent-line); }
965
+
966
+ /* The one you install. */
967
+ .node-key { border-color: var(--accent-line); }
968
+
969
+ .node-tag {
970
+ display: block;
971
+ font-family: var(--mono);
972
+ font-size: 0.72rem;
973
+ letter-spacing: 0.08em;
974
+ text-transform: uppercase;
975
+ color: var(--text-faint);
976
+ margin-bottom: 0.35rem;
977
+ }
978
+
979
+ .node-name { font-size: 1.12rem; font-weight: 640; margin: 0 0 0.4rem; }
980
+ .node-what { font-size: 0.94rem; color: var(--text-dim); margin-bottom: 0.7rem; }
981
+
982
+ .node-list {
983
+ list-style: none;
984
+ margin: 0 0 0.8rem;
985
+ padding: 0;
986
+ display: flex;
987
+ flex-wrap: wrap;
988
+ gap: 0.35rem 0.5rem;
989
+ font-size: 0.86rem;
990
+ }
991
+ .node-list li { color: var(--text-dim); }
992
+
993
+ .node-url {
994
+ display: block;
995
+ font-family: var(--mono);
996
+ font-size: 0.8rem;
997
+ word-break: break-all;
998
+ margin-bottom: 0.15rem;
999
+ }
1000
+
1001
+ .node .badge { margin: 0.55rem 0.4rem 0 0; display: inline-block; }
1002
+ .node-more { display: block; font-size: 0.88rem; margin-top: 0.6rem; }
1003
+
1004
+ /* Edge labels carry the verb; the arrow alone would not say what flows. */
1005
+ .map-edge {
1006
+ margin: 0.7rem 0;
1007
+ text-align: center;
1008
+ font-family: var(--mono);
1009
+ font-size: 0.8rem;
1010
+ color: var(--text-faint);
1011
+ }
1012
+
1013
+ .map-split { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; }
1014
+ .map-row { display: grid; grid-template-columns: repeat(2, minmax(0, 1fr)); gap: 1rem; align-items: start; }
1015
+
1016
+ @media (max-width: 780px) {
1017
+ .map-split { grid-template-columns: 1fr; }
1018
+ .map-split .map-edge:last-child { margin-top: 0; }
1019
+ .map-row { grid-template-columns: 1fr; }
1020
+ }
1021
+
963
1022
  /* ---------- misc ---------- */
964
1023
 
965
1024
  .btn-row { display: flex; flex-wrap: wrap; gap: 0.7rem; margin-top: 1.8rem; }
@@ -5,7 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>Cheatsheet — mm-harness</title>
7
7
  <meta name="description" content="Every mm-harness command worth knowing, filterable by platform, with copy buttons.">
8
- <link rel="stylesheet" href="assets/style.css">
8
+ <link rel="icon" href="assets/metamask-fox.svg" type="image/svg+xml">
9
+ <link rel="stylesheet" href="assets/style.css?v=4">
9
10
  </head>
10
11
  <body data-progress-page="cheatsheet">
11
12
  <a class="skip" href="#daily">Skip to the commands</a>
@@ -13,18 +14,16 @@
13
14
  <header class="topbar">
14
15
  <div class="wrap-wide topbar-inner">
15
16
  <a class="brand" href="index.html">
16
- <span class="brand-mark" aria-hidden="true"></span>
17
+ <img class="brand-mark" src="assets/metamask-fox.svg" alt="" width="22" height="22">
17
18
  <span class="brand-name">recipes</span>
18
19
  </a>
19
20
  <nav class="nav" aria-label="Main">
20
21
  <a class="nav-cta" href="index.html#prompt">Quick start</a>
21
22
  <a href="how-it-works.html">How it works</a>
22
- <a href="recipes.html">Recipe anatomy</a>
23
- <a href="perps.html">Perps</a>
23
+ <a href="perps.html">Team / Perps</a>
24
24
  <a href="cheatsheet.html" aria-current="page">Cheatsheet</a>
25
25
  <a href="architecture.html">Architecture</a>
26
26
  <a href="tutorials/index.html">Tutorials</a>
27
- <a href="reviewers.html">For Reviewers</a>
28
27
  </nav>
29
28
  </div>
30
29
  </header>
@@ -303,6 +302,6 @@
303
302
  </div>
304
303
  </footer>
305
304
 
306
- <script type="module" src="assets/progress.mjs"></script>
305
+ <script type="module" src="assets/progress.mjs?v=4"></script>
307
306
  </body>
308
307
  </html>
@@ -0,0 +1,162 @@
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>Ecosystem — which repo is which</title>
7
+ <meta name="description" content="A dependency map of the repositories and packages behind the recipe workflow: skills, mm-harness, the spec and engine, team recipe libraries, the product repos, and the learnings inbox.">
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>
12
+ <a class="skip" href="#map">Skip to the map</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="tutorials/index.html">Tutorials</a>
27
+ </nav>
28
+ </div>
29
+ </header>
30
+
31
+ <main>
32
+ <section class="wrap hero" style="padding-bottom:0.5rem">
33
+ <span class="eyebrow">Repositories</span>
34
+ <h1>Which repo is which</h1>
35
+ <p class="lede">
36
+ Six things sit behind a recipe run, and it is not obvious from the outside which one you install,
37
+ which one you contribute to, and which one is just a dependency. This is the dependency map — not
38
+ a pitch.
39
+ </p>
40
+ </section>
41
+
42
+ <section class="wrap-wide">
43
+ <div class="map" id="map">
44
+
45
+ <article class="node">
46
+ <span class="node-tag">You invoke this</span>
47
+ <h2 class="node-name">Skills</h2>
48
+ <p class="node-what">
49
+ The workflows — <code>mms-recipe-cook</code>, <code>mms-recipe-pr-qa-review</code> and the rest.
50
+ They call <code>mm-harness</code>; they are not a dependency of it.
51
+ </p>
52
+ <a class="node-url" href="https://github.com/Consensys/skills">github.com/Consensys/skills</a>
53
+ <span class="badge">internal</span>
54
+ </article>
55
+
56
+ <p class="map-edge">calls ↓</p>
57
+
58
+ <article class="node node-key">
59
+ <span class="node-tag">The runner</span>
60
+ <h2 class="node-name">mm-harness</h2>
61
+ <p class="node-what">
62
+ Launch, typed actions, graph execution, artifacts. Installed from npm as
63
+ <code>@deeeed/metamask-harness</code>; the MetaMask-specific layer lives here.
64
+ </p>
65
+ <a class="node-url" href="https://github.com/MetaMask/experimental-metamask-harness">github.com/MetaMask/experimental-metamask-harness</a>
66
+ <span class="badge">private</span>
67
+ <span class="badge">npm @deeeed/metamask-harness</span>
68
+ </article>
69
+
70
+ <div class="map-split">
71
+ <p class="map-edge">depends on ↓</p>
72
+ <p class="map-edge">runs recipes from ↓</p>
73
+ </div>
74
+
75
+ <div class="map-row">
76
+ <article class="node">
77
+ <span class="node-tag">Spec &amp; engine</span>
78
+ <h2 class="node-name">farmslot packages</h2>
79
+ <p class="node-what">
80
+ The recipe protocol and the execution engine, as pinned by mm-harness.
81
+ <code>recipe-harness</code> depends on <code>protocol</code>.
82
+ </p>
83
+ <ul class="node-list">
84
+ <li><code>@farmslot/protocol</code> 0.18.0</li>
85
+ <li><code>@farmslot/recipe-harness</code> 0.14.0</li>
86
+ <li><code>@farmslot/agent-runtime</code> 0.7.0</li>
87
+ <li><code>@farmslot/handoff</code> 0.3.1</li>
88
+ <li><code>@farmslot/expo-recipe</code> 0.7.1</li>
89
+ </ul>
90
+ <span class="badge">npm</span>
91
+ </article>
92
+
93
+ <article class="node">
94
+ <span class="node-tag">Your customization</span>
95
+ <h2 class="node-name">Recipe libraries</h2>
96
+ <p class="node-what">
97
+ One per team, pointed at with <code>RECIPE_LIBRARY_PATH</code>, resolved ahead of the small
98
+ bundled MetaMask library. Perps is the worked example.
99
+ </p>
100
+ <a class="node-url" href="https://github.com/MetaMask/experimental-metamask-recipe-perps">github.com/MetaMask/experimental-metamask-recipe-perps</a>
101
+ <span class="badge">private</span>
102
+ <a class="node-more" href="perps.html">How to point at one →</a>
103
+ </article>
104
+ </div>
105
+
106
+ <p class="map-edge">drives ↓</p>
107
+
108
+ <article class="node">
109
+ <span class="node-tag">What gets proved</span>
110
+ <h2 class="node-name">Product repos</h2>
111
+ <p class="node-what">
112
+ The real builds a recipe drives. Each also installs the skills — every one of the three has a
113
+ <code>skills</code> script running <code>metamask-skills sync</code>.
114
+ </p>
115
+ <a class="node-url" href="https://github.com/MetaMask/metamask-extension">github.com/MetaMask/metamask-extension</a>
116
+ <a class="node-url" href="https://github.com/MetaMask/metamask-mobile">github.com/MetaMask/metamask-mobile</a>
117
+ <a class="node-url" href="https://github.com/MetaMask/core">github.com/MetaMask/core</a>
118
+ <span class="badge">public</span>
119
+ </article>
120
+
121
+ <p class="map-edge">promoted learnings, via <code>@farmslot/handoff</code> ↓</p>
122
+
123
+ <article class="node">
124
+ <span class="node-tag">Opt-in output</span>
125
+ <h2 class="node-name">Learnings inbox</h2>
126
+ <p class="node-what">
127
+ Scrubbed learning packages staged from finished runs, for later review. A terminal mark stages
128
+ locally; sharing centrally is a separate, explicit step.
129
+ </p>
130
+ <a class="node-url" href="https://github.com/MetaMask/experimental-distributed-learnings">github.com/MetaMask/experimental-distributed-learnings</a>
131
+ <span class="badge">private</span>
132
+ </article>
133
+
134
+ </div>
135
+ </section>
136
+
137
+ <section class="wrap">
138
+ <div class="note">
139
+ <span class="note-title">Standing disclosure</span>
140
+ <p>
141
+ The farmslot <strong>control plane</strong> is experimental and sole-maintained. What is adopted
142
+ here is the spec and the engine — the npm packages above — not the control plane. Weigh that
143
+ before depending on anything beyond them.
144
+ </p>
145
+ </div>
146
+
147
+ <div class="btn-row">
148
+ <a class="btn btn-primary" href="perps.html">Customize it for your team →</a>
149
+ <a class="btn btn-ghost" href="architecture.html">How the layers fit</a>
150
+ </div>
151
+ </section>
152
+ </main>
153
+
154
+ <footer class="footer">
155
+ <div class="wrap">
156
+ <p>Internal getting-started guide for proving MetaMask changes with recipes. Not official MetaMask product documentation.</p>
157
+ <p>Versions are the ones mm-harness pins today; check <code>package.json</code> over this page.</p>
158
+ </div>
159
+ </footer>
160
+ <script type="module" src="assets/progress.mjs?v=4"></script>
161
+ </body>
162
+ </html>
@@ -5,7 +5,8 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>How it works — proving a change with a recipe</title>
7
7
  <meta name="description" content="How a recipe proves a change on a real MetaMask build, checks itself before handoff, and stays behind as a regression guard. The full walkthrough, step by step.">
8
- <link rel="stylesheet" href="assets/style.css">
8
+ <link rel="icon" href="assets/metamask-fox.svg" type="image/svg+xml">
9
+ <link rel="stylesheet" href="assets/style.css?v=4">
9
10
  </head>
10
11
  <body data-progress-page="start">
11
12
  <a class="skip" href="#steps">Skip to the walkthrough</a>
@@ -13,18 +14,16 @@
13
14
  <header class="topbar">
14
15
  <div class="wrap topbar-inner">
15
16
  <a class="brand" href="index.html">
16
- <span class="brand-mark" aria-hidden="true"></span>
17
+ <img class="brand-mark" src="assets/metamask-fox.svg" alt="" width="22" height="22">
17
18
  <span class="brand-name">recipes</span>
18
19
  </a>
19
20
  <nav class="nav" aria-label="Main">
20
21
  <a class="nav-cta" href="index.html#prompt">Quick start</a>
21
22
  <a href="how-it-works.html" aria-current="page">How it works</a>
22
- <a href="recipes.html">Recipe anatomy</a>
23
- <a href="perps.html">Perps</a>
23
+ <a href="perps.html">Team / Perps</a>
24
24
  <a href="cheatsheet.html">Cheatsheet</a>
25
25
  <a href="architecture.html">Architecture</a>
26
26
  <a href="tutorials/index.html">Tutorials</a>
27
- <a href="reviewers.html">For Reviewers</a>
28
27
  </nav>
29
28
  </div>
30
29
  </header>
@@ -55,7 +54,7 @@
55
54
  <span>progress saves in this browser</span>
56
55
  </div>
57
56
  <p style="margin-top:.9rem;opacity:.7;font-size:.9rem;max-width:60ch">
58
- A proposal for how agents can code at MetaMask — offered for teams to try, not an official standard.
57
+ A proposal for how agents can code at MetaMask — offered for teams to try.
59
58
  </p>
60
59
  </section>
61
60
 
@@ -663,9 +662,9 @@ artifacts (6):
663
662
  <h2>Next</h2>
664
663
  <div class="grid grid-3">
665
664
  <div class="card">
666
- <h3>What a recipe is</h3>
665
+ <h3>Recipe anatomy</h3>
667
666
  <p>The graph, the intents, the assertions, and the test of whether yours is worth keeping.</p>
668
- <p><a href="recipes.html">Recipes →</a></p>
667
+ <p><a href="recipes.html">Read the anatomy →</a></p>
669
668
  </div>
670
669
  <div class="card">
671
670
  <h3>Your team's library</h3>
@@ -688,6 +687,6 @@ artifacts (6):
688
687
  </div>
689
688
  </footer>
690
689
 
691
- <script type="module" src="assets/progress.mjs"></script>
690
+ <script type="module" src="assets/progress.mjs?v=4"></script>
692
691
  </body>
693
692
  </html>
package/site/index.html CHANGED
@@ -5,14 +5,15 @@
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1">
6
6
  <title>Recipes — build with proof, not hope</title>
7
7
  <meta name="description" content="A skill drives the change. The recipe proves it on a real MetaMask build as it is written, self-checked in the same context and kept as a regression guard.">
8
- <link rel="stylesheet" href="assets/style.css">
8
+ <link rel="icon" href="assets/metamask-fox.svg" type="image/svg+xml">
9
+ <link rel="stylesheet" href="assets/style.css?v=4">
9
10
  </head>
10
11
  <body>
11
12
  <a class="skip" href="#prompt">Skip to the prompt</a>
12
13
 
13
14
  <main class="lobby">
14
15
  <div class="lobby-inner">
15
- <span class="lobby-mark" aria-hidden="true"></span>
16
+ <img class="lobby-mark" src="assets/metamask-fox.svg" alt="" width="52" height="52">
16
17
  <span class="eyebrow">Proven as it's built</span>
17
18
 
18
19
  <h1>Build agentically, with confidence.</h1>
@@ -64,14 +65,18 @@ instead of improvising.
64
65
  `--preflight-mode` is an internal adapter flag, not a public launch flag.
65
66
  6. On Extension run `mm-harness fixtures set`. On Mobile include the same
66
67
  `--device &lt;UUID-or-serial&gt;` used for launch. Wait for it to succeed.
67
- 7. Install the skills — they are how the work actually gets driven. The
68
- installer reads from LOCAL CLONES, so clone the sources first and add both
69
- exports to my shell rc:
68
+ 7. Install the skills — they are how the work actually gets driven. First
69
+ inspect `METAMASK_SKILLS_DIR` and `CONSENSYS_SKILLS_DIR`, then check the
70
+ expected local layout below. Reuse every valid existing clone. For each
71
+ missing source, show me the proposed path and ask before cloning:
70
72
  `git clone https://github.com/MetaMask/skills.git ~/dev/metamask/skills`
71
- `export METAMASK_SKILLS_DIR=~/dev/metamask/skills`
72
- Then the internal overlay, which needs access to the Consensys org:
73
73
  `git clone git@github.com:Consensys/skills.git ~/dev/Consensys/skills`
74
+ The internal overlay needs access to the Consensys org. Export the paths in
75
+ the current shell for setup:
76
+ `export METAMASK_SKILLS_DIR=~/dev/metamask/skills`
74
77
  `export CONSENSYS_SKILLS_DIR=~/dev/Consensys/skills`
78
+ Never edit `.zshrc`, `.bashrc`, or another shell startup file unless I
79
+ explicitly consent; ask separately if I want these exports persisted.
75
80
  If that clone fails, tell me — I may not have access, and the next step
76
81
  depends on it. Then, from inside the checkout:
77
82
  `yarn metamask-skills list --maturity experimental` everything installable
@@ -107,7 +112,7 @@ exact error.</code></pre></div>
107
112
  </p>
108
113
 
109
114
  <div class="tabs">
110
- <div class="tablist" role="tablist" aria-label="Choose what to do">
115
+ <div class="tablist" role="tablist" aria-label="Choose what to do" hidden>
111
116
  <button type="button" role="tab" id="tab-review" class="tab" aria-controls="panel-review" aria-selected="true" tabindex="0">Review a PR</button>
112
117
  <button type="button" role="tab" id="tab-fix" class="tab" aria-controls="panel-fix" aria-selected="false" tabindex="-1">Fix a bug</button>
113
118
  <button type="button" role="tab" id="tab-build" class="tab" aria-controls="panel-build" aria-selected="false" tabindex="-1">Build a feature</button>
@@ -128,7 +133,7 @@ per-AC verdict table, the overall verdict, and the artifact paths. Do not post
128
133
  anything on the PR.</code></pre></div>
129
134
  </div>
130
135
 
131
- <div class="qs-panel" role="tabpanel" id="panel-fix" aria-labelledby="tab-fix" tabindex="0" hidden>
136
+ <div class="qs-panel" role="tabpanel" id="panel-fix" aria-labelledby="tab-fix" tabindex="0">
132
137
  <p class="qs-panel-why">
133
138
  <code>mms-recipe-cook</code>, classified as <code>fix-bug</code>. It lists the
134
139
  compatible checklist templates and stops for your pick, then works on a local task
@@ -144,7 +149,7 @@ Then fix it and re-run the same recipe until it passes. Show me the recipe
144
149
  status, the per-node results, and the artifact paths.</code></pre></div>
145
150
  </div>
146
151
 
147
- <div class="qs-panel" role="tabpanel" id="panel-build" aria-labelledby="tab-build" tabindex="0" hidden>
152
+ <div class="qs-panel" role="tabpanel" id="panel-build" aria-labelledby="tab-build" tabindex="0">
148
153
  <p class="qs-panel-why">
149
154
  <code>mms-recipe-cook</code>, classified as <code>dev</code>. Same flow: it lists the
150
155
  compatible templates, stops for your pick, and keeps the diff uncommitted until you
@@ -169,11 +174,11 @@ results, and the artifact paths.</code></pre></div>
169
174
  </div>
170
175
 
171
176
  <p class="lobby-fine">
172
- A proposal for how agents can code at MetaMask — offered for teams to try, not an official standard.
177
+ A proposal for how agents can code at MetaMask — offered for teams to try.
173
178
  </p>
174
179
  </div>
175
180
  </main>
176
181
 
177
- <script type="module" src="assets/progress.mjs"></script>
182
+ <script type="module" src="assets/progress.mjs?v=4"></script>
178
183
  </body>
179
184
  </html>