@mutmutco/codex-plugin 4.5.94 → 4.5.95

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,6 +1,6 @@
1
1
  {
2
2
  "name": "mmi",
3
- "version": "4.5.94",
3
+ "version": "4.5.95",
4
4
  "mmiCompat": "4.x",
5
5
  "description": "MMI workflow skills and org gates delivery.",
6
6
  "author": {
package/cli/dist/main.cjs CHANGED
@@ -17255,10 +17255,10 @@ var rollout_plan_default = {
17255
17255
  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)."
17256
17256
  },
17257
17257
  baseline: {
17258
- version: "4.5.94",
17259
- tag: "v4.5.94",
17260
- commit: "f01a89cb9110",
17261
- npm: "@mutmutco/cli@4.5.94"
17258
+ version: "4.5.95",
17259
+ tag: "v4.5.95",
17260
+ commit: "d6d4a135bce9",
17261
+ npm: "@mutmutco/cli@4.5.95"
17262
17262
  },
17263
17263
  exitCriterion: "fleet-n-of-n",
17264
17264
  hubOnlyShortcut: "forbidden",
@@ -17275,14 +17275,14 @@ var rollout_plan_default = {
17275
17275
  repo: "mutmutco/mmi-hub",
17276
17276
  role: "canary",
17277
17277
  schedule: "train",
17278
- v3Target: "v4.5.94"
17278
+ v3Target: "v4.5.95"
17279
17279
  }
17280
17280
  ],
17281
17281
  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.",
17282
17282
  rollback: {
17283
17283
  independent: true,
17284
- mechanism: "npm dist-tag latest -> 4.5.94 and redeploy the Hub Lambda from tag v4.5.94 (f01a89cb9110); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17285
- v3Target: "v4.5.94 (@mutmutco/cli@4.5.94, tag commit f01a89cb9110 \u2014 last known-good release carrying the repo-index v4-only contract)"
17284
+ mechanism: "npm dist-tag latest -> 4.5.95 and redeploy the Hub Lambda from tag v4.5.95 (d6d4a135bce9); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17285
+ v3Target: "v4.5.95 (@mutmutco/cli@4.5.95, tag commit d6d4a135bce9 \u2014 last known-good release carrying the repo-index v4-only contract)"
17286
17286
  }
17287
17287
  },
17288
17288
  {
@@ -36127,6 +36127,21 @@ async function suiteMarkAbandoned(deps, ownerGo = false) {
36127
36127
  for (const t of tags) await deps.markAbandoned(t.repo, t.tag, t.sha);
36128
36128
  return tags.map((t) => `${t.repo}@${t.tag}`);
36129
36129
  }
36130
+ async function retireFailedLeadRcLedger(deps, ownerGo) {
36131
+ if (!(0, import_node_fs29.existsSync)(deps.ledgerPath)) return void 0;
36132
+ return withLedgerLock(deps.ledgerPath, async (fence) => {
36133
+ const ledger = parseReleaseLedger((0, import_node_fs29.readFileSync)(deps.ledgerPath, "utf8"));
36134
+ const states = Object.values(ledger.phases).map((p) => p.state);
36135
+ if (ledger.repo !== SUITE_REPO || ledger.lane !== "rcand" || ledger.phases.promotion.state === "complete" || !states.includes("failed")) return void 0;
36136
+ if (!ownerGo) throw new Error(`the lead's failed rcand ledger for ${ledger.tag} blocks every train; retire it with suite abandon --owner-go`);
36137
+ if ((await deps.rcHead())?.toLowerCase() === ledger.tagSha.toLowerCase()) throw new Error(`origin rc already points at ${ledger.tag}; it was promoted, so its ledger is not retired`);
36138
+ const archive = (0, import_node_path29.join)((0, import_node_path29.dirname)(deps.ledgerPath), `phases.archive-${ledger.tag}.json`);
36139
+ if ((0, import_node_fs29.existsSync)(archive)) throw new Error(`ledger archive already exists at ${archive}; inspect before retiring again`);
36140
+ await deps.markAbandoned(SUITE_REPO, ledger.tag, ledger.tagSha);
36141
+ await fence(() => (0, import_node_fs29.renameSync)(deps.ledgerPath, archive));
36142
+ return `${ledger.tag} (ledger archived to ${archive})`;
36143
+ });
36144
+ }
36130
36145
  function suiteAbandon(recordPath, ownerGo = false, now = /* @__PURE__ */ new Date()) {
36131
36146
  const record = abandonableCut(recordPath, ownerGo);
36132
36147
  const archive = `${recordPath}.abandoned-${record.leadDevelopment.slice(0, 12)}-${now.toISOString().replace(/[:.]/g, "")}.json`;
@@ -47480,8 +47495,14 @@ function registerSuiteCommands(program3) {
47480
47495
  let result;
47481
47496
  let restored;
47482
47497
  let marked;
47498
+ let retired;
47483
47499
  try {
47484
47500
  const io = suiteTrainIo(root);
47501
+ retired = await retireFailedLeadRcLedger({ ledgerPath: releaseLedgerPath(root), rcHead: () => io.head(SUITE_REPO, "rc").then((h) => h ?? void 0), markAbandoned: io.markAbandoned }, o.ownerGo === true);
47502
+ if (retired && !(0, import_node_fs44.existsSync)(io.recordPath)) {
47503
+ console.log(o.json ? JSON.stringify({ retiredLeadRc: retired }, null, 2) : `suite abandon: retired the lead's failed, never-promoted rc candidate ${retired}; marked abandoned on origin (#7854)`);
47504
+ return;
47505
+ }
47485
47506
  restored = o.ownerGo === true ? await suiteRestoreMainPins(io) : void 0;
47486
47507
  marked = await suiteMarkAbandoned(io, o.ownerGo === true);
47487
47508
  result = suiteAbandon(io.recordPath, o.ownerGo === true);
@@ -47492,6 +47513,7 @@ function registerSuiteCommands(program3) {
47492
47513
  `suite abandon: archived the cut record to ${result.archive}`,
47493
47514
  ...result.orphanTags.length ? [" member rc tags left in place (immutable; the next cut reuses one still unreleased on its rc head, #7450):", ...result.orphanTags.map((t) => ` - ${t}`)] : [" no member rc tag was minted"],
47494
47515
  ...restored ? [` main pins the cut planned for unreleased tags are restored by ${restored.pr} (${restored.status}, #7758)`] : [],
47516
+ ...retired ? [` retired the lead's failed, never-promoted rc candidate ${retired} (#7854)`] : [],
47495
47517
  ...marked.length ? [` marked abandoned on origin, so the hotfix guard stops counting them as active (#7801): ${marked.join(", ")}`] : [],
47496
47518
  " the next suite rcand --owner-go re-snapshots every member"
47497
47519
  ].join("\n"));
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.94",
3
+ "version": "4.5.95",
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/codex-plugin",
3
- "version": "4.5.94",
3
+ "version": "4.5.95",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",