@mutmutco/cli 4.6.46 → 4.6.47

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 +21 -13
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -28556,10 +28556,10 @@ var rollout_plan_default = {
28556
28556
  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)."
28557
28557
  },
28558
28558
  baseline: {
28559
- version: "4.6.46",
28560
- tag: "v4.6.46",
28561
- commit: "4623316e6c45",
28562
- npm: "@mutmutco/cli@4.6.46"
28559
+ version: "4.6.47",
28560
+ tag: "v4.6.47",
28561
+ commit: "4555234d7aa8",
28562
+ npm: "@mutmutco/cli@4.6.47"
28563
28563
  },
28564
28564
  exitCriterion: "fleet-n-of-n",
28565
28565
  hubOnlyShortcut: "forbidden",
@@ -28576,14 +28576,14 @@ var rollout_plan_default = {
28576
28576
  repo: "mutmutco/mmi-hub",
28577
28577
  role: "canary",
28578
28578
  schedule: "train",
28579
- v3Target: "v4.6.46"
28579
+ v3Target: "v4.6.47"
28580
28580
  }
28581
28581
  ],
28582
28582
  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.",
28583
28583
  rollback: {
28584
28584
  independent: true,
28585
- mechanism: "npm dist-tag latest -> 4.6.46 and redeploy the Hub Lambda from tag v4.6.46 (4623316e6c45); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
28586
- v3Target: "v4.6.46 (@mutmutco/cli@4.6.46, tag commit 4623316e6c45 \u2014 last known-good release carrying the repo-index v4-only contract)"
28585
+ mechanism: "npm dist-tag latest -> 4.6.47 and redeploy the Hub Lambda from tag v4.6.47 (4555234d7aa8); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
28586
+ v3Target: "v4.6.47 (@mutmutco/cli@4.6.47, tag commit 4555234d7aa8 \u2014 last known-good release carrying the repo-index v4-only contract)"
28587
28587
  }
28588
28588
  },
28589
28589
  {
@@ -42864,7 +42864,11 @@ async function runPrLandOnce(prNumber, options, deps) {
42864
42864
  };
42865
42865
  base.checksWait = await deps.waitForChecks(prNumber, repo);
42866
42866
  const waitError = await checksWaitError(base.checksWait);
42867
- if (waitError) return { ...base, error: hasQueue && base.checksWait.status !== "conflicting" ? `${waitError} \u2014 ${prQueueReadHint(prNumber, repo)}` : waitError };
42867
+ if (waitError) {
42868
+ if (!hasQueue || base.checksWait.status === "conflicting") return { ...base, error: waitError };
42869
+ const noQueueEntry = /no-checks-reported/.test(base.checksWait.detail ?? "") ? `no merge-queue entry was created: workflow runs exist on the head but published no check-runs \u2014 inspect them with \`mmi-cli devops read run list --repo ${repo} --commit ${pinned ?? "<full head SHA>"}\`, then re-run \`mmi-cli devops pr land ${prNumber} --repo ${repo}\` once the required check exists` : "no merge-queue entry was created (the land stopped before enqueue)";
42870
+ return { ...base, error: `${waitError} \u2014 ${noQueueEntry}` };
42871
+ }
42868
42872
  const driftAfterChecks = await headDrift("after checks");
42869
42873
  if (driftAfterChecks) return driftAfterChecks;
42870
42874
  prState = prState ?? await readPrState();
@@ -42883,7 +42887,7 @@ async function runPrLandOnce(prNumber, options, deps) {
42883
42887
  }
42884
42888
  base.checksWait = await deps.waitForChecks(prNumber, repo);
42885
42889
  const reWaitError = await checksWaitError(base.checksWait);
42886
- if (reWaitError) return { ...base, error: hasQueue && base.checksWait.status !== "conflicting" ? `${reWaitError} \u2014 ${prQueueReadHint(prNumber, repo)}` : reWaitError };
42890
+ if (reWaitError) return { ...base, error: reWaitError };
42887
42891
  prState = await readPrState();
42888
42892
  }
42889
42893
  if (isConflicting(prState)) return { ...base, error: conflictError() };
@@ -44185,8 +44189,8 @@ async function submitQueueAdmission(pr, repo, head, read, write, options, resume
44185
44189
  error: `queue submission outcome unknown: ${reason}. Never hand-edit files under the mmi-cli queue-admissions receipt store (%LOCALAPPDATA%/MMI Future/mmi-cli/queue-admissions); read the queue entry with \`mmi-cli devops read pr queue ${pr} --repo ${repo} --json\`; once the PR is verifiably OPEN at the submitted head and absent from the queue, abandon the stuck admission with \`mmi-cli devops pr land ${pr} --repo ${repo} --abandon-admission\` so a new intent needs no new head \u2014 no new request was sent after this uncertainty.`
44186
44190
  });
44187
44191
  const rejected = (reason) => markReenqueued(admissionRejected(reason, repo, pr));
44188
- const reconcile = async (reason, recordEntry = false, resumingSaved = false) => {
44189
- const maxReads = options.enqueueOnly ? 3 : 1;
44192
+ const reconcile = async (reason, recordEntry = false, resumingSaved = false, minReads = 1) => {
44193
+ const maxReads = Math.max(options.enqueueOnly ? 3 : 1, minReads);
44190
44194
  const sleep3 = options.sleep ?? ((ms) => new Promise((resolve8) => setTimeout(resolve8, ms)));
44191
44195
  for (let readAttempt = 0; readAttempt < maxReads; readAttempt++) {
44192
44196
  if (readAttempt) await sleep3(readAttempt * 1e3);
@@ -44317,7 +44321,7 @@ async function submitQueueAdmission(pr, repo, head, read, write, options, resume
44317
44321
  try {
44318
44322
  response = admissionResponse(output);
44319
44323
  } catch {
44320
- return reconcile("the send response was lost or malformed");
44324
+ return reconcile("the send response was lost or malformed, and queue membership at the submitted head was re-read and not confirmed", true, false, 3);
44321
44325
  }
44322
44326
  const { code, body } = response;
44323
44327
  if (code === 200 && ["enqueued", "merged"].includes(body.status ?? "")) {
@@ -48241,7 +48245,11 @@ function tenantTaskWriteRefusal(existing, patch) {
48241
48245
  const sent = patch.tenantTasks;
48242
48246
  if (sent === null || sent === void 0) return null;
48243
48247
  const merged = /* @__PURE__ */ new Set([...Object.keys(stored), ...Object.keys(sent)]);
48244
- if (merged.size > 20) return `org project set: ${slug} would hold ${merged.size} tenantTasks (${Object.keys(stored).length} declared today); the cap is 20 \u2014 retire some first with --unset-task <name>`;
48248
+ if (merged.size > 20) {
48249
+ const repo = existing?.repos?.[0] || "<owner/repo>";
48250
+ const names = Object.keys(stored).sort();
48251
+ return `org project set: ${slug} would hold ${merged.size} tenantTasks (${names.length} declared today); the cap is 20 \u2014 retire one first with \`mmi-cli oracle org project set ${repo} --unset-task <name>\`. Declared: ${names.join(", ") || "(none)"}`;
48252
+ }
48245
48253
  return null;
48246
48254
  }
48247
48255
  function secretRemovalRefusal(existing, patch) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.6.46",
3
+ "version": "4.6.47",
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",