@mutmutco/claude-plugin 4.5.157 → 4.5.158
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/.claude-plugin/plugin.json +1 -1
- package/cli/dist/main.cjs +45 -10
- package/cli/package.json +1 -1
- package/package.json +1 -1
package/cli/dist/main.cjs
CHANGED
|
@@ -16372,6 +16372,38 @@ function checkRunbookCoverage(docs, base, git3) {
|
|
|
16372
16372
|
}
|
|
16373
16373
|
return findings;
|
|
16374
16374
|
}
|
|
16375
|
+
function checkSeedRunbookReview(root, base, readFile10, git3) {
|
|
16376
|
+
const manifestJson = readFile10((0, import_node_path15.join)(root, "skills/bootstrap/seeds/manifest.json"));
|
|
16377
|
+
if (!manifestJson) return [];
|
|
16378
|
+
const changed = new Set(git3(["diff", "--name-only", `${base}...HEAD`]).split(/\r?\n/).filter(Boolean));
|
|
16379
|
+
const touched = loadBootstrapSeeds(manifestJson).seeds.filter((seed) => isPropagatableSeed(seed) && changed.has(seedSourcePath(seed)));
|
|
16380
|
+
if (!touched.length) return [];
|
|
16381
|
+
let declarations = null;
|
|
16382
|
+
try {
|
|
16383
|
+
declarations = JSON.parse(readFile10((0, import_node_path15.join)(root, RUNBOOK_UNAFFECTED_PATH)) ?? "null");
|
|
16384
|
+
} catch {
|
|
16385
|
+
declarations = null;
|
|
16386
|
+
}
|
|
16387
|
+
const findings = [];
|
|
16388
|
+
for (const seed of touched) {
|
|
16389
|
+
const source = seedSourcePath(seed);
|
|
16390
|
+
let blob;
|
|
16391
|
+
try {
|
|
16392
|
+
blob = git3(["rev-parse", `HEAD:${source}`]).trim();
|
|
16393
|
+
} catch {
|
|
16394
|
+
continue;
|
|
16395
|
+
}
|
|
16396
|
+
if (!runbookUnaffectedReason(declarations, seed.target, blob)) {
|
|
16397
|
+
findings.push({
|
|
16398
|
+
kind: "seed-runbook-unreviewed",
|
|
16399
|
+
doc: source,
|
|
16400
|
+
line: 0,
|
|
16401
|
+
detail: `${seed.target} (source blob ${blob}): propagatable seed changed without a runbook impact decision; add "${seed.target}": { "blob": "${blob}", "reason": "<why>" } to ${RUNBOOK_UNAFFECTED_PATH} or declare Seed-Runbook-Affected: <reason> in a commit message`
|
|
16402
|
+
});
|
|
16403
|
+
}
|
|
16404
|
+
}
|
|
16405
|
+
return findings;
|
|
16406
|
+
}
|
|
16375
16407
|
function readFileOrNull(path2) {
|
|
16376
16408
|
return (0, import_node_fs17.existsSync)(path2) ? (0, import_node_fs17.readFileSync)(path2, "utf8") : null;
|
|
16377
16409
|
}
|
|
@@ -16505,11 +16537,14 @@ function runDocRefs(root, deps = {}) {
|
|
|
16505
16537
|
if (deps.base) {
|
|
16506
16538
|
const git3 = deps.git ?? ((args) => (0, import_node_child_process6.execFileSync)("git", args, { cwd: root, encoding: "utf8", maxBuffer: CHECK_IGNORE_MAX_BUFFER, windowsHide: true }));
|
|
16507
16539
|
const stale = checkRunbookCoverage(runbooks, deps.base, git3);
|
|
16540
|
+
const seedStale = checkSeedRunbookReview(root, deps.base, readFile10, git3);
|
|
16508
16541
|
const messages = git3(["log", "--format=%B", `${deps.base}..HEAD`]);
|
|
16509
|
-
const sourceMessages = stale.length ? mergeGroupRunbookMessages(root, deps, readFile10, warnings) : "";
|
|
16510
|
-
const
|
|
16511
|
-
${sourceMessages}
|
|
16542
|
+
const sourceMessages = stale.length || seedStale.length ? mergeGroupRunbookMessages(root, deps, readFile10, warnings) : "";
|
|
16543
|
+
const allMessages = `${messages}
|
|
16544
|
+
${sourceMessages}`;
|
|
16545
|
+
const override = /^Runbook-Unaffected:[ \t]*\S.*$/m.test(allMessages);
|
|
16512
16546
|
(override ? warnings : findings).push(...stale);
|
|
16547
|
+
if (!/^Seed-Runbook-Affected:[ \t]*\S.*$/m.test(allMessages)) findings.push(...seedStale);
|
|
16513
16548
|
}
|
|
16514
16549
|
return {
|
|
16515
16550
|
ok: findings.length === 0,
|
|
@@ -18741,10 +18776,10 @@ var rollout_plan_default = {
|
|
|
18741
18776
|
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)."
|
|
18742
18777
|
},
|
|
18743
18778
|
baseline: {
|
|
18744
|
-
version: "4.5.
|
|
18745
|
-
tag: "v4.5.
|
|
18746
|
-
commit: "
|
|
18747
|
-
npm: "@mutmutco/cli@4.5.
|
|
18779
|
+
version: "4.5.158",
|
|
18780
|
+
tag: "v4.5.158",
|
|
18781
|
+
commit: "21733e84802e",
|
|
18782
|
+
npm: "@mutmutco/cli@4.5.158"
|
|
18748
18783
|
},
|
|
18749
18784
|
exitCriterion: "fleet-n-of-n",
|
|
18750
18785
|
hubOnlyShortcut: "forbidden",
|
|
@@ -18761,14 +18796,14 @@ var rollout_plan_default = {
|
|
|
18761
18796
|
repo: "mutmutco/mmi-hub",
|
|
18762
18797
|
role: "canary",
|
|
18763
18798
|
schedule: "train",
|
|
18764
|
-
v3Target: "v4.5.
|
|
18799
|
+
v3Target: "v4.5.158"
|
|
18765
18800
|
}
|
|
18766
18801
|
],
|
|
18767
18802
|
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.",
|
|
18768
18803
|
rollback: {
|
|
18769
18804
|
independent: true,
|
|
18770
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
18771
|
-
v3Target: "v4.5.
|
|
18805
|
+
mechanism: "npm dist-tag latest -> 4.5.158 and redeploy the Hub Lambda from tag v4.5.158 (21733e84802e); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
18806
|
+
v3Target: "v4.5.158 (@mutmutco/cli@4.5.158, tag commit 21733e84802e \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
18772
18807
|
}
|
|
18773
18808
|
},
|
|
18774
18809
|
{
|
package/cli/package.json
CHANGED