@mutmutco/cli 4.5.41 → 4.5.42
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 +41 -7
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -16871,10 +16871,10 @@ var rollout_plan_default = {
|
|
|
16871
16871
|
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)."
|
|
16872
16872
|
},
|
|
16873
16873
|
baseline: {
|
|
16874
|
-
version: "4.5.
|
|
16875
|
-
tag: "v4.5.
|
|
16876
|
-
commit: "
|
|
16877
|
-
npm: "@mutmutco/cli@4.5.
|
|
16874
|
+
version: "4.5.42",
|
|
16875
|
+
tag: "v4.5.42",
|
|
16876
|
+
commit: "448720f2bc43",
|
|
16877
|
+
npm: "@mutmutco/cli@4.5.42"
|
|
16878
16878
|
},
|
|
16879
16879
|
exitCriterion: "fleet-n-of-n",
|
|
16880
16880
|
hubOnlyShortcut: "forbidden",
|
|
@@ -16891,14 +16891,14 @@ var rollout_plan_default = {
|
|
|
16891
16891
|
repo: "mutmutco/mmi-hub",
|
|
16892
16892
|
role: "canary",
|
|
16893
16893
|
schedule: "train",
|
|
16894
|
-
v3Target: "v4.5.
|
|
16894
|
+
v3Target: "v4.5.42"
|
|
16895
16895
|
}
|
|
16896
16896
|
],
|
|
16897
16897
|
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.",
|
|
16898
16898
|
rollback: {
|
|
16899
16899
|
independent: true,
|
|
16900
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
16901
|
-
v3Target: "v4.5.
|
|
16900
|
+
mechanism: "npm dist-tag latest -> 4.5.42 and redeploy the Hub Lambda from tag v4.5.42 (448720f2bc43); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
16901
|
+
v3Target: "v4.5.42 (@mutmutco/cli@4.5.42, tag commit 448720f2bc43 \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
16902
16902
|
}
|
|
16903
16903
|
},
|
|
16904
16904
|
{
|
|
@@ -34652,6 +34652,17 @@ async function carriedPins(deps, member, bundles) {
|
|
|
34652
34652
|
}
|
|
34653
34653
|
throw new Error(`${member.repo}: nothing new since rc, but no pinned MM-Work bundle carries development ${member.development.slice(0, 12)}; pin it before the suite cut`);
|
|
34654
34654
|
}
|
|
34655
|
+
function suiteAbandon(recordPath) {
|
|
34656
|
+
const record = readSuiteCut(recordPath);
|
|
34657
|
+
if (!record) throw new Error("no suite cut record to abandon");
|
|
34658
|
+
if (record.pinPr) {
|
|
34659
|
+
throw new Error(`the cut already opened pin PR ${record.pinPr}; its pins may be visible, so resume it (suite rcand --owner-go) or release it (suite release) instead`);
|
|
34660
|
+
}
|
|
34661
|
+
const archive = `${recordPath}.abandoned-${record.leadDevelopment.slice(0, 12)}.json`;
|
|
34662
|
+
if ((0, import_node_fs29.existsSync)(archive)) throw new Error(`abandoned-cut archive already exists at ${archive}; inspect before abandoning again`);
|
|
34663
|
+
(0, import_node_fs29.renameSync)(recordPath, archive);
|
|
34664
|
+
return { archive, orphanTags: record.members.filter((m) => m.tag).map((m) => `${m.repo}@${m.tag}`) };
|
|
34665
|
+
}
|
|
34655
34666
|
async function suiteRcand(deps, opts) {
|
|
34656
34667
|
if (!opts.ownerGo) throw new Error("suite rcand requires --owner-go (rc uses live data); nothing was written");
|
|
34657
34668
|
const members = suiteMembers(await deps.registry());
|
|
@@ -34669,6 +34680,10 @@ async function suiteRcand(deps, opts) {
|
|
|
34669
34680
|
(0, import_node_fs29.renameSync)(deps.recordPath, archive);
|
|
34670
34681
|
record = void 0;
|
|
34671
34682
|
}
|
|
34683
|
+
if (record && !record.pinPr && record.members.every((m) => !m.tag)) {
|
|
34684
|
+
(0, import_node_fs29.rmSync)(deps.recordPath, { force: true });
|
|
34685
|
+
record = void 0;
|
|
34686
|
+
}
|
|
34672
34687
|
if (!record) {
|
|
34673
34688
|
const [leadDevelopment, leadPreviousRc, snapshots] = await Promise.all([
|
|
34674
34689
|
deps.head(SUITE_REPO, "development"),
|
|
@@ -44930,6 +44945,25 @@ function registerSuiteCommands(program3) {
|
|
|
44930
44945
|
return fail(`suite rcand: ${e.message}`);
|
|
44931
44946
|
}
|
|
44932
44947
|
});
|
|
44948
|
+
suite.command("abandon").description("retire an unfinished cut that opened no pin PR: archive the record; member rc tags stay (#7396)").option("--json", "structured receipt").action(async (o) => {
|
|
44949
|
+
try {
|
|
44950
|
+
const root = await leadRoot();
|
|
44951
|
+
const unlock = await acquireTrainWriterLock(root, "suite abandon");
|
|
44952
|
+
let result;
|
|
44953
|
+
try {
|
|
44954
|
+
result = suiteAbandon(suiteTrainIo(root).recordPath);
|
|
44955
|
+
} finally {
|
|
44956
|
+
await unlock();
|
|
44957
|
+
}
|
|
44958
|
+
console.log(o.json ? JSON.stringify(result, null, 2) : [
|
|
44959
|
+
`suite abandon: archived the cut record to ${result.archive}`,
|
|
44960
|
+
...result.orphanTags.length ? [" member rc tags left in place (immutable; the next rc supersedes them):", ...result.orphanTags.map((t) => ` - ${t}`)] : [" no member rc tag was minted"],
|
|
44961
|
+
" the next suite rcand --owner-go re-snapshots every member"
|
|
44962
|
+
].join("\n"));
|
|
44963
|
+
} catch (e) {
|
|
44964
|
+
return fail(`suite abandon: ${e.message}`);
|
|
44965
|
+
}
|
|
44966
|
+
});
|
|
44933
44967
|
suite.command("release").description("verify the cut and unchanged live backends, ship members then MM-Work, announce once").option("--owner-go", "explicit owner approval to release the tested candidate").option("--announce-summary-file <path>", "curated suite announcement, posted once after the train").option("--json", "structured receipt").action(async (o) => {
|
|
44934
44968
|
try {
|
|
44935
44969
|
if (!o.ownerGo) throw new Error("suite release requires --owner-go; nothing was written");
|
package/package.json
CHANGED