@mutmutco/cli 4.5.40 → 4.5.42

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 +41 -7
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -16871,10 +16871,10 @@ var rollout_plan_default = {
16871
16871
  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)."
16872
16872
  },
16873
16873
  baseline: {
16874
- version: "4.5.40",
16875
- tag: "v4.5.40",
16876
- commit: "10bf34e82ccb",
16877
- npm: "@mutmutco/cli@4.5.40"
16874
+ version: "4.5.42",
16875
+ tag: "v4.5.42",
16876
+ commit: "448720f2bc43",
16877
+ npm: "@mutmutco/cli@4.5.42"
16878
16878
  },
16879
16879
  exitCriterion: "fleet-n-of-n",
16880
16880
  hubOnlyShortcut: "forbidden",
@@ -16891,14 +16891,14 @@ var rollout_plan_default = {
16891
16891
  repo: "mutmutco/mmi-hub",
16892
16892
  role: "canary",
16893
16893
  schedule: "train",
16894
- v3Target: "v4.5.40"
16894
+ v3Target: "v4.5.42"
16895
16895
  }
16896
16896
  ],
16897
16897
  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.",
16898
16898
  rollback: {
16899
16899
  independent: true,
16900
- mechanism: "npm dist-tag latest -> 4.5.40 and redeploy the Hub Lambda from tag v4.5.40 (10bf34e82ccb); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
16901
- v3Target: "v4.5.40 (@mutmutco/cli@4.5.40, tag commit 10bf34e82ccb \u2014 last known-good release carrying the repo-index v4-only contract)"
16900
+ mechanism: "npm dist-tag latest -> 4.5.42 and redeploy the Hub Lambda from tag v4.5.42 (448720f2bc43); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
16901
+ v3Target: "v4.5.42 (@mutmutco/cli@4.5.42, tag commit 448720f2bc43 \u2014 last known-good release carrying the repo-index v4-only contract)"
16902
16902
  }
16903
16903
  },
16904
16904
  {
@@ -34652,6 +34652,17 @@ async function carriedPins(deps, member, bundles) {
34652
34652
  }
34653
34653
  throw new Error(`${member.repo}: nothing new since rc, but no pinned MM-Work bundle carries development ${member.development.slice(0, 12)}; pin it before the suite cut`);
34654
34654
  }
34655
+ function suiteAbandon(recordPath) {
34656
+ const record = readSuiteCut(recordPath);
34657
+ if (!record) throw new Error("no suite cut record to abandon");
34658
+ if (record.pinPr) {
34659
+ throw new Error(`the cut already opened pin PR ${record.pinPr}; its pins may be visible, so resume it (suite rcand --owner-go) or release it (suite release) instead`);
34660
+ }
34661
+ const archive = `${recordPath}.abandoned-${record.leadDevelopment.slice(0, 12)}.json`;
34662
+ if ((0, import_node_fs29.existsSync)(archive)) throw new Error(`abandoned-cut archive already exists at ${archive}; inspect before abandoning again`);
34663
+ (0, import_node_fs29.renameSync)(recordPath, archive);
34664
+ return { archive, orphanTags: record.members.filter((m) => m.tag).map((m) => `${m.repo}@${m.tag}`) };
34665
+ }
34655
34666
  async function suiteRcand(deps, opts) {
34656
34667
  if (!opts.ownerGo) throw new Error("suite rcand requires --owner-go (rc uses live data); nothing was written");
34657
34668
  const members = suiteMembers(await deps.registry());
@@ -34669,6 +34680,10 @@ async function suiteRcand(deps, opts) {
34669
34680
  (0, import_node_fs29.renameSync)(deps.recordPath, archive);
34670
34681
  record = void 0;
34671
34682
  }
34683
+ if (record && !record.pinPr && record.members.every((m) => !m.tag)) {
34684
+ (0, import_node_fs29.rmSync)(deps.recordPath, { force: true });
34685
+ record = void 0;
34686
+ }
34672
34687
  if (!record) {
34673
34688
  const [leadDevelopment, leadPreviousRc, snapshots] = await Promise.all([
34674
34689
  deps.head(SUITE_REPO, "development"),
@@ -44930,6 +44945,25 @@ function registerSuiteCommands(program3) {
44930
44945
  return fail(`suite rcand: ${e.message}`);
44931
44946
  }
44932
44947
  });
44948
+ suite.command("abandon").description("retire an unfinished cut that opened no pin PR: archive the record; member rc tags stay (#7396)").option("--json", "structured receipt").action(async (o) => {
44949
+ try {
44950
+ const root = await leadRoot();
44951
+ const unlock = await acquireTrainWriterLock(root, "suite abandon");
44952
+ let result;
44953
+ try {
44954
+ result = suiteAbandon(suiteTrainIo(root).recordPath);
44955
+ } finally {
44956
+ await unlock();
44957
+ }
44958
+ console.log(o.json ? JSON.stringify(result, null, 2) : [
44959
+ `suite abandon: archived the cut record to ${result.archive}`,
44960
+ ...result.orphanTags.length ? [" member rc tags left in place (immutable; the next rc supersedes them):", ...result.orphanTags.map((t) => ` - ${t}`)] : [" no member rc tag was minted"],
44961
+ " the next suite rcand --owner-go re-snapshots every member"
44962
+ ].join("\n"));
44963
+ } catch (e) {
44964
+ return fail(`suite abandon: ${e.message}`);
44965
+ }
44966
+ });
44933
44967
  suite.command("release").description("verify the cut and unchanged live backends, ship members then MM-Work, announce once").option("--owner-go", "explicit owner approval to release the tested candidate").option("--announce-summary-file <path>", "curated suite announcement, posted once after the train").option("--json", "structured receipt").action(async (o) => {
44934
44968
  try {
44935
44969
  if (!o.ownerGo) throw new Error("suite release requires --owner-go; nothing was written");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.40",
3
+ "version": "4.5.42",
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",