@mutmutco/claude-plugin 4.5.215 → 4.5.217

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,7 +1,7 @@
1
1
  {
2
2
  "name": "mmi",
3
3
  "displayName": "MMI",
4
- "version": "4.5.215",
4
+ "version": "4.5.217",
5
5
  "mmiCompat": "4.x",
6
6
  "description": "MMI workflow skills and org gates delivery.",
7
7
  "author": {
package/cli/dist/main.cjs CHANGED
@@ -16148,6 +16148,32 @@ async function readRestPrSnapshotWithRetry(prNumber, repo, gh2 = defaultGhApi, o
16148
16148
  }
16149
16149
  }
16150
16150
  }
16151
+ var PR_LAND_PINNED_HEAD_READ_BUDGET_MS = 6e4;
16152
+ var PR_LAND_PINNED_HEAD_READ_404_ATTEMPTS = 3;
16153
+ async function readPrLandPinnedHeadSha(prNumber, repo, gh2 = defaultGhApi, options) {
16154
+ const delayMs = options?.delayMs ?? PR_SNAPSHOT_READ_DELAY_MS;
16155
+ const sleep2 = options?.sleep ?? ((ms) => new Promise((resolve7) => setTimeout(resolve7, ms)));
16156
+ let notFound = 0;
16157
+ for (; ; ) {
16158
+ const read = await readRestPrSnapshotWithRetry(prNumber, repo, gh2, {
16159
+ retryTransientUntilMs: Date.now() + PR_LAND_PINNED_HEAD_READ_BUDGET_MS,
16160
+ delayMs,
16161
+ sleep: sleep2,
16162
+ onTransientRetry: (error, attempt) => console.warn(`pr land: transient GitHub read (${error}) \u2014 retrying pinned-head read (attempt ${attempt}) within the ${PR_LAND_PINNED_HEAD_READ_BUDGET_MS / 1e3}s budget (#8957)`)
16163
+ });
16164
+ if (read.state === "ok") {
16165
+ const sha = read.snapshot.headSha;
16166
+ if (!sha) throw new Error(`pr land: could not read the head SHA of PR #${prNumber}`);
16167
+ return sha.toLowerCase();
16168
+ }
16169
+ notFound += 1;
16170
+ if (!/\b404\b/.test(read.error) || notFound >= PR_LAND_PINNED_HEAD_READ_404_ATTEMPTS) {
16171
+ throw new Error(`pr land: pinned-head read of PR #${prNumber} failed: ${read.error}`);
16172
+ }
16173
+ console.warn(`pr land: transient GitHub read (HTTP 404) \u2014 retrying pinned-head read (attempt ${notFound} of ${PR_LAND_PINNED_HEAD_READ_404_ATTEMPTS}) (#8957)`);
16174
+ await sleep2(delayMs);
16175
+ }
16176
+ }
16151
16177
  async function fetchRestClosingGuardPayload(prNumber, repo, gh2 = defaultGhApi) {
16152
16178
  const pr = JSON.parse(await gh2([`repos/${repo}/pulls/${prNumber}`]));
16153
16179
  const commits = await gh2([`repos/${repo}/pulls/${prNumber}/commits?per_page=100`]).then((out) => JSON.parse(out)).catch(() => void 0);
@@ -27030,10 +27056,10 @@ var rollout_plan_default = {
27030
27056
  note: "The v4.0.0 stamp happens at cut time (D6e #4463); until then the candidate is the origin/development head artifacts (built cli/dist + npm pack), identity proven by dist content hash (D6a)."
27031
27057
  },
27032
27058
  baseline: {
27033
- version: "4.5.215",
27034
- tag: "v4.5.215",
27035
- commit: "9e1bef2d6b0c",
27036
- npm: "@mutmutco/cli@4.5.215"
27059
+ version: "4.5.217",
27060
+ tag: "v4.5.217",
27061
+ commit: "6888824b66e5",
27062
+ npm: "@mutmutco/cli@4.5.217"
27037
27063
  },
27038
27064
  exitCriterion: "fleet-n-of-n",
27039
27065
  hubOnlyShortcut: "forbidden",
@@ -27050,14 +27076,14 @@ var rollout_plan_default = {
27050
27076
  repo: "mutmutco/mmi-hub",
27051
27077
  role: "canary",
27052
27078
  schedule: "train",
27053
- v3Target: "v4.5.215"
27079
+ v3Target: "v4.5.217"
27054
27080
  }
27055
27081
  ],
27056
27082
  rollbackTrigger: "Any red inside the post-contract soak window: `devops train gate` FAIL attributable to the v4 doors, Hub endpoint health probe failure, a pre-v4 client admitted instead of receiving actionable HTTP 426, or npm consumer install/doctor failure on the v4-only dist.",
27057
27083
  rollback: {
27058
27084
  independent: true,
27059
- mechanism: "npm dist-tag latest -> 4.5.215 and redeploy the Hub Lambda from tag v4.5.215 (9e1bef2d6b0c); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
27060
- v3Target: "v4.5.215 (@mutmutco/cli@4.5.215, tag commit 9e1bef2d6b0c \u2014 last known-good release carrying the repo-index v4-only contract)"
27085
+ mechanism: "npm dist-tag latest -> 4.5.217 and redeploy the Hub Lambda from tag v4.5.217 (6888824b66e5); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
27086
+ v3Target: "v4.5.217 (@mutmutco/cli@4.5.217, tag commit 6888824b66e5 \u2014 last known-good release carrying the repo-index v4-only contract)"
27061
27087
  }
27062
27088
  },
27063
27089
  {
@@ -56665,11 +56691,9 @@ ${list}`);
56665
56691
  if (landClosingGuardVerdict.message) console.warn(landClosingGuardVerdict.message);
56666
56692
  let mergeQueueEnabled = false;
56667
56693
  const result = await runPrLand(number, { repo: o.repo, requireTrain: o.requireTrain !== false, enqueueOnly: o.enqueueOnly, queueTimeoutMs, expectHead: o.expectHead }, {
56668
- readHeadSha: async (prNumber, repo) => {
56669
- const sha = (await fetchRestPrSnapshot(prNumber, repo)).headSha;
56670
- if (!sha) throw new Error(`pr land: could not read the head SHA of PR #${prNumber}`);
56671
- return sha.toLowerCase();
56672
- },
56694
+ // #8957: the pinned-head read re-reads a PR this run already read successfully — survive its
56695
+ // transient GitHub faults (and a lone 404) caller-scoped instead of dying on one blip.
56696
+ readHeadSha: (prNumber, repo) => readPrLandPinnedHeadSha(prNumber, repo),
56673
56697
  pollDelayMs: (attempt) => prLandPollDelayMs(attempt, inFlight),
56674
56698
  hasMergeQueue: async (repo, base) => mergeQueueEnabled = await hasPrMergeQueue(repo, base),
56675
56699
  readMergeQueue: readPrMergeQueue,
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.215",
3
+ "version": "4.5.217",
4
4
  "description": "MMI Future CLI — the org dev toolbox and shared cross-IDE engine for every registry-declared MMI coding surface.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/claude-plugin",
3
- "version": "4.5.215",
3
+ "version": "4.5.217",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -36,7 +36,7 @@ The bible for the MM open design system; every agent doing UI, design or MM Arti
36
36
  Four owner decisions (2026-10-25T15:35:52Z):
37
37
 
38
38
  1. **Doc vs. app kit — add a Document Design System too.** Keep the MM-Work Atomic Design System (`3a5c79df-5274-40ad-a1b5-a75e67a74dac`) for MM-Work and module app UI (and as the fallback for now), and add a dedicated Document/Editorial Design System Artifact in Live Docs for reports, checklists, decks and client documents made by Junior or agents.
39
- 2. **Where to save — local HTML for dev, Live Docs for shared.** Coding agents build and open local `.html` MM Artifacts for fast iteration — interactive owner A/B reviews with `node artifacts/review/review.mjs <folder> --open` on the live loopback HTTP review server (`http://127.0.0.1:<port>/` with `Send answers`), and offline HTML previews/exports or SSR pre-render verification (`impeccable detect --json`) with `node artifacts/review/review.mjs <folder> --standalone [<out.html>]` — and publish to Live Docs only for a shared deliverable, an A/B decision canvas or a Design System. Junior inside MM-Work saves directly to Live Docs.
39
+ 2. **Where to save — local HTML for dev, Live Docs for shared.** Coding agents build local `.html` MM Artifacts for fast iteration. Interactive owner A/B reviews use the live loopback HTTP review server (`http://127.0.0.1:<port>/` with `Send answers`); seats send the orchestrator only the review URL and issue number, keep the server running until the owner answers, and never open the owner's browser (#8987, relay wording). A kept-alive canvas review server must stay light (no dev/watch build pinning gigabytes); a seat whose canvas needs a heavy local server flags that to the orchestrator instead of holding the RAM silently, and stops it as soon as the owner has answered. Publish to Live Docs only for a shared deliverable, an A/B decision canvas or a Design System. Junior inside MM-Work saves directly to Live Docs.
40
40
  3. **Artifact shape — single HTML by default, Canvas for A/B.** A single self-contained HTML view for documents, checklists and single-screen work; a multi-board spatial Canvas only for A/B choices or `1440`/`1024`/`390` side-by-side comparisons.
41
41
  4. **Kit binding — Live Docs hosts kits; npm only for MM-Work.** Every Design System Artifact in Live Docs stores its tokens/CSS/components and `DESIGN.md` so any HTML artifact can bind to it (`kit: { id, version }`); only the MM-Work app design system is also exported as `@mutmutco/mmwork-ds`, because the MM-Work app and the 10 suite modules compile against it.
42
42
 
@@ -62,6 +62,10 @@ Autolearn watches for ad-hoc build/render/verify scripts under `tmp/`, empty `#r
62
62
  Settled owner ruling: present clear, distinct choices in the existing MM Artifact viewer, not a
63
63
  "shell over a shell". These are authoring and viewer requirements, not proof of installed capabilities.
64
64
 
65
+ **Canvases carry design choices only (Hub#8986, relay wording).** An A/B canvas asks how something
66
+ looks or works on screen. Approvals for keys, releases, deletions, data access or tooling never go on
67
+ a canvas: send them to the orchestrator, who asks the owner in plain words.
68
+
65
69
  1. **No "shell over a shell" — designer agents build only the alternatives, never their own A/B switcher.**
66
70
  The outer MM Artifact viewer (the local review shell and `CanvasStage` / `CompareView` in Live Docs)
67
71
  already IS the A/B selector shell: it renders the question prompt, Option A / Option B / Neither
@@ -112,11 +116,12 @@ requests like this should follow this structure, not prose guide."
112
116
  `distill`, `typeset`, `layout`, `colorize`, `polish`) to create 2–3 genuinely distinct visual
113
117
  designs that honor every constraint in the owner's brief: Option A, Option B and optionally
114
118
  Option C, each its own full-resolution `1440x900` live HTML board in one MM Artifact A/B canvas
115
- (Part 3 rules: content-only `Ctrl + Mousewheel` zoom, 1:1 or side-by-side live comparison). Open
116
- the verified canvas in the browser automatically with
117
- `node artifacts/review/review.mjs <folder> --open`, which serves it over the live loopback HTTP
118
- review server (`http://127.0.0.1:<port>/`) so the owner's `Send answers` posts straight back to
119
- `POST /answers`. Never open a `--standalone` `file://` export (`Download answers.json`) for an
119
+ (Part 3 rules: content-only `Ctrl + Mousewheel` zoom, 1:1 or side-by-side live comparison). Serve
120
+ the verified canvas on the live loopback HTTP review server without opening the owner's browser,
121
+ so the owner's `Send answers` posts straight back to `POST /answers`. Once review passes, send
122
+ the orchestrator only the review URL and issue number and keep the server running through Stage 2;
123
+ the orchestrator opens it on the owner's screen (#8987, relay wording). Never open a `--standalone`
124
+ `file://` export (`Download answers.json`) for an
120
125
  interactive owner A/B decision: `--standalone [<out.html>]` is only for offline previews/exports
121
126
  and SSR detector checks. Spawn a dedicated, fresh
122
127
  `designer` subagent for each distinct design task (item 3); never reuse a busy designer seat.
@@ -141,9 +146,9 @@ requests like this should follow this structure, not prose guide."
141
146
 
142
147
  ## Mandatory Impeccable workflow (owner, 2026-10-25; Hub#8814 / MM-Work#7629)
143
148
 
144
- UI and design verification uses `@mutmutco/mmwork-ds` (`mmwork-check-ui`) plus Impeccable on every design task: inspect the toolkit for applicable capabilities, work directly on the live app, and use our own MM Artifacts A/B canvas only when an owner A/B choice is needed. Functional journeys, where separately permitted, stay opt-in `workflow_dispatch`-only and never act as design checks.
149
+ UI and design verification uses `@mutmutco/mmwork-ds` (`mmwork-check-ui`) plus Impeccable on every design task: inspect the toolkit for applicable capabilities, work directly on the live app, and use our own MM Artifacts A/B canvas only when an owner design A/B choice is needed (approvals for keys, releases, deletions, data access or tooling go to the orchestrator in plain words, never on a canvas; Hub#8986). Functional journeys, where separately permitted, stay opt-in `workflow_dispatch`-only and never act as design checks.
145
150
 
146
- Front-load Impeccable before any UI or MM Artifact authoring: `impeccable context --target <path>`, `DESIGN.md` + the `design.json` sidecar in `.impeccable`, `.impeccable/config.json` (`hook.enabled: true`), `reference/craft-floor.md` + `reference/operate.md`, and `impeccable detect --json <target>`. Local/canvas MM Artifacts (`mm-artifact` v3 format) are checked with one command, `node artifacts/review/review.mjs <folder>`, which runs `check.mjs`, `check-ui.mjs` and `geometry.mjs`, pre-renders the board in `node:vm` (`ReactDOMServer.renderToStaticMarkup` into `#root`) and runs `impeccable detect --json` on that rendered HTML. Interactive owner A/B reviews use `node artifacts/review/review.mjs <folder> --open`, which serves the canvas over the live loopback HTTP review server (`http://127.0.0.1:<port>/`) where the owner presses `Send answers`; `--standalone [<out.html>]` is only for offline HTML previews/exports and SSR pre-render verification, never for an interactive owner decision.
151
+ Front-load Impeccable before any UI or MM Artifact authoring: `impeccable context --target <path>`, `DESIGN.md` + the `design.json` sidecar in `.impeccable`, `.impeccable/config.json` (`hook.enabled: true`), `reference/craft-floor.md` + `reference/operate.md`, and `impeccable detect --json <target>`. Local/canvas MM Artifacts (`mm-artifact` v3 format) are checked with one command, `node artifacts/review/review.mjs <folder>`, which runs `check.mjs`, `check-ui.mjs` and `geometry.mjs`, pre-renders the board in `node:vm` (`ReactDOMServer.renderToStaticMarkup` into `#root`) and runs `impeccable detect --json` on that rendered HTML. Interactive owner A/B reviews use the live loopback HTTP review server (`http://127.0.0.1:<port>/`), where the owner presses `Send answers`; seats never open the owner's browser. Once review passes, send the orchestrator only the review URL and issue number, and keep the server running until the owner answers. A kept-alive canvas review server must stay light (no dev/watch build pinning gigabytes); a seat whose canvas needs a heavy local server flags that to the orchestrator instead of holding the RAM silently, and stops it as soon as the owner has answered. The orchestrator opens it on the owner's screen (#8987, relay wording). `--standalone [<out.html>]` is only for offline HTML previews/exports and SSR pre-render verification, never for an interactive owner decision.
147
152
 
148
153
  Impeccable v4.7.0 (engine v0.1.16) workflow; CLI verbs and agent playbooks are distinct:
149
154
 
@@ -41,7 +41,10 @@ Owner ruling 2026-10-25 (#8814, #8816, MM-Work#7629; `docs/decisions/2026-10-06-
41
41
  the required `gate` holds fast deterministic checks only; UI/design uses `@mutmutco/mmwork-ds`
42
42
  (`mmwork-check-ui`) and the mandatory Impeccable skill/toolkit. Inspect all applicable toolkit
43
43
  capabilities for every design task. Work on the live app; use our own MM Artifacts A/B canvas only
44
- for owner choices, with live kit pieces and recorded choice ID / owner-decision reference.
44
+ for owner design choices, with live kit pieces and recorded choice ID / owner-decision reference.
45
+ A canvas is for how something looks or works on screen only (#8986, relay wording): approvals for
46
+ keys, releases, deletions, data access or tooling never go on a canvas; send them to the
47
+ orchestrator, who asks the owner in plain words.
45
48
  Functional browser journeys remain opt-in `workflow_dispatch`-only, never design checks or gates.
46
49
 
47
50
  ## The MM Open Design System Bible (#8837, #8839)
@@ -65,11 +68,17 @@ design work follows one harmonized **Front-Loaded Impeccable v4.7.0 + MM Artifac
65
68
  `node artifacts/review/review.mjs <folder>`. It runs `check.mjs`, `check-ui.mjs` and
66
69
  `geometry.mjs`, pre-renders the board in `node:vm` via `ReactDOMServer.renderToStaticMarkup` into
67
70
  `#root` and runs `impeccable detect --json` on that SSR-rendered HTML. Interactive owner A/B
68
- reviews use `node artifacts/review/review.mjs <folder> --open`: it serves the canvas over the live
69
- loopback HTTP review server (`http://127.0.0.1:<port>/`) and the owner's `Send answers` posts back
70
- to `POST /answers`. `--standalone [<out.html>]` is only for offline HTML previews/exports and SSR
71
- pre-render verification, never for an interactive owner decision.
72
- **Headless seat rule:** `--open` is review.mjs-only; never pass `--open` to `vite`.
71
+ reviews use the live loopback HTTP review server (`http://127.0.0.1:<port>/`), where the owner's
72
+ `Send answers` posts back to `POST /answers`; a seat must not open the owner's browser. An A/B is
73
+ shown as the live canvas link, never as prose (#8987, relay wording). Once the canvas passes review,
74
+ send the orchestrator only the review URL and issue number, and keep the server running until the
75
+ owner answers. A kept-alive canvas review server must stay light (no dev/watch build pinning
76
+ gigabytes); a seat whose canvas needs a heavy local server flags that to the orchestrator instead
77
+ of holding the RAM silently, and stops it as soon as the owner has answered. The orchestrator opens
78
+ it on the owner's screen. `--standalone [<out.html>]` is only
79
+ for offline HTML previews/exports and SSR pre-render verification, never for an interactive owner
80
+ decision.
81
+ **Headless seat rule:** `--open` is review.mjs-only; never pass `--open` to `vite`, and never use it from a seat to open the owner's browser for an A/B review.
73
82
  Vite parses its value as a URL path, so `vite --open false` opens the owner's real browser at `/false`;
74
83
  run dev/preview servers with `BROWSER=none` and no `--open` flag.
75
84
  - **Live Docs** (`Canlı belgeler` viewer) carry the living references, including the live
@@ -89,7 +98,7 @@ How the five pillars fit together (owner, 2026-10-25):
89
98
  Four owner decisions (2026-10-25T15:35:52Z):
90
99
 
91
100
  1. **Doc vs. app kit — add a Document Design System too.** Keep the MM-Work Atomic Design System (`3a5c79df-5274-40ad-a1b5-a75e67a74dac`) for MM-Work and module app UI (and as the fallback for now), and add a dedicated Document/Editorial Design System Artifact in Live Docs for reports, checklists, decks and client documents made by Junior or agents.
92
- 2. **Where to save — local HTML for dev, Live Docs for shared.** Coding agents build and open local `.html` MM Artifacts for fast iteration — interactive owner A/B reviews with `node artifacts/review/review.mjs <folder> --open` on the live loopback HTTP review server (`http://127.0.0.1:<port>/` with `Send answers`), and offline HTML previews/exports or SSR pre-render verification (`impeccable detect --json`) with `node artifacts/review/review.mjs <folder> --standalone [<out.html>]` — and publish to Live Docs only for a shared deliverable, an A/B decision canvas or a Design System. Junior inside MM-Work saves directly to Live Docs.
101
+ 2. **Where to save — local HTML for dev, Live Docs for shared.** Coding agents build local `.html` MM Artifacts for fast iteration. For interactive owner A/B reviews, serve the canvas on the live loopback HTTP review server (`http://127.0.0.1:<port>/` with `Send answers`) without opening the owner's browser; relay the URL and issue number to the orchestrator and keep the server running until the owner answers (#8987, relay wording). A kept-alive canvas review server must stay light (no dev/watch build pinning gigabytes); a seat whose canvas needs a heavy local server flags that to the orchestrator instead of holding the RAM silently, and stops it as soon as the owner has answered. Use `node artifacts/review/review.mjs <folder> --standalone [<out.html>]` for offline HTML previews/exports or SSR pre-render verification. Publish to Live Docs only for a shared deliverable, an A/B decision canvas or a Design System. Junior inside MM-Work saves directly to Live Docs.
93
102
  3. **Artifact shape — single HTML by default, Canvas for A/B.** A single self-contained HTML view for documents, checklists and single-screen work; a multi-board spatial Canvas only for A/B choices or `1440`/`1024`/`390` side-by-side comparisons.
94
103
  4. **Kit binding — Live Docs hosts kits; npm only for MM-Work.** Every Design System Artifact in Live Docs stores its tokens/CSS/components and `DESIGN.md` so any HTML artifact can bind to it (`kit: { id, version }`); only the MM-Work app design system is also exported as `@mutmutco/mmwork-ds`, because the MM-Work app and the 10 suite modules compile against it.
95
104
 
@@ -211,6 +220,10 @@ agent, and is that improvement filed?
211
220
  Settled owner ruling: present clear, distinct choices in the existing MM Artifact viewer, not a
212
221
  "shell over a shell". These are authoring and viewer requirements, not proof of installed capabilities.
213
222
 
223
+ **Canvases carry design choices only (#8986, relay wording).** An A/B canvas asks how something
224
+ looks or works on screen. Approvals for keys, releases, deletions, data access or tooling never go on
225
+ a canvas: send them to the orchestrator, who asks the owner in plain words.
226
+
214
227
  1. **No "shell over a shell" — designer agents build only the alternatives, never their own A/B switcher.**
215
228
  The outer MM Artifact viewer (the local review shell and `CanvasStage` / `CompareView` in Live Docs)
216
229
  already IS the A/B selector shell: it renders the question prompt, Option A / Option B / Neither
@@ -261,11 +274,12 @@ requests like this should follow this structure, not prose guide."
261
274
  `distill`, `typeset`, `layout`, `colorize`, `polish`) to create 2–3 genuinely distinct visual
262
275
  designs that honor every constraint in the owner's brief: Option A, Option B and optionally
263
276
  Option C, each its own full-resolution `1440x900` live HTML board in one MM Artifact A/B canvas
264
- (Part 3 rules: content-only `Ctrl + Mousewheel` zoom, 1:1 or side-by-side live comparison). Open
265
- the verified canvas in the browser automatically with
266
- `node artifacts/review/review.mjs <folder> --open`, which serves it over the live loopback HTTP
267
- review server (`http://127.0.0.1:<port>/`) so the owner's `Send answers` posts straight back to
268
- `POST /answers`. Never open a `--standalone` `file://` export (`Download answers.json`) for an
277
+ (Part 3 rules: content-only `Ctrl + Mousewheel` zoom, 1:1 or side-by-side live comparison). Serve
278
+ the verified canvas on the live loopback HTTP review server without opening a browser from the
279
+ seat, so the owner's `Send answers` posts straight back to `POST /answers`. Once review passes,
280
+ send the orchestrator only the review URL and issue number, and keep the server running through
281
+ Stage 2; the orchestrator opens it on the owner's screen (#8987, relay wording). Never open a
282
+ `--standalone` `file://` export (`Download answers.json`) for an
269
283
  interactive owner A/B decision: `--standalone [<out.html>]` is only for offline previews/exports
270
284
  and SSR detector checks. Spawn a dedicated, fresh
271
285
  `designer` subagent for each distinct design task (item 3); never reuse a busy designer seat.