@mutmutco/cli 4.3.64 → 4.3.66
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 +35 -12
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -15801,10 +15801,10 @@ var rollout_plan_default = {
|
|
|
15801
15801
|
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)."
|
|
15802
15802
|
},
|
|
15803
15803
|
baseline: {
|
|
15804
|
-
version: "4.3.
|
|
15805
|
-
tag: "v4.3.
|
|
15806
|
-
commit: "
|
|
15807
|
-
npm: "@mutmutco/cli@4.3.
|
|
15804
|
+
version: "4.3.66",
|
|
15805
|
+
tag: "v4.3.66",
|
|
15806
|
+
commit: "a6cdc9d43e2e",
|
|
15807
|
+
npm: "@mutmutco/cli@4.3.66"
|
|
15808
15808
|
},
|
|
15809
15809
|
exitCriterion: "fleet-n-of-n",
|
|
15810
15810
|
hubOnlyShortcut: "forbidden",
|
|
@@ -15821,14 +15821,14 @@ var rollout_plan_default = {
|
|
|
15821
15821
|
repo: "mutmutco/mmi-hub",
|
|
15822
15822
|
role: "canary",
|
|
15823
15823
|
schedule: "train",
|
|
15824
|
-
v3Target: "v4.3.
|
|
15824
|
+
v3Target: "v4.3.66"
|
|
15825
15825
|
}
|
|
15826
15826
|
],
|
|
15827
15827
|
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.",
|
|
15828
15828
|
rollback: {
|
|
15829
15829
|
independent: true,
|
|
15830
|
-
mechanism: "npm dist-tag latest -> 4.3.
|
|
15831
|
-
v3Target: "v4.3.
|
|
15830
|
+
mechanism: "npm dist-tag latest -> 4.3.66 and redeploy the Hub Lambda from tag v4.3.66 (a6cdc9d43e2e); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
15831
|
+
v3Target: "v4.3.66 (@mutmutco/cli@4.3.66, tag commit a6cdc9d43e2e \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
15832
15832
|
}
|
|
15833
15833
|
},
|
|
15834
15834
|
{
|
|
@@ -28077,11 +28077,21 @@ function applyWaivers(checks, waivers) {
|
|
|
28077
28077
|
const set = new Set(waivers);
|
|
28078
28078
|
return checks.map((c) => !c.ok && set.has(c.label) ? { ...c, waived: true } : c);
|
|
28079
28079
|
}
|
|
28080
|
+
function laneNotEvaluatedFromThisBranch(doctor) {
|
|
28081
|
+
if (doctor.ready) return void 0;
|
|
28082
|
+
const reasons = doctor.findings.filter((f) => f.severity === "blocker" || f.code === "origin-unverified");
|
|
28083
|
+
const only = reasons.length === 1 ? reasons[0] : void 0;
|
|
28084
|
+
return only?.code === "branch-mismatch" ? only.title : void 0;
|
|
28085
|
+
}
|
|
28080
28086
|
function attachTrainDoctorVerdicts(report, trainDoctors) {
|
|
28087
|
+
const marked = trainDoctors.map((doctor) => {
|
|
28088
|
+
const notEvaluatedFromThisBranch = laneNotEvaluatedFromThisBranch(doctor);
|
|
28089
|
+
return notEvaluatedFromThisBranch ? { ...doctor, notEvaluatedFromThisBranch } : doctor;
|
|
28090
|
+
});
|
|
28081
28091
|
return {
|
|
28082
28092
|
...report,
|
|
28083
|
-
ok: report.ok &&
|
|
28084
|
-
...
|
|
28093
|
+
ok: report.ok && marked.every((doctor) => doctor.ready || doctor.notEvaluatedFromThisBranch !== void 0),
|
|
28094
|
+
...marked.length ? { trainDoctors: marked } : {}
|
|
28085
28095
|
};
|
|
28086
28096
|
}
|
|
28087
28097
|
function renderBootstrapVerifyReport(report) {
|
|
@@ -28090,7 +28100,12 @@ function renderBootstrapVerifyReport(report) {
|
|
|
28090
28100
|
const status = check.ok ? "OK" : check.waived ? "WAIVE" : "FAIL";
|
|
28091
28101
|
lines2.push(`${status} ${check.code ? `[${check.code}] ` : ""}${check.label}${check.detail ? ` - ${check.detail}` : ""}`);
|
|
28092
28102
|
}
|
|
28093
|
-
for (const doctor of report.trainDoctors ?? [])
|
|
28103
|
+
for (const doctor of report.trainDoctors ?? []) {
|
|
28104
|
+
lines2.push("", formatTrainDoctor(doctor));
|
|
28105
|
+
if (doctor.notEvaluatedFromThisBranch) {
|
|
28106
|
+
lines2.push(` NOT EVALUATED from this branch \u2014 ${doctor.notEvaluatedFromThisBranch}; one checkout stands on one branch, so this lane does not fail the verify (#6677). Run \`mmi-cli devops train doctor --lane ${doctor.lane}\` from that branch for its own verdict.`);
|
|
28107
|
+
}
|
|
28108
|
+
}
|
|
28094
28109
|
return lines2.join("\n");
|
|
28095
28110
|
}
|
|
28096
28111
|
|
|
@@ -31923,7 +31938,8 @@ var surfaces_default = {
|
|
|
31923
31938
|
enforcementCeilings: [
|
|
31924
31939
|
"MMI ships no Hermes hooks (#5908): the plugin contributes skills and the /mmi command only; enforcement is host-side.",
|
|
31925
31940
|
"Hermes user plugins are opt-in through plugins.enabled (#6656): after a verified converge MMI-Hub enables its OWN mmi key through Hermes' own `hermes plugins enable mmi --no-allow-tool-override` command, and never reads, reorders, or writes another operator entry. Built-in tool override is explicitly declined, since MMI ships no Hermes hooks. Host process isolation remains Hermes-owned.",
|
|
31926
|
-
"npm is MMI transport only: MMI-Hub extracts @mutmutco/hermes-plugin into $HERMES_HOME/plugins/mmi and provisions the canonical skills into $HERMES_HOME/skills/mmi/; a fresh Hermes Agent process is required for discovery."
|
|
31941
|
+
"npm is MMI transport only: MMI-Hub extracts @mutmutco/hermes-plugin into $HERMES_HOME/plugins/mmi and provisions the canonical skills into $HERMES_HOME/skills/mmi/; a fresh Hermes Agent process is required for discovery.",
|
|
31942
|
+
"Every Hermes home is covered per home (#6672): a profile under $HERMES_HOME/profiles/<name> is a full sibling home and Hermes scans only the active home's plugins/, so MMI-Hub repeats the same single-home install, skills provisioning, and host-command enable in the resolved home and in each profile home with HERMES_HOME bound to it. No profile is enumerated for any other purpose, and nothing outside those per-home MMI paths is read or written."
|
|
31927
31943
|
]
|
|
31928
31944
|
}
|
|
31929
31945
|
],
|
|
@@ -44604,6 +44620,11 @@ function emitTrainResult(label, output, out) {
|
|
|
44604
44620
|
if (!out) printLine(output);
|
|
44605
44621
|
else printLine(`Wrote ${label} result to ${out} (UTF-8, ${writeUtf8Receipt(out, output)} bytes)`);
|
|
44606
44622
|
}
|
|
44623
|
+
function writeTrainFailureReceipt(commandName, json, out, error) {
|
|
44624
|
+
if (!out) return;
|
|
44625
|
+
const output = json ? JSON.stringify({ command: `${commandName} --apply`, verdict: "failed", error: error.message }, null, 2) : `mmi-cli ${commandName} --apply: FAILED \u2014 ${error.message}`;
|
|
44626
|
+
emitTrainResult(`${commandName} apply`, output, out);
|
|
44627
|
+
}
|
|
44607
44628
|
function renderTenantRedeploy(r) {
|
|
44608
44629
|
return `mmi-cli devops runtime tenant redeploy: ${r.repo} ${r.stage} (ref=${r.ref}) [${r.deployModel}]; ${renderDeployLine(r)}`;
|
|
44609
44630
|
}
|
|
@@ -44852,9 +44873,11 @@ function registerTrainOperationsCommands(program3, runProjectInfoSyncCallback) {
|
|
|
44852
44873
|
applyTrainFollowUpExit(followUpStatus);
|
|
44853
44874
|
return;
|
|
44854
44875
|
} catch (e) {
|
|
44876
|
+
const error = e;
|
|
44877
|
+
writeTrainFailureReceipt(commandName, o.json === true, o.out, error);
|
|
44855
44878
|
process.exitCode = 1;
|
|
44856
44879
|
if (commandName === "release") consoleIo.err("mmi-cli: Release: Release blocked \u2014 see the error below");
|
|
44857
|
-
return await failGraceful(`${commandName}: ${
|
|
44880
|
+
return await failGraceful(`${commandName}: ${error.message}`);
|
|
44858
44881
|
}
|
|
44859
44882
|
}
|
|
44860
44883
|
const repo = o.repo ?? await resolveRepo();
|
package/package.json
CHANGED