@mutmutco/cli 4.5.2 → 4.5.4
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.
- package/dist/main.cjs +33 -36
- 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.
|
|
16002
|
-
tag: "v4.5.
|
|
16003
|
-
commit: "
|
|
16004
|
-
npm: "@mutmutco/cli@4.5.
|
|
16001
|
+
version: "4.5.4",
|
|
16002
|
+
tag: "v4.5.4",
|
|
16003
|
+
commit: "0993d5d2fa7b",
|
|
16004
|
+
npm: "@mutmutco/cli@4.5.4"
|
|
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.
|
|
16021
|
+
v3Target: "v4.5.4"
|
|
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.
|
|
16028
|
-
v3Target: "v4.5.
|
|
16027
|
+
mechanism: "npm dist-tag latest -> 4.5.4 and redeploy the Hub Lambda from tag v4.5.4 (0993d5d2fa7b); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
16028
|
+
v3Target: "v4.5.4 (@mutmutco/cli@4.5.4, tag commit 0993d5d2fa7b \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
16029
16029
|
}
|
|
16030
16030
|
},
|
|
16031
16031
|
{
|
|
@@ -19275,37 +19275,14 @@ function staleServedProcess(probe) {
|
|
|
19275
19275
|
function servedChannelRow(product, conclusion, evidence) {
|
|
19276
19276
|
return { workflow: `served-channel(${product})`, runUrlNote: evidence, conclusion };
|
|
19277
19277
|
}
|
|
19278
|
-
var JERV_GATEWAY_REMEDY = "from the Jerv-Hub checkout, re-run the Gateway deploy on its current release tag: `bash scripts/jerv-gateway-release-deploy.sh --tag <jerv-hub tag>`";
|
|
19279
|
-
var SERVED_CHANNELS = {
|
|
19280
|
-
"mutmutco/mm-strategy": {
|
|
19281
|
-
product: "mm-strategy",
|
|
19282
|
-
url: "https://strategy.mutmut.work/release/version",
|
|
19283
|
-
mover: "the MM-Strategy container deploy (the running server's own version is the pointer)",
|
|
19284
|
-
remedy: "`mmi-cli devops runtime tenant redeploy mutmutco/MM-Strategy main`"
|
|
19285
|
-
},
|
|
19286
|
-
"mutmutco/jerv-hub": {
|
|
19287
|
-
product: "jerv",
|
|
19288
|
-
url: "https://get.jerv.ai/jerv/release/version",
|
|
19289
|
-
mover: "the Jerv Gateway deploy (`jerv-gate fetch-release --product jerv`)",
|
|
19290
|
-
remedy: JERV_GATEWAY_REMEDY
|
|
19291
|
-
},
|
|
19292
|
-
"mutmutco/jerv-jervcode": {
|
|
19293
|
-
product: "jervcode",
|
|
19294
|
-
url: "https://get.jerv.ai/jervcode/release/version",
|
|
19295
|
-
mover: "the Jerv Gateway deploy, which fetches JervCode's latest release \u2014 a JervCode release alone does not move it",
|
|
19296
|
-
remedy: JERV_GATEWAY_REMEDY
|
|
19297
|
-
}
|
|
19298
|
-
};
|
|
19299
19278
|
function servedChannelFor(repo, installer) {
|
|
19300
|
-
|
|
19301
|
-
if (!installer) return known;
|
|
19279
|
+
if (!installer) return void 0;
|
|
19302
19280
|
if (isHubControlRepo(repo)) return void 0;
|
|
19303
|
-
const url = installerVersionUrl(installer);
|
|
19304
19281
|
return {
|
|
19305
19282
|
product: installer.product,
|
|
19306
|
-
url,
|
|
19307
|
-
mover:
|
|
19308
|
-
remedy:
|
|
19283
|
+
url: installerVersionUrl(installer),
|
|
19284
|
+
mover: `this repo's own release (it serves /${installer.product} on its installer host)`,
|
|
19285
|
+
remedy: `re-run this repo's own served-channel publish for ${installer.product}, then \`mmi-cli devops release --resume\``
|
|
19309
19286
|
};
|
|
19310
19287
|
}
|
|
19311
19288
|
var SERVED_CHANNEL_PROBE_ATTEMPTS = 3;
|
|
@@ -30018,6 +29995,10 @@ function registerBootstrapCommands(program3) {
|
|
|
30018
29995
|
await gh(["api", "-X", "POST", `repos/${repo}/git/refs`, "-f", `ref=refs/heads/${seedPlan.branch}`, "-f", `sha=${headSha}`]);
|
|
30019
29996
|
} catch (e) {
|
|
30020
29997
|
if (!/Reference already exists|already exists/i.test(String(e.message ?? ""))) throw e;
|
|
29998
|
+
const open2 = await gh(["pr", "list", "--repo", repo, "--head", seedPlan.branch, "--base", baseBranch, "--state", "open", "--json", "number,url"]);
|
|
29999
|
+
if (decideSeedPrAction(JSON.parse(open2.stdout || "[]")).action !== "reuse") {
|
|
30000
|
+
await gh(["api", "-X", "PATCH", `repos/${repo}/git/refs/heads/${seedPlan.branch}`, "-f", `sha=${headSha}`, "-F", "force=true"]);
|
|
30001
|
+
}
|
|
30021
30002
|
}
|
|
30022
30003
|
}
|
|
30023
30004
|
}
|
|
@@ -44349,6 +44330,15 @@ function neutralizeHubProductBrands(text) {
|
|
|
44349
44330
|
s = s.replace(/\bdesign-system\s+design-system\b/gi, "design-system");
|
|
44350
44331
|
return s.replace(/\s{2,}/g, " ").trim();
|
|
44351
44332
|
}
|
|
44333
|
+
var JERV_SIDE = /\bjerv/i;
|
|
44334
|
+
function namesJervSide(text) {
|
|
44335
|
+
return JERV_SIDE.test(text);
|
|
44336
|
+
}
|
|
44337
|
+
function hubSummaryJervRefusal(lines2) {
|
|
44338
|
+
const bad = lines2.filter(namesJervSide);
|
|
44339
|
+
if (bad.length === 0) return null;
|
|
44340
|
+
return `--announce-summary-file names a Jerv-side project in ${bad.length} line(s) \u2014 an MMI-Hub release note describes MMI-Hub only and never mentions Jerv-side projects; drop or rewrite those lines, then rerun the same command`;
|
|
44341
|
+
}
|
|
44352
44342
|
function escapeMrkdwn(text) {
|
|
44353
44343
|
return text.replace(/&/g, "&").replace(/</g, "<").replace(/>/g, ">");
|
|
44354
44344
|
}
|
|
@@ -44460,6 +44450,7 @@ async function announceRelease(deps, args) {
|
|
|
44460
44450
|
}
|
|
44461
44451
|
lines2 = curateReleaseNotes(view.body ?? "", MAX_BULLETS, neutralize);
|
|
44462
44452
|
}
|
|
44453
|
+
if (neutralize) lines2 = lines2.filter((l) => !namesJervSide(l));
|
|
44463
44454
|
if (lines2.length === 0) lines2 = ["\u2022 maintenance release \u2014 see the notes for details"];
|
|
44464
44455
|
const text = formatAnnouncement({
|
|
44465
44456
|
repo: args.repo,
|
|
@@ -45219,6 +45210,8 @@ async function runHotfixReleaseLocked(deps, versionInput, options, doctor) {
|
|
|
45219
45210
|
if (lines2.length < 3 || lines2.length > 6) {
|
|
45220
45211
|
throw new Error(`--announce-summary-file must contain 3-6 non-empty LLM-curated lines (found ${lines2.length}) \u2014 see docs/Guides/train-troubleshooting.md#announce-summary-missing`);
|
|
45221
45212
|
}
|
|
45213
|
+
const jerv = hubSummaryJervRefusal(lines2);
|
|
45214
|
+
if (jerv) throw new Error(jerv);
|
|
45222
45215
|
let rangeLog;
|
|
45223
45216
|
try {
|
|
45224
45217
|
rangeLog = await deps.run("git", ["log", "--format=%B", "origin/main..HEAD"]);
|
|
@@ -45971,7 +45964,7 @@ var NODE_VERIFY_TIMEOUT_MS = 5 * 6e4;
|
|
|
45971
45964
|
var NPM_TRAIN_TIMEOUT_MS = 6e4;
|
|
45972
45965
|
var NPM_FOLD_TIMEOUT_MS = NODE_PREPARE_TIMEOUT_MS;
|
|
45973
45966
|
var JERV_GATEWAY_DEPLOY_TIMEOUT_MS = 20 * 6e4;
|
|
45974
|
-
async function announceSummaryRefusal(path2) {
|
|
45967
|
+
async function announceSummaryRefusal(path2, isHub = false) {
|
|
45975
45968
|
let lines2;
|
|
45976
45969
|
try {
|
|
45977
45970
|
lines2 = summaryFileLines(await (0, import_promises10.readFile)(path2, "utf8"));
|
|
@@ -45981,6 +45974,10 @@ async function announceSummaryRefusal(path2) {
|
|
|
45981
45974
|
if (lines2.length < 3 || lines2.length > 6) {
|
|
45982
45975
|
return `release: --announce-summary-file must contain 3-6 non-empty LLM-curated lines (found ${lines2.length}) \u2014 see docs/Guides/train-troubleshooting.md#announce-summary-missing`;
|
|
45983
45976
|
}
|
|
45977
|
+
if (isHub) {
|
|
45978
|
+
const jerv = hubSummaryJervRefusal(lines2);
|
|
45979
|
+
if (jerv) return `release: ${jerv}`;
|
|
45980
|
+
}
|
|
45984
45981
|
try {
|
|
45985
45982
|
await execFileP("git", ["fetch", "origin"], { timeout: GIT_TIMEOUT_MS });
|
|
45986
45983
|
} catch (e) {
|
|
@@ -46598,7 +46595,7 @@ function registerTrainOperationsCommands(program3, runProjectInfoSyncCallback) {
|
|
|
46598
46595
|
isHub ? "release: a new MMI-Hub release requires --announce-summary-file <path> with 3-6 short LLM-curated lines; create the summary file, then rerun the same release command \u2014 see docs/Guides/train-troubleshooting.md#announce-summary-missing" : `release: ${slug} announces to its project release channel, so a new release requires --announce-summary-file <path> with 3-6 short plain-language lines in the project's releaseLanguage (${releaseLanguage2}); create the summary file, then rerun the same release command \u2014 see docs/Guides/train-troubleshooting.md#announce-summary-missing`
|
|
46599
46596
|
);
|
|
46600
46597
|
}
|
|
46601
|
-
const refusal = await announceSummaryRefusal(o.announceSummaryFile);
|
|
46598
|
+
const refusal = await announceSummaryRefusal(o.announceSummaryFile, isHub);
|
|
46602
46599
|
if (refusal) return fail(refusal);
|
|
46603
46600
|
}
|
|
46604
46601
|
}
|
package/package.json
CHANGED