@mutmutco/cli 4.1.5 → 4.1.6
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 +71 -9
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -13152,10 +13152,10 @@ var rollout_plan_default = {
|
|
|
13152
13152
|
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)."
|
|
13153
13153
|
},
|
|
13154
13154
|
baseline: {
|
|
13155
|
-
version: "4.1.
|
|
13156
|
-
tag: "v4.1.
|
|
13157
|
-
commit: "
|
|
13158
|
-
npm: "@mutmutco/cli@4.1.
|
|
13155
|
+
version: "4.1.6",
|
|
13156
|
+
tag: "v4.1.6",
|
|
13157
|
+
commit: "45c61a1dd6f6",
|
|
13158
|
+
npm: "@mutmutco/cli@4.1.6"
|
|
13159
13159
|
},
|
|
13160
13160
|
exitCriterion: "fleet-n-of-n",
|
|
13161
13161
|
hubOnlyShortcut: "forbidden",
|
|
@@ -13172,14 +13172,14 @@ var rollout_plan_default = {
|
|
|
13172
13172
|
repo: "mutmutco/mmi-hub",
|
|
13173
13173
|
role: "canary",
|
|
13174
13174
|
schedule: "train",
|
|
13175
|
-
v3Target: "v4.1.
|
|
13175
|
+
v3Target: "v4.1.6"
|
|
13176
13176
|
}
|
|
13177
13177
|
],
|
|
13178
13178
|
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.",
|
|
13179
13179
|
rollback: {
|
|
13180
13180
|
independent: true,
|
|
13181
|
-
mechanism: "npm dist-tag latest -> 4.1.
|
|
13182
|
-
v3Target: "v4.1.
|
|
13181
|
+
mechanism: "npm dist-tag latest -> 4.1.6 and redeploy the Hub Lambda from tag v4.1.6 (45c61a1dd6f6); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
13182
|
+
v3Target: "v4.1.6 (@mutmutco/cli@4.1.6, tag commit 45c61a1dd6f6 \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
13183
13183
|
}
|
|
13184
13184
|
},
|
|
13185
13185
|
{
|
|
@@ -26381,17 +26381,28 @@ async function gcRepoIndexCloud(deps) {
|
|
|
26381
26381
|
{ attempts: 1, timeoutMs, sleep: deps.retrySleep }
|
|
26382
26382
|
);
|
|
26383
26383
|
const body = await res.json().catch(() => ({}));
|
|
26384
|
-
if (!res.ok)
|
|
26384
|
+
if (!res.ok) {
|
|
26385
|
+
const detail = typeof body.error === "string" ? body.error : `gc HTTP ${res.status}`;
|
|
26386
|
+
return { ok: false, error: detail };
|
|
26387
|
+
}
|
|
26388
|
+
if (body.ok === false) {
|
|
26389
|
+
return { ok: false, error: typeof body.error === "string" ? body.error : "repo-index gc failed" };
|
|
26390
|
+
}
|
|
26385
26391
|
const removed = Array.isArray(body.removed) ? body.removed.filter((repo) => typeof repo === "string") : [];
|
|
26386
26392
|
const kept = Number(body.kept);
|
|
26393
|
+
const pendingRepos = Array.isArray(body.pendingRepos) ? body.pendingRepos.filter((repo) => typeof repo === "string") : void 0;
|
|
26394
|
+
const repoErrors = body.repoErrors && typeof body.repoErrors === "object" && !Array.isArray(body.repoErrors) ? Object.fromEntries(Object.entries(body.repoErrors).filter((entry) => typeof entry[1] === "string")) : void 0;
|
|
26387
26395
|
return {
|
|
26388
26396
|
ok: true,
|
|
26397
|
+
...body.partial === true ? { partial: true } : {},
|
|
26389
26398
|
removed,
|
|
26390
26399
|
kept: Number.isFinite(kept) ? kept : 0,
|
|
26391
26400
|
v4: {
|
|
26392
26401
|
dryRun: body.v4?.dryRun === true,
|
|
26393
26402
|
repos: normalizeGcV4Repos(body.v4?.repos)
|
|
26394
|
-
}
|
|
26403
|
+
},
|
|
26404
|
+
...pendingRepos?.length ? { pendingRepos } : {},
|
|
26405
|
+
...repoErrors && Object.keys(repoErrors).length ? { repoErrors } : {}
|
|
26395
26406
|
};
|
|
26396
26407
|
} catch (e) {
|
|
26397
26408
|
const msg = e.message || String(e);
|
|
@@ -35423,6 +35434,7 @@ Next command: ${report.nextCommand}`);
|
|
|
35423
35434
|
// src/explain-command.ts
|
|
35424
35435
|
init_cli_shared();
|
|
35425
35436
|
init_error_codes();
|
|
35437
|
+
init_house_map();
|
|
35426
35438
|
var LOOP_PLAYBOOKS = {
|
|
35427
35439
|
agent: {
|
|
35428
35440
|
title: "Agent",
|
|
@@ -35613,7 +35625,50 @@ function explainCommandManifest(manifest, command, opts = {}) {
|
|
|
35613
35625
|
}
|
|
35614
35626
|
};
|
|
35615
35627
|
}
|
|
35628
|
+
function houseEntryAsChild(entry, house) {
|
|
35629
|
+
return {
|
|
35630
|
+
name: entry.path.split(" ").pop() ?? entry.path,
|
|
35631
|
+
path: entry.canonical,
|
|
35632
|
+
flat_path: entry.path,
|
|
35633
|
+
house,
|
|
35634
|
+
canonical: entry.canonical,
|
|
35635
|
+
...entry.description ? { description: entry.description } : {},
|
|
35636
|
+
arguments: [],
|
|
35637
|
+
options: [],
|
|
35638
|
+
subcommands: [],
|
|
35639
|
+
category: "core",
|
|
35640
|
+
discovery: "primary",
|
|
35641
|
+
help_group: "Plan and work",
|
|
35642
|
+
module_owner: "unclassified",
|
|
35643
|
+
consumer: "unclassified"
|
|
35644
|
+
};
|
|
35645
|
+
}
|
|
35646
|
+
function houseRootAsParent(manifest, house) {
|
|
35647
|
+
const subcommands = house.commands.map(
|
|
35648
|
+
(entry) => findCommandInManifest(manifest, entry.canonical) ?? houseEntryAsChild(entry, house.root)
|
|
35649
|
+
);
|
|
35650
|
+
return {
|
|
35651
|
+
name: house.root,
|
|
35652
|
+
path: house.root,
|
|
35653
|
+
flat_path: house.root,
|
|
35654
|
+
house: house.root,
|
|
35655
|
+
canonical: house.root,
|
|
35656
|
+
description: HOUSE_QUESTIONS[house.root],
|
|
35657
|
+
arguments: [],
|
|
35658
|
+
options: [],
|
|
35659
|
+
subcommands,
|
|
35660
|
+
category: "core",
|
|
35661
|
+
discovery: "primary",
|
|
35662
|
+
help_group: "Plan and work",
|
|
35663
|
+
module_owner: "unclassified",
|
|
35664
|
+
consumer: "unclassified"
|
|
35665
|
+
};
|
|
35666
|
+
}
|
|
35616
35667
|
function findCommandInManifest(manifest, commandPath3) {
|
|
35668
|
+
if (isHouseRoot(commandPath3)) {
|
|
35669
|
+
const house = manifest.houses.find((entry) => entry.root === commandPath3);
|
|
35670
|
+
return house ? houseRootAsParent(manifest, house) : void 0;
|
|
35671
|
+
}
|
|
35617
35672
|
const visit = (command) => {
|
|
35618
35673
|
if (command.path === commandPath3 || command.flat_path === commandPath3) return command;
|
|
35619
35674
|
for (const child2 of command.subcommands) {
|
|
@@ -40687,6 +40742,13 @@ repoIndex.command("gc").description("remove v4 cloud authority material for repo
|
|
|
40687
40742
|
console.log(
|
|
40688
40743
|
`repo-index: gc tombstoned ${res.removed.length} orphan authorit${res.removed.length === 1 ? "y" : "ies"}, removed ${artifactsRemoved} artifact(s); kept ${res.kept} authorit${res.kept === 1 ? "y" : "ies"}, ${artifactsKept} artifact(s)`
|
|
40689
40744
|
);
|
|
40745
|
+
if (res.partial) {
|
|
40746
|
+
const pending = res.pendingRepos?.length ?? 0;
|
|
40747
|
+
const errors = res.repoErrors ? Object.keys(res.repoErrors).length : 0;
|
|
40748
|
+
console.warn(
|
|
40749
|
+
`repo-index: gc partial \u2014 ${pending} repo(s) pending${errors ? `, ${errors} repo error(s)` : ""}; retry gc until pendingRepos is empty`
|
|
40750
|
+
);
|
|
40751
|
+
}
|
|
40690
40752
|
} catch (e) {
|
|
40691
40753
|
return await failGraceful(e.message);
|
|
40692
40754
|
}
|
package/package.json
CHANGED