@mutmutco/cli 4.5.3 → 4.5.4

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.
Files changed (2) hide show
  1. package/dist/main.cjs +29 -37
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -15998,10 +15998,10 @@ var rollout_plan_default = {
15998
15998
  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)."
15999
15999
  },
16000
16000
  baseline: {
16001
- version: "4.5.3",
16002
- tag: "v4.5.3",
16003
- commit: "69b2bc590f08",
16004
- npm: "@mutmutco/cli@4.5.3"
16001
+ version: "4.5.4",
16002
+ tag: "v4.5.4",
16003
+ commit: "0993d5d2fa7b",
16004
+ npm: "@mutmutco/cli@4.5.4"
16005
16005
  },
16006
16006
  exitCriterion: "fleet-n-of-n",
16007
16007
  hubOnlyShortcut: "forbidden",
@@ -16018,14 +16018,14 @@ var rollout_plan_default = {
16018
16018
  repo: "mutmutco/mmi-hub",
16019
16019
  role: "canary",
16020
16020
  schedule: "train",
16021
- v3Target: "v4.5.3"
16021
+ v3Target: "v4.5.4"
16022
16022
  }
16023
16023
  ],
16024
16024
  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.",
16025
16025
  rollback: {
16026
16026
  independent: true,
16027
- mechanism: "npm dist-tag latest -> 4.5.3 and redeploy the Hub Lambda from tag v4.5.3 (69b2bc590f08); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
16028
- v3Target: "v4.5.3 (@mutmutco/cli@4.5.3, tag commit 69b2bc590f08 \u2014 last known-good release carrying the repo-index v4-only contract)"
16027
+ mechanism: "npm dist-tag latest -> 4.5.4 and redeploy the Hub Lambda from tag v4.5.4 (0993d5d2fa7b); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
16028
+ v3Target: "v4.5.4 (@mutmutco/cli@4.5.4, tag commit 0993d5d2fa7b \u2014 last known-good release carrying the repo-index v4-only contract)"
16029
16029
  }
16030
16030
  },
16031
16031
  {
@@ -19275,38 +19275,14 @@ function staleServedProcess(probe) {
19275
19275
  function servedChannelRow(product, conclusion, evidence) {
19276
19276
  return { workflow: `served-channel(${product})`, runUrlNote: evidence, conclusion };
19277
19277
  }
19278
- var JERV_GATEWAY_REMEDY = "from the Jerv-Hub checkout, re-run the Gateway deploy on its current release tag: `bash scripts/jerv-gateway-release-deploy.sh --tag <jerv-hub tag>`";
19279
- var SERVED_CHANNELS = {
19280
- "mutmutco/mm-strategy": {
19281
- product: "mm-strategy",
19282
- url: "https://strategy.mutmut.work/release/version",
19283
- mover: "the MM-Strategy container deploy (the running server's own version is the pointer)",
19284
- remedy: "`mmi-cli devops runtime tenant redeploy mutmutco/MM-Strategy main`"
19285
- },
19286
- "mutmutco/jerv-hub": {
19287
- product: "jerv",
19288
- url: "https://get.jerv.ai/jerv/release/version",
19289
- mover: "the Jerv Gateway deploy (`jerv-gate fetch-release --product jerv`)",
19290
- remedy: JERV_GATEWAY_REMEDY
19291
- },
19292
- "mutmutco/jerv-jervcode": {
19293
- product: "jervcode",
19294
- url: "https://get.jerv.ai/jervcode/release/version",
19295
- // Jerv-JervCode#6456: JervCode's own publish.yml `serve` job moves and proves this pointer.
19296
- mover: "JervCode's own release (publish.yml `serve` job: `jerv-gate fetch-release --product jervcode` on jerv-central)",
19297
- remedy: "re-run the `serve` job of the JervCode release's publish.yml run (`gh run rerun <run-id> --job serve --repo mutmutco/Jerv-JervCode`), or `gh workflow run publish.yml --repo mutmutco/Jerv-JervCode -f tag=<tag>`"
19298
- }
19299
- };
19300
19278
  function servedChannelFor(repo, installer) {
19301
- const known = SERVED_CHANNELS[repo.toLowerCase()];
19302
- if (!installer) return known;
19279
+ if (!installer) return void 0;
19303
19280
  if (isHubControlRepo(repo)) return void 0;
19304
- const url = installerVersionUrl(installer);
19305
19281
  return {
19306
19282
  product: installer.product,
19307
- url,
19308
- mover: known?.mover ?? `this repo's release (${installer.family === "jerv" ? "get.jerv.ai" : "get.mutmut.work"} serves /${installer.product})`,
19309
- remedy: known?.remedy ?? `re-run the release's served-channel publish for ${installer.product} (\`mmi-cli devops release --resume\`)`
19283
+ url: installerVersionUrl(installer),
19284
+ mover: `this repo's own release (it serves /${installer.product} on its installer host)`,
19285
+ remedy: `re-run this repo's own served-channel publish for ${installer.product}, then \`mmi-cli devops release --resume\``
19310
19286
  };
19311
19287
  }
19312
19288
  var SERVED_CHANNEL_PROBE_ATTEMPTS = 3;
@@ -44354,6 +44330,15 @@ function neutralizeHubProductBrands(text) {
44354
44330
  s = s.replace(/\bdesign-system\s+design-system\b/gi, "design-system");
44355
44331
  return s.replace(/\s{2,}/g, " ").trim();
44356
44332
  }
44333
+ var JERV_SIDE = /\bjerv/i;
44334
+ function namesJervSide(text) {
44335
+ return JERV_SIDE.test(text);
44336
+ }
44337
+ function hubSummaryJervRefusal(lines2) {
44338
+ const bad = lines2.filter(namesJervSide);
44339
+ if (bad.length === 0) return null;
44340
+ return `--announce-summary-file names a Jerv-side project in ${bad.length} line(s) \u2014 an MMI-Hub release note describes MMI-Hub only and never mentions Jerv-side projects; drop or rewrite those lines, then rerun the same command`;
44341
+ }
44357
44342
  function escapeMrkdwn(text) {
44358
44343
  return text.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;");
44359
44344
  }
@@ -44465,6 +44450,7 @@ async function announceRelease(deps, args) {
44465
44450
  }
44466
44451
  lines2 = curateReleaseNotes(view.body ?? "", MAX_BULLETS, neutralize);
44467
44452
  }
44453
+ if (neutralize) lines2 = lines2.filter((l) => !namesJervSide(l));
44468
44454
  if (lines2.length === 0) lines2 = ["\u2022 maintenance release \u2014 see the notes for details"];
44469
44455
  const text = formatAnnouncement({
44470
44456
  repo: args.repo,
@@ -45224,6 +45210,8 @@ async function runHotfixReleaseLocked(deps, versionInput, options, doctor) {
45224
45210
  if (lines2.length < 3 || lines2.length > 6) {
45225
45211
  throw new Error(`--announce-summary-file must contain 3-6 non-empty LLM-curated lines (found ${lines2.length}) \u2014 see docs/Guides/train-troubleshooting.md#announce-summary-missing`);
45226
45212
  }
45213
+ const jerv = hubSummaryJervRefusal(lines2);
45214
+ if (jerv) throw new Error(jerv);
45227
45215
  let rangeLog;
45228
45216
  try {
45229
45217
  rangeLog = await deps.run("git", ["log", "--format=%B", "origin/main..HEAD"]);
@@ -45976,7 +45964,7 @@ var NODE_VERIFY_TIMEOUT_MS = 5 * 6e4;
45976
45964
  var NPM_TRAIN_TIMEOUT_MS = 6e4;
45977
45965
  var NPM_FOLD_TIMEOUT_MS = NODE_PREPARE_TIMEOUT_MS;
45978
45966
  var JERV_GATEWAY_DEPLOY_TIMEOUT_MS = 20 * 6e4;
45979
- async function announceSummaryRefusal(path2) {
45967
+ async function announceSummaryRefusal(path2, isHub = false) {
45980
45968
  let lines2;
45981
45969
  try {
45982
45970
  lines2 = summaryFileLines(await (0, import_promises10.readFile)(path2, "utf8"));
@@ -45986,6 +45974,10 @@ async function announceSummaryRefusal(path2) {
45986
45974
  if (lines2.length < 3 || lines2.length > 6) {
45987
45975
  return `release: --announce-summary-file must contain 3-6 non-empty LLM-curated lines (found ${lines2.length}) \u2014 see docs/Guides/train-troubleshooting.md#announce-summary-missing`;
45988
45976
  }
45977
+ if (isHub) {
45978
+ const jerv = hubSummaryJervRefusal(lines2);
45979
+ if (jerv) return `release: ${jerv}`;
45980
+ }
45989
45981
  try {
45990
45982
  await execFileP("git", ["fetch", "origin"], { timeout: GIT_TIMEOUT_MS });
45991
45983
  } catch (e) {
@@ -46603,7 +46595,7 @@ function registerTrainOperationsCommands(program3, runProjectInfoSyncCallback) {
46603
46595
  isHub ? "release: a new MMI-Hub release requires --announce-summary-file <path> with 3-6 short LLM-curated lines; create the summary file, then rerun the same release command \u2014 see docs/Guides/train-troubleshooting.md#announce-summary-missing" : `release: ${slug} announces to its project release channel, so a new release requires --announce-summary-file <path> with 3-6 short plain-language lines in the project's releaseLanguage (${releaseLanguage2}); create the summary file, then rerun the same release command \u2014 see docs/Guides/train-troubleshooting.md#announce-summary-missing`
46604
46596
  );
46605
46597
  }
46606
- const refusal = await announceSummaryRefusal(o.announceSummaryFile);
46598
+ const refusal = await announceSummaryRefusal(o.announceSummaryFile, isHub);
46607
46599
  if (refusal) return fail(refusal);
46608
46600
  }
46609
46601
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.3",
3
+ "version": "4.5.4",
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",