@mutmutco/claude-plugin 4.5.216 → 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.216",
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.216",
27034
- tag: "v4.5.216",
27035
- commit: "63b159de6f90",
27036
- npm: "@mutmutco/cli@4.5.216"
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.216"
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.216 and redeploy the Hub Lambda from tag v4.5.216 (63b159de6f90); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
27060
- v3Target: "v4.5.216 (@mutmutco/cli@4.5.216, tag commit 63b159de6f90 \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.216",
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.216",
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 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). 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
 
@@ -148,7 +148,7 @@ requests like this should follow this structure, not prose guide."
148
148
 
149
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.
150
150
 
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. 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.
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.
152
152
 
153
153
  Impeccable v4.7.0 (engine v0.1.16) workflow; CLI verbs and agent playbooks are distinct:
154
154
 
@@ -72,7 +72,10 @@ design work follows one harmonized **Front-Loaded Impeccable v4.7.0 + MM Artifac
72
72
  `Send answers` posts back to `POST /answers`; a seat must not open the owner's browser. An A/B is
73
73
  shown as the live canvas link, never as prose (#8987, relay wording). Once the canvas passes review,
74
74
  send the orchestrator only the review URL and issue number, and keep the server running until the
75
- owner answers. The orchestrator opens it on the owner's screen. `--standalone [<out.html>]` is only
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
76
79
  for offline HTML previews/exports and SSR pre-render verification, never for an interactive owner
77
80
  decision.
78
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.
@@ -95,7 +98,7 @@ How the five pillars fit together (owner, 2026-10-25):
95
98
  Four owner decisions (2026-10-25T15:35:52Z):
96
99
 
97
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.
98
- 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). 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.
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.
99
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.
100
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.
101
104