@mutmutco/codex-plugin 4.5.92 → 4.5.93

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.92",
3
+ "version": "4.5.93",
4
4
  "mmiCompat": "4.x",
5
5
  "description": "MMI workflow skills and org gates delivery.",
6
6
  "author": {
package/cli/dist/main.cjs CHANGED
@@ -17252,10 +17252,10 @@ var rollout_plan_default = {
17252
17252
  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)."
17253
17253
  },
17254
17254
  baseline: {
17255
- version: "4.5.92",
17256
- tag: "v4.5.92",
17257
- commit: "b89a882ab027",
17258
- npm: "@mutmutco/cli@4.5.92"
17255
+ version: "4.5.93",
17256
+ tag: "v4.5.93",
17257
+ commit: "f0c54c59980d",
17258
+ npm: "@mutmutco/cli@4.5.93"
17259
17259
  },
17260
17260
  exitCriterion: "fleet-n-of-n",
17261
17261
  hubOnlyShortcut: "forbidden",
@@ -17272,14 +17272,14 @@ var rollout_plan_default = {
17272
17272
  repo: "mutmutco/mmi-hub",
17273
17273
  role: "canary",
17274
17274
  schedule: "train",
17275
- v3Target: "v4.5.92"
17275
+ v3Target: "v4.5.93"
17276
17276
  }
17277
17277
  ],
17278
17278
  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.",
17279
17279
  rollback: {
17280
17280
  independent: true,
17281
- mechanism: "npm dist-tag latest -> 4.5.92 and redeploy the Hub Lambda from tag v4.5.92 (b89a882ab027); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17282
- v3Target: "v4.5.92 (@mutmutco/cli@4.5.92, tag commit b89a882ab027 \u2014 last known-good release carrying the repo-index v4-only contract)"
17281
+ mechanism: "npm dist-tag latest -> 4.5.93 and redeploy the Hub Lambda from tag v4.5.93 (f0c54c59980d); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17282
+ v3Target: "v4.5.93 (@mutmutco/cli@4.5.93, tag commit f0c54c59980d \u2014 last known-good release carrying the repo-index v4-only contract)"
17283
17283
  }
17284
17284
  },
17285
17285
  {
@@ -36067,7 +36067,7 @@ function readSuiteCut(path2) {
36067
36067
  } catch {
36068
36068
  throw new Error(`suite cut record unreadable at ${path2}; repair it, never recut`);
36069
36069
  }
36070
- if (record.schema !== SCHEMA || record.lead !== SUITE_REPO || !SHA2.test(record.leadDevelopment) || !SHA2.test(record.leadPreviousRc) || !Array.isArray(record.members) || record.members.length === 0 || record.pinPr !== void 0 && (typeof record.pinPr !== "string" || !record.pinPr.startsWith("https://github.com/mutmutco/MM-Work/pull/")) || record.pinMerged !== void 0 && (record.pinMerged !== true && record.pinMerged !== false || !record.pinPr) || record.leadRcTag !== void 0 && (!RC_TAG.test(record.leadRcTag) || !SHA2.test(record.leadRcSha ?? "") || !record.pinMerged) || record.leadReleased !== void 0 && (record.leadReleased !== true || !record.leadRcTag) || record.announcement !== void 0 && (!["pending", "sent", "skipped"].includes(record.announcement) || !record.leadReleased) || record.heldMembers !== void 0 && (!Array.isArray(record.heldMembers) || record.heldMembers.some((h) => !h.id || !h.repo || typeof h.reason !== "string" || !h.reason.trim() || h.since !== void 0 && typeof h.since !== "string" || record.members.some((m) => m.id === h.id))) || record.members.some((m) => !m.id || !m.repo || !m.backend || !m.host || !SHA2.test(m.development) || !SHA2.test(m.previousRc) || m.rcWasAbsent !== void 0 && m.rcWasAbsent !== true || m.tag !== void 0 && (!RC_TAG.test(m.tag) || !SHA2.test(m.sha ?? "")) || m.published !== void 0 && (m.published !== true || !m.tag) || m.released !== void 0 && (m.released !== true || !m.published) || m.mainPublished !== void 0 && (m.mainPublished !== true || !m.released || !!m.carried) || m.backendAfterRelease !== void 0 && (!m.released || typeof m.backendAfterRelease !== "string") || m.carried !== void 0 && (m.carried !== true || m.tag !== void 0 || m.published !== void 0 || !isPin(m.rcPin) || !isPin(m.mainPin)) || m.carried === void 0 && (m.rcPin !== void 0 || m.mainPin !== void 0)))
36070
+ if (record.schema !== SCHEMA || record.lead !== SUITE_REPO || !SHA2.test(record.leadDevelopment) || !SHA2.test(record.leadPreviousRc) || !Array.isArray(record.members) || record.members.length === 0 || record.pinPr !== void 0 && (typeof record.pinPr !== "string" || !record.pinPr.startsWith("https://github.com/mutmutco/MM-Work/pull/")) || record.pinsUnchanged !== void 0 && (record.pinsUnchanged !== true || record.pinPr !== void 0) || record.pinMerged !== void 0 && (record.pinMerged !== true && record.pinMerged !== false || !record.pinPr && !record.pinsUnchanged) || record.leadRcTag !== void 0 && (!RC_TAG.test(record.leadRcTag) || !SHA2.test(record.leadRcSha ?? "") || !record.pinMerged) || record.leadReleased !== void 0 && (record.leadReleased !== true || !record.leadRcTag) || record.announcement !== void 0 && (!["pending", "sent", "skipped"].includes(record.announcement) || !record.leadReleased) || record.heldMembers !== void 0 && (!Array.isArray(record.heldMembers) || record.heldMembers.some((h) => !h.id || !h.repo || typeof h.reason !== "string" || !h.reason.trim() || h.since !== void 0 && typeof h.since !== "string" || record.members.some((m) => m.id === h.id))) || record.members.some((m) => !m.id || !m.repo || !m.backend || !m.host || !SHA2.test(m.development) || !SHA2.test(m.previousRc) || m.rcWasAbsent !== void 0 && m.rcWasAbsent !== true || m.tag !== void 0 && (!RC_TAG.test(m.tag) || !SHA2.test(m.sha ?? "")) || m.published !== void 0 && (m.published !== true || !m.tag) || m.released !== void 0 && (m.released !== true || !m.published) || m.mainPublished !== void 0 && (m.mainPublished !== true || !m.released || !!m.carried) || m.backendAfterRelease !== void 0 && (!m.released || typeof m.backendAfterRelease !== "string") || m.carried !== void 0 && (m.carried !== true || m.tag !== void 0 || m.published !== void 0 || !isPin(m.rcPin) || !isPin(m.mainPin)) || m.carried === void 0 && (m.rcPin !== void 0 || m.mainPin !== void 0)))
36071
36071
  throw new Error(`suite cut record has unknown or invalid state at ${path2}; repair it, never recut`);
36072
36072
  return record;
36073
36073
  }
@@ -36198,7 +36198,7 @@ async function suiteRcand(deps, opts) {
36198
36198
  (0, import_node_fs29.renameSync)(deps.recordPath, archive);
36199
36199
  record = void 0;
36200
36200
  }
36201
- if (record && !record.pinPr && record.members.every((m) => !m.tag)) {
36201
+ if (record && !record.pinPr && !record.leadRcTag && record.members.every((m) => !m.tag)) {
36202
36202
  (0, import_node_fs29.rmSync)(deps.recordPath, { force: true });
36203
36203
  record = void 0;
36204
36204
  }
@@ -36314,13 +36314,18 @@ Each module must ship a live release that bind-mounts <deployPath>/data read-onl
36314
36314
  if (!member.carried && !member.priorMain && prior && pinVersion(prior) !== suiteReleaseTag(member.tag)) member.priorMain = prior;
36315
36315
  }
36316
36316
  writeSuiteCut(deps.recordPath, record);
36317
- const pr = await deps.pin({ cut: record.leadDevelopment, pins, heldIds: record.heldMembers?.map((h) => h.id) });
36317
+ const pr = await deps.pin({ cut: record.leadDevelopment, pins, heldIds: record.heldMembers?.map((h) => h.id), carriedOnly: record.members.every((m) => m.carried) });
36318
36318
  await deps.verifyLeadCut(record.leadDevelopment);
36319
- if (record.pinPr && record.pinPr !== pr.pr) throw new Error(`pin PR changed from ${record.pinPr} to ${pr.pr}; stop`);
36320
- record.pinPr = pr.pr;
36321
- record.pinMerged = pr.status === "merged";
36319
+ if (pr.status === "unchanged") {
36320
+ record.pinsUnchanged = true;
36321
+ record.pinMerged = true;
36322
+ } else {
36323
+ if (record.pinPr && record.pinPr !== pr.pr) throw new Error(`pin PR changed from ${record.pinPr} to ${pr.pr}; stop`);
36324
+ record.pinPr = pr.pr;
36325
+ record.pinMerged = pr.status === "merged";
36326
+ }
36322
36327
  writeSuiteCut(deps.recordPath, record);
36323
- if (!record.pinMerged) throw new Error(`suite pin PR ${pr.pr} is pending; merge it on development, then rerun suite rcand --owner-go (member tags are reused)`);
36328
+ if (!record.pinMerged) throw new Error(`suite pin PR ${record.pinPr} is pending; merge it on development, then rerun suite rcand --owner-go (member tags are reused)`);
36324
36329
  if (!record.leadRcTag) {
36325
36330
  const leadCut = await deps.rcand(SUITE_REPO, record.leadPreviousRc);
36326
36331
  if (!RC_TAG.test(leadCut.tag) || !SHA2.test(leadCut.sha) || !await deps.contains(SUITE_REPO, record.leadDevelopment, leadCut.sha))
@@ -40241,7 +40246,10 @@ async function openSuiteCutPinPr(deps, input) {
40241
40246
  return row?.bundles.rc === p.rc && row?.bundles.main === p.main;
40242
40247
  });
40243
40248
  if (prs.length && matches(await registry2(branch))) return { status: "pending", pr: prs[0].url };
40244
- if (!prs.length && matches(rows)) throw new Error("pins already match without a merged cut PR \u2014 provenance unverified");
40249
+ if (!prs.length && matches(rows)) {
40250
+ if (input.carriedOnly) return { status: "unchanged" };
40251
+ throw new Error("pins already match without a merged cut PR \u2014 provenance unverified");
40252
+ }
40245
40253
  await (0, import_promises6.mkdir)((0, import_node_path34.join)(deps.root, "tmp"), { recursive: true });
40246
40254
  scratch = await (0, import_promises6.mkdtemp)((0, import_node_path34.join)(deps.root, "tmp", "suite-pin-"));
40247
40255
  const run = (file, args) => deps.run(file, args, scratch);
@@ -47014,9 +47022,10 @@ function rcRunCauseFromLog(log) {
47014
47022
  function memberAnnounceSummaryFile(repo, summaryFile, memberSummaryFiles) {
47015
47023
  return repo === SUITE_REPO ? summaryFile : memberSummaryFiles[repo];
47016
47024
  }
47025
+ var suiteStateDir = (root) => (0, import_node_path43.join)(resolvePrimaryGitDir(root), "mmi-runtime", "suite");
47017
47026
  function suiteTrainIo(root, summaryFile, memberSummaryFiles = {}) {
47018
- const recordPath = repoRuntimeStatePath(root, "suite", "cut.json");
47019
- const base = (0, import_node_path43.join)(repoRuntimeStatePath(root, "suite"), "checkouts");
47027
+ const recordPath = (0, import_node_path43.join)(suiteStateDir(root), "cut.json");
47028
+ const base = (0, import_node_path43.join)(suiteStateDir(root), "checkouts");
47020
47029
  const checkout = async (repo) => {
47021
47030
  if (repo === SUITE_REPO) return root;
47022
47031
  const target = (0, import_node_path43.join)(base, repo.split("/")[1]);
@@ -47326,7 +47335,7 @@ function suiteTrainIo(root, summaryFile, memberSummaryFiles = {}) {
47326
47335
  recordMapping: async (leadTag, mapping) => {
47327
47336
  const body = await gh(["release", "view", leadTag, "--repo", SUITE_REPO, "--json", "body", "--jq", ".body"]);
47328
47337
  if (parseSuiteMapping(body)) return;
47329
- const dir = repoRuntimeStatePath(root, "suite");
47338
+ const dir = suiteStateDir(root);
47330
47339
  (0, import_node_fs43.mkdirSync)(dir, { recursive: true });
47331
47340
  const file = (0, import_node_path43.join)(dir, `notes-${leadTag}.md`);
47332
47341
  (0, import_node_fs43.writeFileSync)(file, `${body}
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.92",
3
+ "version": "4.5.93",
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.92",
3
+ "version": "4.5.93",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",