@mutmutco/cli 4.5.1 → 4.5.3

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 -12
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -15998,10 +15998,10 @@ var rollout_plan_default = {
15998
15998
  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)."
15999
15999
  },
16000
16000
  baseline: {
16001
- version: "4.5.1",
16002
- tag: "v4.5.1",
16003
- commit: "489af0245908",
16004
- npm: "@mutmutco/cli@4.5.1"
16001
+ version: "4.5.3",
16002
+ tag: "v4.5.3",
16003
+ commit: "69b2bc590f08",
16004
+ npm: "@mutmutco/cli@4.5.3"
16005
16005
  },
16006
16006
  exitCriterion: "fleet-n-of-n",
16007
16007
  hubOnlyShortcut: "forbidden",
@@ -16018,14 +16018,14 @@ var rollout_plan_default = {
16018
16018
  repo: "mutmutco/mmi-hub",
16019
16019
  role: "canary",
16020
16020
  schedule: "train",
16021
- v3Target: "v4.5.1"
16021
+ v3Target: "v4.5.3"
16022
16022
  }
16023
16023
  ],
16024
16024
  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.",
16025
16025
  rollback: {
16026
16026
  independent: true,
16027
- mechanism: "npm dist-tag latest -> 4.5.1 and redeploy the Hub Lambda from tag v4.5.1 (489af0245908); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
16028
- v3Target: "v4.5.1 (@mutmutco/cli@4.5.1, tag commit 489af0245908 \u2014 last known-good release carrying the repo-index v4-only contract)"
16027
+ mechanism: "npm dist-tag latest -> 4.5.3 and redeploy the Hub Lambda from tag v4.5.3 (69b2bc590f08); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
16028
+ v3Target: "v4.5.3 (@mutmutco/cli@4.5.3, tag commit 69b2bc590f08 \u2014 last known-good release carrying the repo-index v4-only contract)"
16029
16029
  }
16030
16030
  },
16031
16031
  {
@@ -18814,19 +18814,20 @@ function expectedInstallerLogin(family, division) {
18814
18814
  return String(division ?? "").trim().toLowerCase() === "mmi" ? "github" : "google";
18815
18815
  }
18816
18816
  function installerVersionUrl(installer) {
18817
+ if (typeof installer.gate === "string" && installer.gate) return `${installer.gate.replace(/\/+$/, "")}/release/version`;
18817
18818
  return `https://${INSTALLER_FAMILY_HOSTS[installer.family]}/${installer.product}/release/version`;
18818
18819
  }
18819
18820
  function installerDeclarationError(value, division) {
18820
18821
  if (value === void 0 || value === null) return null;
18821
18822
  if (typeof value !== "object" || Array.isArray(value)) {
18822
- return "installer must be an object {product, family, login?}";
18823
+ return "installer must be an object {product, family, login?, gate?}";
18823
18824
  }
18824
18825
  const record = (
18825
18826
  /** @type {Record<string, unknown>} */
18826
18827
  value
18827
18828
  );
18828
18829
  for (const key of Object.keys(record)) {
18829
- if (!["product", "family", "login"].includes(key)) return `installer.${key} is not a field \u2014 expected product, family and optionally login`;
18830
+ if (!["product", "family", "login", "gate"].includes(key)) return `installer.${key} is not a field \u2014 expected product, family and optionally login and gate`;
18830
18831
  }
18831
18832
  if (typeof record.product !== "string" || !PRODUCT_RE.test(record.product)) {
18832
18833
  return "installer.product must be a lowercase kebab name (e.g. mm-strategy) \u2014 it is the /<product> path on the family host";
@@ -18837,6 +18838,9 @@ function installerDeclarationError(value, division) {
18837
18838
  )) {
18838
18839
  return `installer.family must be one of: ${INSTALLER_FAMILIES.join(", ")} (jerv \u2192 ${INSTALLER_FAMILY_HOSTS.jerv}, mmi \u2192 ${INSTALLER_FAMILY_HOSTS.mmi})`;
18839
18840
  }
18841
+ if (record.gate !== void 0 && (typeof record.gate !== "string" || !/^https:\/\/[a-z0-9.-]+\.[a-z]{2,}(\/[A-Za-z0-9._\/-]*)?$/.test(record.gate))) {
18842
+ return "installer.gate must be the https origin of the product's own sign-in server (e.g. https://strategy.mutmut.work)";
18843
+ }
18840
18844
  if (record.login !== void 0 && !INSTALLER_LOGINS.includes(
18841
18845
  /** @type {string} */
18842
18846
  record.login
@@ -19288,8 +19292,9 @@ var SERVED_CHANNELS = {
19288
19292
  "mutmutco/jerv-jervcode": {
19289
19293
  product: "jervcode",
19290
19294
  url: "https://get.jerv.ai/jervcode/release/version",
19291
- mover: "the Jerv Gateway deploy, which fetches JervCode's latest release \u2014 a JervCode release alone does not move it",
19292
- remedy: JERV_GATEWAY_REMEDY
19295
+ // Jerv-JervCode#6456: JervCode's own publish.yml `serve` job moves and proves this pointer.
19296
+ mover: "JervCode's own release (publish.yml `serve` job: `jerv-gate fetch-release --product jervcode` on jerv-central)",
19297
+ remedy: "re-run the `serve` job of the JervCode release's publish.yml run (`gh run rerun <run-id> --job serve --repo mutmutco/Jerv-JervCode`), or `gh workflow run publish.yml --repo mutmutco/Jerv-JervCode -f tag=<tag>`"
19293
19298
  }
19294
19299
  };
19295
19300
  function servedChannelFor(repo, installer) {
@@ -30014,6 +30019,10 @@ function registerBootstrapCommands(program3) {
30014
30019
  await gh(["api", "-X", "POST", `repos/${repo}/git/refs`, "-f", `ref=refs/heads/${seedPlan.branch}`, "-f", `sha=${headSha}`]);
30015
30020
  } catch (e) {
30016
30021
  if (!/Reference already exists|already exists/i.test(String(e.message ?? ""))) throw e;
30022
+ const open2 = await gh(["pr", "list", "--repo", repo, "--head", seedPlan.branch, "--base", baseBranch, "--state", "open", "--json", "number,url"]);
30023
+ if (decideSeedPrAction(JSON.parse(open2.stdout || "[]")).action !== "reuse") {
30024
+ await gh(["api", "-X", "PATCH", `repos/${repo}/git/refs/heads/${seedPlan.branch}`, "-f", `sha=${headSha}`, "-F", "force=true"]);
30025
+ }
30017
30026
  }
30018
30027
  }
30019
30028
  }
@@ -31346,7 +31355,7 @@ var SETTABLE_VAR_HINTS = {
31346
31355
  consumesDesignSystem: '"fofu"',
31347
31356
  runtimeVaultOnly: "true|false",
31348
31357
  seedCanary: "true|false",
31349
- installer: "JSON {product,family:jerv|mmi,login?:github|google} \u2014 the repo ships a one-line installer on get.jerv.ai or get.mutmut.work",
31358
+ installer: "JSON {product,family:jerv|mmi,login?:github|google,gate?:https origin of its own sign-in server} \u2014 the repo ships a one-line installer on get.jerv.ai or get.mutmut.work",
31350
31359
  repos: 'JSON array, e.g. ["mutmutco/mm-foo"]',
31351
31360
  oauth: "JSON {subdomains,domains,callbackPath,extraCallbackPaths}",
31352
31361
  requiredGcpApis: "comma-string",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.1",
3
+ "version": "4.5.3",
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",