@mutmutco/cli 4.5.129 → 4.5.130

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.
Files changed (2) hide show
  1. package/dist/main.cjs +27 -11
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -15380,6 +15380,17 @@ function missingPlaceholders(rendered) {
15380
15380
  function isPropagatableSeed(seed) {
15381
15381
  return seed.ownership === "org" && seed.source === "self" || seed.managedBlock != null;
15382
15382
  }
15383
+ function seedSourcePath(seed) {
15384
+ const source = seed.managedBlock?.source ?? seed.source;
15385
+ return source.startsWith("seed:") ? `skills/bootstrap/seeds/${source.slice(5)}` : seed.target;
15386
+ }
15387
+ var RUNBOOK_UNAFFECTED_PATH = "skills/bootstrap/seeds/runbook-unaffected.json";
15388
+ function runbookUnaffectedReason(declarations, target, sourceBlob) {
15389
+ const entry = declarations?.[target];
15390
+ if (!entry || entry.blob !== sourceBlob || typeof entry.reason !== "string") return void 0;
15391
+ const reason = entry.reason.trim();
15392
+ return reason && !/[\r\n]/.test(reason) ? reason : void 0;
15393
+ }
15383
15394
  function sourceLines(content) {
15384
15395
  const lines2 = [];
15385
15396
  const newline = /\r\n|\n|\r/g;
@@ -17037,9 +17048,12 @@ function planSeedDelivery(branchRules, slug, baseBranch, branchPrefix = "bootstr
17037
17048
  }
17038
17049
  return { mode: "direct", ref: baseBranch, reason: decision.reason };
17039
17050
  }
17040
- function contentPutBody(path2, content, branch, sha) {
17051
+ function contentPutBody(path2, content, branch, sha, runbookUnaffected) {
17041
17052
  const body = {
17042
- message: `bootstrap: seed ${path2}`,
17053
+ // #8169: a reviewed seed revision may declare it leaves runbooks correct; the tenant guard reads the trailer.
17054
+ message: `bootstrap: seed ${path2}${runbookUnaffected ? `
17055
+
17056
+ Runbook-Unaffected: ${runbookUnaffected}` : ""}`,
17043
17057
  content: encodeGitHubContents(content),
17044
17058
  branch
17045
17059
  };
@@ -18244,10 +18258,10 @@ var rollout_plan_default = {
18244
18258
  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)."
18245
18259
  },
18246
18260
  baseline: {
18247
- version: "4.5.129",
18248
- tag: "v4.5.129",
18249
- commit: "a19e76403fdf",
18250
- npm: "@mutmutco/cli@4.5.129"
18261
+ version: "4.5.130",
18262
+ tag: "v4.5.130",
18263
+ commit: "6564bc03d8ee",
18264
+ npm: "@mutmutco/cli@4.5.130"
18251
18265
  },
18252
18266
  exitCriterion: "fleet-n-of-n",
18253
18267
  hubOnlyShortcut: "forbidden",
@@ -18264,14 +18278,14 @@ var rollout_plan_default = {
18264
18278
  repo: "mutmutco/mmi-hub",
18265
18279
  role: "canary",
18266
18280
  schedule: "train",
18267
- v3Target: "v4.5.129"
18281
+ v3Target: "v4.5.130"
18268
18282
  }
18269
18283
  ],
18270
18284
  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.",
18271
18285
  rollback: {
18272
18286
  independent: true,
18273
- mechanism: "npm dist-tag latest -> 4.5.129 and redeploy the Hub Lambda from tag v4.5.129 (a19e76403fdf); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
18274
- v3Target: "v4.5.129 (@mutmutco/cli@4.5.129, tag commit a19e76403fdf \u2014 last known-good release carrying the repo-index v4-only contract)"
18287
+ mechanism: "npm dist-tag latest -> 4.5.130 and redeploy the Hub Lambda from tag v4.5.130 (6564bc03d8ee); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
18288
+ v3Target: "v4.5.130 (@mutmutco/cli@4.5.130, tag commit 6564bc03d8ee \u2014 last known-good release carrying the repo-index v4-only contract)"
18275
18289
  }
18276
18290
  },
18277
18291
  {
@@ -28689,6 +28703,7 @@ var UNBLOCKING_GATE_JOBS_LABEL = "every gate job can block a merge (#7012)";
28689
28703
  var TAG_ADDRESSABLE_CONTEXTS_LABEL = "rc/main required contexts are tag-addressable (#3880)";
28690
28704
  var RELEASE_BRANCH_REACHABLE_LABEL = "rc/main required contexts are reachable from a release-base head (#5193)";
28691
28705
  var DEV_STAGE_FRESH_LABEL = "tenant dev stage runs the development tip (#7536)";
28706
+ var NO_CANCEL_WAIVER = /ci-audit:\s*allow-no-cancel-in-progress\b[^\n]*#\d+/i;
28692
28707
  var DEV_STAGE_STALE_TOLERANCE_MS = 30 * 60 * 1e3;
28693
28708
  function devStageFreshnessCheck(input) {
28694
28709
  const { repo, deployedTag, tipSha, tipCommittedAt, nowMs } = input;
@@ -29372,7 +29387,6 @@ async function auditRepoCi(repo, callerDeps) {
29372
29387
  detail: `${policy} (${reason})`
29373
29388
  });
29374
29389
  }
29375
- const NO_CANCEL_WAIVER = /ci-audit:\s*allow-no-cancel-in-progress\b[^\n]*#\d+/i;
29376
29390
  if (deployableGated || repoClass === "hub") {
29377
29391
  const allPaths = await listWorkflowPaths(deps, repo, baseBranch) ?? [];
29378
29392
  const prPaths = await filterPullRequestTriggered(deps, repo, baseBranch, allPaths);
@@ -36404,6 +36418,8 @@ LIVE apply to ${repo}:
36404
36418
  if (o.execute) {
36405
36419
  if (plan.refusedNoCanary) return fail("bootstrap propagate --execute: no canary declared for this target \u2014 refusing to write (set seedCanary:true on exactly one registry repo)");
36406
36420
  const headSha = seedSource.sha;
36421
+ const sourceBlob = (await execGitForSeedSource(["rev-parse", `${headSha}:${seedSourcePath(seed)}`])).trim();
36422
+ const runbookUnaffected = (0, import_node_fs30.existsSync)(RUNBOOK_UNAFFECTED_PATH) ? runbookUnaffectedReason(JSON.parse((0, import_node_fs30.readFileSync)(RUNBOOK_UNAFFECTED_PATH, "utf8")), seed.target, sourceBlob) : void 0;
36407
36423
  for (const rec of plan.records) {
36408
36424
  if (rec.action !== "open-pr") continue;
36409
36425
  const baseBranch = classOf(rec.repo) === "content" ? "main" : "development";
@@ -36428,7 +36444,7 @@ LIVE apply to ${repo}:
36428
36444
  const tmp = (0, import_node_path29.join)((0, import_node_os18.tmpdir)(), `mmi-propagate-${process.pid}-${Date.now().toString(36)}-${Math.random().toString(36).slice(2)}.json`);
36429
36445
  const desiredContent = desiredByRepo.get(rec.repo);
36430
36446
  if (desiredContent == null) return fail(`bootstrap propagate: no resolved content for ${rec.repo} ${seed.target} \u2014 refusing to write`);
36431
- (0, import_node_fs30.writeFileSync)(tmp, JSON.stringify(contentPutBody(seed.target, desiredContent, branch, existingSha)), "utf8");
36447
+ (0, import_node_fs30.writeFileSync)(tmp, JSON.stringify(contentPutBody(seed.target, desiredContent, branch, existingSha, runbookUnaffected)), "utf8");
36432
36448
  try {
36433
36449
  await gh2(contentPutInputArgs(rec.repo, seed.target, tmp));
36434
36450
  } finally {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.129",
3
+ "version": "4.5.130",
4
4
  "description": "MMI Future CLI — the org dev toolbox and shared cross-IDE engine for every registry-declared MMI coding surface.",
5
5
  "type": "module",
6
6
  "license": "UNLICENSED",