@mutmutco/cli 4.5.185 → 4.5.186

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 +20 -15
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -19193,10 +19193,10 @@ var rollout_plan_default = {
19193
19193
  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)."
19194
19194
  },
19195
19195
  baseline: {
19196
- version: "4.5.185",
19197
- tag: "v4.5.185",
19198
- commit: "a5a484666253",
19199
- npm: "@mutmutco/cli@4.5.185"
19196
+ version: "4.5.186",
19197
+ tag: "v4.5.186",
19198
+ commit: "f75f2099b6e1",
19199
+ npm: "@mutmutco/cli@4.5.186"
19200
19200
  },
19201
19201
  exitCriterion: "fleet-n-of-n",
19202
19202
  hubOnlyShortcut: "forbidden",
@@ -19213,14 +19213,14 @@ var rollout_plan_default = {
19213
19213
  repo: "mutmutco/mmi-hub",
19214
19214
  role: "canary",
19215
19215
  schedule: "train",
19216
- v3Target: "v4.5.185"
19216
+ v3Target: "v4.5.186"
19217
19217
  }
19218
19218
  ],
19219
19219
  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.",
19220
19220
  rollback: {
19221
19221
  independent: true,
19222
- mechanism: "npm dist-tag latest -> 4.5.185 and redeploy the Hub Lambda from tag v4.5.185 (a5a484666253); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
19223
- v3Target: "v4.5.185 (@mutmutco/cli@4.5.185, tag commit a5a484666253 \u2014 last known-good release carrying the repo-index v4-only contract)"
19222
+ mechanism: "npm dist-tag latest -> 4.5.186 and redeploy the Hub Lambda from tag v4.5.186 (f75f2099b6e1); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
19223
+ v3Target: "v4.5.186 (@mutmutco/cli@4.5.186, tag commit f75f2099b6e1 \u2014 last known-good release carrying the repo-index v4-only contract)"
19224
19224
  }
19225
19225
  },
19226
19226
  {
@@ -26867,6 +26867,8 @@ function enforceBumpRules(input) {
26867
26867
  return decision();
26868
26868
  }
26869
26869
  if (proposal.breaking.length && effective === "patch") {
26870
+ if (input.suite && input.revamp) return decision();
26871
+ if (input.suite) throw new Error(`range carries breaking changes (${evidence}): suite versions auto-mint as patch (#8224), so release it as an owner-approved revamp with --owner-go --big, or ship a shim (#8666)`);
26870
26872
  throw new Error(input.preOneZero ? `range carries breaking changes (${evidence}): this repo is held on 0.x.y, so declare MMI_BUMP_INTENT=minor with MMI_BUMP_REASON, or ship a shim (patch) (#8499)` : `range carries breaking changes (${evidence}): ship a shim (patch) or declare an owner-gated major (MMI_BUMP_INTENT=major, MMI_BUMP_REASON, MMI_MAJOR_APPROVED=<version>) (#8499)`);
26871
26873
  }
26872
26874
  if (proposal.breaking.length && !input.preOneZero) {
@@ -29959,7 +29961,7 @@ async function resolveTrainBumpIntent(deps, env = process.env, latestRelease, pr
29959
29961
  }
29960
29962
  return "patch";
29961
29963
  }
29962
- async function enforceTrainBump(deps, env, intent, preOneZero, source) {
29964
+ async function enforceTrainBump(deps, env, intent, preOneZero, source, suite = { suite: false, revamp: false }) {
29963
29965
  const raw = await deps.run("git", ["log", `origin/main..${source}`, RANGE_LOG_FORMAT]);
29964
29966
  const proposal = proposeBump(parseRangeLog(raw), { preOneZero });
29965
29967
  let majorTarget;
@@ -29968,7 +29970,7 @@ async function enforceTrainBump(deps, env, intent, preOneZero, source) {
29968
29970
  const latest = await latestLocalReleaseTag(deps, void 0, preOneZero);
29969
29971
  majorTarget = explicit || `${latest.major + 1}.0.0`;
29970
29972
  }
29971
- return enforceBumpRules({ intent, env, proposal, preOneZero, majorTarget });
29973
+ return enforceBumpRules({ intent, env, proposal, preOneZero, majorTarget, ...suite });
29972
29974
  }
29973
29975
  async function resolveHotfixVersion(deps, env = process.env, preOneZero = false) {
29974
29976
  const latest = await latestLocalReleaseTag(deps, "origin/main", preOneZero);
@@ -30023,7 +30025,8 @@ async function runTrainApplyLocked(command, deps, options = {}) {
30023
30025
  process.env,
30024
30026
  declaredIntent,
30025
30027
  preOneZeroInForce(meta),
30026
- command === "release" && !directTrack && options.dev !== true ? "origin/rc" : "origin/development"
30028
+ command === "release" && !directTrack && options.dev !== true ? "origin/rc" : "origin/development",
30029
+ { suite: !!meta.suite, revamp: command === "release" && options.big === true }
30027
30030
  );
30028
30031
  const bumpIntent = bump.intent;
30029
30032
  const bumpReceipt = { intent: bump.intent, reason: bump.reason, proposed: bump.proposed, breaking: bump.breaking };
@@ -57943,9 +57946,10 @@ async function reportWrite(label, res) {
57943
57946
  return failGraceful(`${label}: HTTP ${res.status}${detail ? ` \u2014 ${detail}` : ""}`);
57944
57947
  }
57945
57948
  var tenant = program2.command("tenant").description("tenant runtime control through Hub authority");
57946
- tenant.command("control <owner/repo> <stage> <action>").description("bounded tenant control plus value-free vault/broker verification; dev/main retire needs master and exact data-loss confirmation").option("--watch", "block on the dispatched run and report its conclusion (status/retire/verify-secrets/verify-broker/logs watch by default)").option("--lines <n>", "logs only: trailing lines of the tenant service to return (1-2000, default 200)").option("--since <utc>", "logs only: read the journal from this UTC time, e.g. 2026-10-07T13:10Z (includes replaced containers)").option("--until <utc>", "logs only: read the journal up to this UTC time").option("--edge", "logs only: Caddy journal for this stage\u2019s hosts (default window: last 15 minutes)").option("--task <name>", "run-task only: registry-declared task name (never a command)").option("--artifact <id>", "run-task only: opaque id returned by tenant artifact put").option("--resume <run-id>", "run-task only: re-attach to an already-dispatched run (read-only, never re-dispatches) and print its receipt").option("--confirm-data-loss <owner/repo/stage>", "dev/main retire only: exact target to decommission; without it show the dry-run plan").option("--json", "machine-readable output").action(async (repo, stage, action, o) => {
57949
+ tenant.command("control <owner/repo> <stage> <action>").description("bounded tenant control plus value-free vault/broker verification; dev/main retire needs master and exact data-loss confirmation").option("--watch", "block on the dispatched run and report its conclusion (status/retire/verify-secrets/verify-broker/logs watch by default)").option("--lines <n>", "logs only: trailing lines of the tenant service to return (1-2000, default 200)").option("--since <utc>", "logs only: read the journal from this UTC time, e.g. 2026-10-07T13:10Z (includes replaced containers)").option("--until <utc>", "logs only: read the journal up to this UTC time").option("--edge", "logs only: Caddy journal for this stage\u2019s hosts (default window: last 15 minutes)").option("--task <name>", "run-task only: registry-declared task name (never a command)").option("--artifact <id>", "run-task only: opaque id returned by tenant artifact put").option("--input <file>", "run-task only: upload this file as the task artifact (same as tenant artifact put), then run with its id").option("--resume <run-id>", "run-task only: re-attach to an already-dispatched run (read-only, never re-dispatches) and print its receipt").option("--confirm-data-loss <owner/repo/stage>", "dev/main retire only: exact target to decommission; without it show the dry-run plan").option("--json", "machine-readable output").action(async (repo, stage, action, o) => {
57947
57950
  try {
57948
- if (o.resume !== void 0 && (action !== "run-task" || !/^\d+$/.test(o.resume) || o.task || o.artifact)) return fail("runtime tenant control: --resume <run-id> is run-task-only, takes a numeric run id, and cannot be combined with --task/--artifact");
57951
+ if (o.resume !== void 0 && (action !== "run-task" || !/^\d+$/.test(o.resume) || o.task || o.artifact || o.input)) return fail("runtime tenant control: --resume <run-id> is run-task-only, takes a numeric run id, and cannot be combined with --task/--artifact/--input");
57952
+ if (o.input !== void 0 && o.artifact !== void 0) return fail("runtime tenant control: pass --input <file> or --artifact <id>, not both");
57949
57953
  if (o.confirmDataLoss !== void 0 && (action !== "retire" || stage === "rc")) return fail("runtime tenant control: --confirm-data-loss is dev/main retire-only");
57950
57954
  if (action === "retire" && (stage === "dev" || stage === "main")) {
57951
57955
  if (o.confirmDataLoss !== void 0 && o.confirmDataLoss !== `${repo}/${stage}`) return fail(`runtime tenant control: --confirm-data-loss must match ${repo}/${stage} exactly`);
@@ -57971,10 +57975,11 @@ Dry run: pass --confirm-data-loss ${repo}/${stage} to decommission.`);
57971
57975
  }
57972
57976
  if (action === "run-task") {
57973
57977
  if (!o.task && o.resume === void 0) return fail("runtime tenant control: run-task requires --task <declared-name>");
57974
- } else if (o.task || o.artifact) {
57975
- return fail("runtime tenant control: --task/--artifact are valid only for run-task");
57978
+ } else if (o.task || o.artifact || o.input) {
57979
+ return fail("runtime tenant control: --task/--artifact/--input are valid only for run-task");
57976
57980
  }
57977
- const result = await runTenantControl(trainApplyDeps(), { repo, stage, action, watch: o.watch, lines: lines2, edge: o.edge, logSince: o.since, logUntil: o.until, task: o.task, artifact: o.artifact, confirmDataLoss: o.confirmDataLoss, resume: o.resume === void 0 ? void 0 : Number(o.resume) });
57981
+ const artifact = o.input === void 0 ? o.artifact : (await putTenantArtifact(repo, stage, o.input, registryClientDeps(await loadConfig()))).artifactId;
57982
+ const result = await runTenantControl(trainApplyDeps(), { repo, stage, action, watch: o.watch, lines: lines2, edge: o.edge, logSince: o.since, logUntil: o.until, task: o.task, artifact, confirmDataLoss: o.confirmDataLoss, resume: o.resume === void 0 ? void 0 : Number(o.resume) });
57978
57983
  if (!o.json && action === "verify-secrets" && result.secrets) {
57979
57984
  const body = { ok: result.conclusion === "success", secrets: result.secrets, ssmStatus: result.conclusion === "success" ? "Success" : "Failed", raw: result.secretsRaw };
57980
57985
  const { lines: lines3, failure } = renderVerifySecrets(body);
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.185",
3
+ "version": "4.5.186",
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",