@mutmutco/claude-plugin 4.6.25 → 4.6.26

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.6.25",
4
+ "version": "4.6.26",
5
5
  "mmiCompat": "4.x",
6
6
  "description": "MMI workflow skills and org gates delivery.",
7
7
  "author": {
package/cli/dist/main.cjs CHANGED
@@ -25243,6 +25243,9 @@ var CMD_RE = /`mmi-cli ((?:[a-z][a-z-]*)(?: [a-z][a-z-]*){0,3})/g;
25243
25243
  var RETIRED_RE = /\b(retired|historical|removed|deleted|gone|no longer|superseded|legacy)\b/i;
25244
25244
  var ROOT_DOCS = ["README.md", "architecture.md"];
25245
25245
  var SKIP_WALK = ["docs/decisions/"];
25246
+ function formatDocRefFinding(finding) {
25247
+ return `${finding.doc}:${finding.line} [${finding.kind}] ${finding.detail}${finding.suggest?.length ? ` (did you mean ${finding.suggest[0]}?)` : ""}`;
25248
+ }
25246
25249
  function refFirstSegment(ref) {
25247
25250
  return ref.replace(/^(\.\/)+/, "").split("/")[0];
25248
25251
  }
@@ -25663,21 +25666,14 @@ function defaultIsIgnored(root, relPaths, exec3 = import_node_child_process6.exe
25663
25666
  throw error;
25664
25667
  }
25665
25668
  }
25666
- function defaultTrackedFirstSegments(root, firstSegments, exec3 = import_node_child_process6.execFileSync) {
25667
- if (firstSegments.length === 0) return /* @__PURE__ */ new Set();
25669
+ function defaultTrackedFiles(root, firstSegments, exec3 = import_node_child_process6.execFileSync) {
25668
25670
  try {
25669
25671
  const out = exec3("git", ["ls-files", "-z", "--", ...firstSegments.map((s) => `:(literal)${s}`)], {
25670
25672
  cwd: root,
25671
25673
  encoding: "utf8",
25672
25674
  maxBuffer: CHECK_IGNORE_MAX_BUFFER
25673
25675
  });
25674
- const tracked = /* @__PURE__ */ new Set();
25675
- for (const path2 of out.split("\0")) {
25676
- if (path2) for (const segment of firstSegments) {
25677
- if (path2 === segment || path2.startsWith(`${segment}/`)) tracked.add(segment);
25678
- }
25679
- }
25680
- return tracked;
25676
+ return out.split("\0").filter(Boolean);
25681
25677
  } catch (error) {
25682
25678
  if (error?.status === 128) return null;
25683
25679
  if (error?.code === "ENOENT") return null;
@@ -25721,7 +25717,12 @@ function runDocRefs(root, deps = {}) {
25721
25717
  const exists = deps.exists ?? import_node_fs19.existsSync;
25722
25718
  const listDocs = deps.listDocs ?? defaultListDocs;
25723
25719
  const isIgnored = deps.isIgnored ?? ((paths) => defaultIsIgnored(root, paths));
25724
- const trackedFirstSegments = deps.trackedFirstSegments ?? ((segs) => defaultTrackedFirstSegments(root, segs));
25720
+ let inventory;
25721
+ const trackedFiles = () => inventory === void 0 ? inventory = deps.trackedFiles ? deps.trackedFiles() : deps.trackedFirstSegments ? null : defaultTrackedFiles(root, []) : inventory;
25722
+ const trackedFirstSegments = deps.trackedFirstSegments ?? ((segs) => {
25723
+ const files = trackedFiles();
25724
+ return files == null ? null : new Set(segs.filter((seg) => files.some((path2) => path2 === seg || path2.startsWith(`${seg}/`))));
25725
+ });
25725
25726
  const commandPaths = deps.commandPaths ?? null;
25726
25727
  const walked = listDocs(root);
25727
25728
  const ignoredDocs = walked.length ? isIgnored(walked) : /* @__PURE__ */ new Set();
@@ -25761,6 +25762,18 @@ ${sourceMessages}`;
25761
25762
  (override ? warnings : findings).push(...stale);
25762
25763
  if (!/^Seed-Runbook-Affected:[ \t]*\S.*$/m.test(allMessages)) findings.push(...seedStale);
25763
25764
  }
25765
+ for (const finding of findings) {
25766
+ if (finding.kind !== "missing-path") continue;
25767
+ const directory = import_node_path16.posix.dirname(import_node_path16.posix.normalize(finding.detail)).split("/");
25768
+ const distance = (path2) => {
25769
+ const parts = import_node_path16.posix.dirname(path2).split("/");
25770
+ let common = 0;
25771
+ while (common < directory.length && common < parts.length && directory[common] === parts[common]) common += 1;
25772
+ return directory.length + parts.length - 2 * common;
25773
+ };
25774
+ const suggest = [...new Set(trackedFiles() ?? [])].filter((path2) => import_node_path16.posix.basename(path2) === import_node_path16.posix.basename(finding.detail) && exists((0, import_node_path16.join)(root, path2))).sort((a, b) => distance(a) - distance(b) || a.localeCompare(b)).slice(0, 3);
25775
+ if (suggest.length) finding.suggest = suggest;
25776
+ }
25764
25777
  return {
25765
25778
  ok: findings.length === 0,
25766
25779
  findings,
@@ -28166,10 +28179,10 @@ var rollout_plan_default = {
28166
28179
  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)."
28167
28180
  },
28168
28181
  baseline: {
28169
- version: "4.6.25",
28170
- tag: "v4.6.25",
28171
- commit: "8ca2371aca5a",
28172
- npm: "@mutmutco/cli@4.6.25"
28182
+ version: "4.6.26",
28183
+ tag: "v4.6.26",
28184
+ commit: "bab0b3157d41",
28185
+ npm: "@mutmutco/cli@4.6.26"
28173
28186
  },
28174
28187
  exitCriterion: "fleet-n-of-n",
28175
28188
  hubOnlyShortcut: "forbidden",
@@ -28186,14 +28199,14 @@ var rollout_plan_default = {
28186
28199
  repo: "mutmutco/mmi-hub",
28187
28200
  role: "canary",
28188
28201
  schedule: "train",
28189
- v3Target: "v4.6.25"
28202
+ v3Target: "v4.6.26"
28190
28203
  }
28191
28204
  ],
28192
28205
  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.",
28193
28206
  rollback: {
28194
28207
  independent: true,
28195
- mechanism: "npm dist-tag latest -> 4.6.25 and redeploy the Hub Lambda from tag v4.6.25 (8ca2371aca5a); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
28196
- v3Target: "v4.6.25 (@mutmutco/cli@4.6.25, tag commit 8ca2371aca5a \u2014 last known-good release carrying the repo-index v4-only contract)"
28208
+ mechanism: "npm dist-tag latest -> 4.6.26 and redeploy the Hub Lambda from tag v4.6.26 (bab0b3157d41); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
28209
+ v3Target: "v4.6.26 (@mutmutco/cli@4.6.26, tag commit bab0b3157d41 \u2014 last known-good release carrying the repo-index v4-only contract)"
28197
28210
  }
28198
28211
  },
28199
28212
  {
@@ -72535,7 +72548,7 @@ function registerDeveloperCommands(program3) {
72535
72548
  if (!result.ok) process.exitCode = 1;
72536
72549
  return;
72537
72550
  }
72538
- for (const w of result.warnings) console.warn(`WARNING: ${w.doc}:${w.line} [${w.kind}] ${w.detail}`);
72551
+ for (const w of result.warnings) console.warn(`WARNING: ${formatDocRefFinding(w)}`);
72539
72552
  if (result.ok) {
72540
72553
  console.log(
72541
72554
  `doc refs: ${result.docCount} docs, every reference resolves` + (result.warnings.length ? ` (${result.warnings.length} warning(s))` : "")
@@ -72545,7 +72558,7 @@ function registerDeveloperCommands(program3) {
72545
72558
  const hasStale = result.findings.some((f) => f.kind === "runbook-section-stale" || f.kind === "seed-runbook-unreviewed");
72546
72559
  const hasRefs = result.findings.some((f) => f.kind !== "runbook-section-stale" && f.kind !== "seed-runbook-unreviewed");
72547
72560
  console.error(hasStale && !hasRefs ? "doc refs: stale runbook section(s)" : hasStale && hasRefs ? "doc refs: unresolved references and stale runbook section(s)" : "doc refs: unresolved references");
72548
- for (const f of result.findings) console.error(`- ${f.doc}:${f.line} [${f.kind}] ${f.detail}`);
72561
+ for (const f of result.findings) console.error(`- ${formatDocRefFinding(f)}`);
72549
72562
  process.exitCode = 1;
72550
72563
  } catch (e) {
72551
72564
  await failGraceful(e.message);
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.6.25",
3
+ "version": "4.6.26",
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.6.25",
3
+ "version": "4.6.26",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -114,7 +114,11 @@ requests like this should follow this structure, not prose guide."
114
114
  Before building visual A/B boards, use front-loaded **Impeccable v4.7.0** alongside **21st.dev MCP**
115
115
  (`https://21st.dev/api/mcp`; verbatim owner ruling: `"we don't need the mcp better design yet,
116
116
  impeccable and 21st is enough"`, dropping Better Design MCP) to study high-craft reference patterns,
117
- layout proportions, and interaction details. Always translate inspired patterns into zero-GPU
117
+ layout proportions, and interaction details. Actually query the 21st.dev MCP; in the Phase 0
118
+ handoff/A-B brief, report the queries issued and returned component/pattern names and IDs
119
+ (where provided). If unreachable, report the exact error; if empty, report "no results".
120
+ Neither case supports a 21st inspiration claim. Never describe patterns as 21st-inspired
121
+ without this query/result record. Always translate inspired patterns into zero-GPU
118
122
  `@mutmutco/mmwork-ds` tokens (`--card-blur: none`, `--card-tint-dark: 0%`, `--card-tint-light: 0%`,
119
123
  sleek translucent glass cards) and Atomic Design layers; never copy raw third-party CSS/HTML or
120
124
  GPU-heavy effects. `MM-Inspo` is strictly a customer/tenant module inside the MM-Work suite, never
@@ -285,7 +285,11 @@ requests like this should follow this structure, not prose guide."
285
285
  Before building visual A/B boards, use front-loaded **Impeccable v4.7.0** alongside **21st.dev MCP**
286
286
  (`https://21st.dev/api/mcp`; verbatim owner ruling: `"we don't need the mcp better design yet,
287
287
  impeccable and 21st is enough"`, dropping Better Design MCP) to study high-craft reference patterns,
288
- layout proportions, and interaction details. Always translate inspired patterns into zero-GPU
288
+ layout proportions, and interaction details. Actually query the 21st.dev MCP; in the Phase 0
289
+ handoff/A-B brief, report the queries issued and returned component/pattern names and IDs
290
+ (where provided). If unreachable, report the exact error; if empty, report "no results".
291
+ Neither case supports a 21st inspiration claim. Never describe patterns as 21st-inspired
292
+ without this query/result record. Always translate inspired patterns into zero-GPU
289
293
  `@mutmutco/mmwork-ds` tokens (`--card-blur: none`, `--card-tint-dark: 0%`, `--card-tint-light: 0%`,
290
294
  sleek translucent glass cards) and Atomic Design layers; never copy raw third-party CSS/HTML or
291
295
  GPU-heavy effects. `MM-Inspo` is strictly a customer/tenant module inside the MM-Work suite, never