@mutmutco/cli 4.5.54 → 4.5.55

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 +23 -9
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -17043,10 +17043,10 @@ var rollout_plan_default = {
17043
17043
  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)."
17044
17044
  },
17045
17045
  baseline: {
17046
- version: "4.5.54",
17047
- tag: "v4.5.54",
17048
- commit: "c3607021e1d1",
17049
- npm: "@mutmutco/cli@4.5.54"
17046
+ version: "4.5.55",
17047
+ tag: "v4.5.55",
17048
+ commit: "ed1c9586cbdd",
17049
+ npm: "@mutmutco/cli@4.5.55"
17050
17050
  },
17051
17051
  exitCriterion: "fleet-n-of-n",
17052
17052
  hubOnlyShortcut: "forbidden",
@@ -17063,14 +17063,14 @@ var rollout_plan_default = {
17063
17063
  repo: "mutmutco/mmi-hub",
17064
17064
  role: "canary",
17065
17065
  schedule: "train",
17066
- v3Target: "v4.5.54"
17066
+ v3Target: "v4.5.55"
17067
17067
  }
17068
17068
  ],
17069
17069
  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.",
17070
17070
  rollback: {
17071
17071
  independent: true,
17072
- mechanism: "npm dist-tag latest -> 4.5.54 and redeploy the Hub Lambda from tag v4.5.54 (c3607021e1d1); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17073
- v3Target: "v4.5.54 (@mutmutco/cli@4.5.54, tag commit c3607021e1d1 \u2014 last known-good release carrying the repo-index v4-only contract)"
17072
+ mechanism: "npm dist-tag latest -> 4.5.55 and redeploy the Hub Lambda from tag v4.5.55 (ed1c9586cbdd); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17073
+ v3Target: "v4.5.55 (@mutmutco/cli@4.5.55, tag commit ed1c9586cbdd \u2014 last known-good release carrying the repo-index v4-only contract)"
17074
17074
  }
17075
17075
  },
17076
17076
  {
@@ -35274,11 +35274,13 @@ async function suiteRelease(deps, ownerGo) {
35274
35274
  continue;
35275
35275
  }
35276
35276
  const [sha, live, rcHead] = await Promise.all([deps.tagSha(member.repo, member.tag), deps.backend({ repo: member.repo, id: member.id, bundles: {} }), deps.head(member.repo, "rc")]);
35277
- if (!member.released && !member.releasedAs && rcHead?.toLowerCase() !== member.sha?.toLowerCase()) {
35277
+ let rcAligned = false;
35278
+ if (!member.released && !member.releasedAs && rcHead && rcHead.toLowerCase() !== member.sha?.toLowerCase()) {
35278
35279
  const shipped = await deps.shippedTag(member.repo, member.sha);
35279
35280
  if (shipped) member.releasedAs = shipped;
35281
+ else rcAligned = await deps.sameContent(member.repo, member.sha, rcHead);
35280
35282
  }
35281
- if (!sha || sha.toLowerCase() !== member.sha?.toLowerCase() || !member.released && !member.releasedAs && rcHead?.toLowerCase() !== member.sha?.toLowerCase()) throw new Error(`${member.repo}: rc tag/branch ${member.tag} changed after the cut; release refused`);
35283
+ if (!sha || sha.toLowerCase() !== member.sha?.toLowerCase() || !member.released && !member.releasedAs && !rcAligned && rcHead?.toLowerCase() !== member.sha?.toLowerCase()) throw new Error(`${member.repo}: rc tag/branch ${member.tag} changed after the cut; release refused`);
35282
35284
  const katipReleaseSha = member.id === "katip" ? await deps.tagSha(member.repo, member.releasedAs ?? suiteReleaseTag(member.tag)) : void 0;
35283
35285
  const expectedBackend = member.id === "katip" && member.released ? member.backendAfterRelease ?? katipReleaseSha : member.backend;
35284
35286
  if (live.version !== expectedBackend && !(member.id === "katip" && !member.released && katipReleaseSha && live.version === katipReleaseSha))
@@ -45353,6 +45355,17 @@ function suiteTrainIo(root, summaryFile) {
45353
45355
  await exec("git", ["fetch", "origin", "--tags"], target);
45354
45356
  return releaseTagsFrom(await exec("git", ["tag", "--contains", rcSha, "--list", "v*"], target))[0];
45355
45357
  };
45358
+ const sameContent2 = async (repo, candidate, head) => {
45359
+ const target = await checkout(repo);
45360
+ await exec("git", ["fetch", "origin", "--tags"], target);
45361
+ try {
45362
+ await exec("git", ["merge-base", "--is-ancestor", candidate, head], target);
45363
+ } catch {
45364
+ return false;
45365
+ }
45366
+ const [a, b] = (await exec("git", ["rev-parse", `${candidate}^{tree}`, `${head}^{tree}`], target)).trim().split(/\s+/);
45367
+ return !!a && a === b;
45368
+ };
45356
45369
  const rcRuns = async () => JSON.parse(await gh(["run", "list", "--repo", "mutmutco/MMI-Hub", "--workflow", "module-rc-publish.yml", "--event", "workflow_dispatch", "--limit", "100", "--json", "databaseId,displayTitle,conclusion,status,createdAt"]));
45357
45370
  const watchRcRun = async (title, fields, reuse) => {
45358
45371
  const since = Date.now() - 1e4;
@@ -45440,6 +45453,7 @@ function suiteTrainIo(root, summaryFile) {
45440
45453
  },
45441
45454
  release,
45442
45455
  shippedTag,
45456
+ sameContent: sameContent2,
45443
45457
  announce: async (record) => {
45444
45458
  if (!summaryFile) throw new Error("suite announcement requires --announce-summary-file; outcome was not posted");
45445
45459
  const result = await trainApplyDeps().announce?.({ repo: SUITE_REPO, tag: record.leadRcTag.replace(/-rc\.\d+$/, ""), summaryFile });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.54",
3
+ "version": "4.5.55",
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",