@mutmutco/cli 4.5.165 → 4.5.166

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.
package/dist/main.cjs CHANGED
@@ -16624,6 +16624,15 @@ function localRunbookBase(refExists) {
16624
16624
  function checkRunbookCoverage(docs, base, git3) {
16625
16625
  const changed = git3(["diff", "--name-only", `${base}...HEAD`]).split(/\r?\n/).filter(Boolean);
16626
16626
  const findings = [];
16627
+ const usesOnly = /* @__PURE__ */ new Map();
16628
+ const changesOnlyUses = (path2) => {
16629
+ if (!usesOnly.has(path2)) {
16630
+ const diff = git3(["diff", "-U0", `${base}...HEAD`, "--", path2]);
16631
+ const content = diff.split(/\r?\n/).filter((line) => /^[+-]/.test(line) && !/^(\+\+\+|---)/.test(line));
16632
+ usesOnly.set(path2, content.length > 0 && content.every((line) => /^[+-]\s*(-\s+)?uses:\s*\S/.test(line)));
16633
+ }
16634
+ return usesOnly.get(path2);
16635
+ };
16627
16636
  const matches = (glob, path2) => {
16628
16637
  const pattern = glob.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*\*\//g, "\0").replace(/\*\*/g, "").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]").replaceAll("\0", "(?:.*/)?").replaceAll("", ".*");
16629
16638
  return new RegExp(`^${pattern}$`).test(path2);
@@ -16641,7 +16650,7 @@ function checkRunbookCoverage(docs, base, git3) {
16641
16650
  const end = headings.slice(i + 1).find((h) => h.level <= heading.level)?.start ?? lines2.length + 1;
16642
16651
  const markerEnd = headings[i + 1]?.start ?? end;
16643
16652
  const globs = lines2.slice(heading.start, markerEnd - 1).flatMap((text) => /<!--\s*runbook-covers:\s*(.*?)\s*-->/.exec(text)?.[1].split(",").map((s) => s.trim()) ?? []);
16644
- const affected = changed.filter((path2) => globs.some((glob) => matches(glob, path2)));
16653
+ const affected = changed.filter((path2) => globs.some((glob) => matches(glob, path2)) && !changesOnlyUses(path2));
16645
16654
  if (affected.length && !ranges.some((r) => r.count > 0 && r.start < end && r.start + r.count > heading.start)) {
16646
16655
  findings.push({ kind: "runbook-section-stale", doc, line: heading.start, detail: `${heading.title}: changed ${affected.join(", ")}; update this section or declare Runbook-Unaffected: <reason>`, section: { heading: heading.title, level: heading.level, startLine: heading.start, endLine: end - 1, covers: globs }, sources: affected });
16647
16656
  }
@@ -19062,10 +19071,10 @@ var rollout_plan_default = {
19062
19071
  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)."
19063
19072
  },
19064
19073
  baseline: {
19065
- version: "4.5.165",
19066
- tag: "v4.5.165",
19067
- commit: "e50afbd193c3",
19068
- npm: "@mutmutco/cli@4.5.165"
19074
+ version: "4.5.166",
19075
+ tag: "v4.5.166",
19076
+ commit: "4dbaaf17ac67",
19077
+ npm: "@mutmutco/cli@4.5.166"
19069
19078
  },
19070
19079
  exitCriterion: "fleet-n-of-n",
19071
19080
  hubOnlyShortcut: "forbidden",
@@ -19082,14 +19091,14 @@ var rollout_plan_default = {
19082
19091
  repo: "mutmutco/mmi-hub",
19083
19092
  role: "canary",
19084
19093
  schedule: "train",
19085
- v3Target: "v4.5.165"
19094
+ v3Target: "v4.5.166"
19086
19095
  }
19087
19096
  ],
19088
19097
  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.",
19089
19098
  rollback: {
19090
19099
  independent: true,
19091
- mechanism: "npm dist-tag latest -> 4.5.165 and redeploy the Hub Lambda from tag v4.5.165 (e50afbd193c3); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
19092
- v3Target: "v4.5.165 (@mutmutco/cli@4.5.165, tag commit e50afbd193c3 \u2014 last known-good release carrying the repo-index v4-only contract)"
19100
+ mechanism: "npm dist-tag latest -> 4.5.166 and redeploy the Hub Lambda from tag v4.5.166 (4dbaaf17ac67); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
19101
+ v3Target: "v4.5.166 (@mutmutco/cli@4.5.166, tag commit 4dbaaf17ac67 \u2014 last known-good release carrying the repo-index v4-only contract)"
19093
19102
  }
19094
19103
  },
19095
19104
  {
@@ -813,6 +813,15 @@ function checkRunbookClaims(root, docs, deps) {
813
813
  function checkRunbookCoverage(docs, base, git) {
814
814
  const changed = git(["diff", "--name-only", `${base}...HEAD`]).split(/\r?\n/).filter(Boolean);
815
815
  const findings = [];
816
+ const usesOnly = /* @__PURE__ */ new Map();
817
+ const changesOnlyUses = (path2) => {
818
+ if (!usesOnly.has(path2)) {
819
+ const diff = git(["diff", "-U0", `${base}...HEAD`, "--", path2]);
820
+ const content = diff.split(/\r?\n/).filter((line) => /^[+-]/.test(line) && !/^(\+\+\+|---)/.test(line));
821
+ usesOnly.set(path2, content.length > 0 && content.every((line) => /^[+-]\s*(-\s+)?uses:\s*\S/.test(line)));
822
+ }
823
+ return usesOnly.get(path2);
824
+ };
816
825
  const matches = (glob, path2) => {
817
826
  const pattern = glob.replace(/[.+^${}()|[\]\\]/g, "\\$&").replace(/\*\*\//g, "\0").replace(/\*\*/g, "").replace(/\*/g, "[^/]*").replace(/\?/g, "[^/]").replaceAll("\0", "(?:.*/)?").replaceAll("", ".*");
818
827
  return new RegExp(`^${pattern}$`).test(path2);
@@ -830,7 +839,7 @@ function checkRunbookCoverage(docs, base, git) {
830
839
  const end = headings.slice(i + 1).find((h) => h.level <= heading.level)?.start ?? lines.length + 1;
831
840
  const markerEnd = headings[i + 1]?.start ?? end;
832
841
  const globs = lines.slice(heading.start, markerEnd - 1).flatMap((text) => /<!--\s*runbook-covers:\s*(.*?)\s*-->/.exec(text)?.[1].split(",").map((s) => s.trim()) ?? []);
833
- const affected = changed.filter((path2) => globs.some((glob) => matches(glob, path2)));
842
+ const affected = changed.filter((path2) => globs.some((glob) => matches(glob, path2)) && !changesOnlyUses(path2));
834
843
  if (affected.length && !ranges.some((r) => r.count > 0 && r.start < end && r.start + r.count > heading.start)) {
835
844
  findings.push({ kind: "runbook-section-stale", doc, line: heading.start, detail: `${heading.title}: changed ${affected.join(", ")}; update this section or declare Runbook-Unaffected: <reason>`, section: { heading: heading.title, level: heading.level, startLine: heading.start, endLine: end - 1, covers: globs }, sources: affected });
836
845
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.165",
3
+ "version": "4.5.166",
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",