@mutmutco/codex-plugin 4.5.97 → 4.5.98

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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mmi",
3
- "version": "4.5.97",
3
+ "version": "4.5.98",
4
4
  "mmiCompat": "4.x",
5
5
  "description": "MMI workflow skills and org gates delivery.",
6
6
  "author": {
package/cli/dist/main.cjs CHANGED
@@ -17345,10 +17345,10 @@ var rollout_plan_default = {
17345
17345
  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)."
17346
17346
  },
17347
17347
  baseline: {
17348
- version: "4.5.97",
17349
- tag: "v4.5.97",
17350
- commit: "72af9cdfc1b7",
17351
- npm: "@mutmutco/cli@4.5.97"
17348
+ version: "4.5.98",
17349
+ tag: "v4.5.98",
17350
+ commit: "125c59187d10",
17351
+ npm: "@mutmutco/cli@4.5.98"
17352
17352
  },
17353
17353
  exitCriterion: "fleet-n-of-n",
17354
17354
  hubOnlyShortcut: "forbidden",
@@ -17365,14 +17365,14 @@ var rollout_plan_default = {
17365
17365
  repo: "mutmutco/mmi-hub",
17366
17366
  role: "canary",
17367
17367
  schedule: "train",
17368
- v3Target: "v4.5.97"
17368
+ v3Target: "v4.5.98"
17369
17369
  }
17370
17370
  ],
17371
17371
  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.",
17372
17372
  rollback: {
17373
17373
  independent: true,
17374
- mechanism: "npm dist-tag latest -> 4.5.97 and redeploy the Hub Lambda from tag v4.5.97 (72af9cdfc1b7); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17375
- v3Target: "v4.5.97 (@mutmutco/cli@4.5.97, tag commit 72af9cdfc1b7 \u2014 last known-good release carrying the repo-index v4-only contract)"
17374
+ mechanism: "npm dist-tag latest -> 4.5.98 and redeploy the Hub Lambda from tag v4.5.98 (125c59187d10); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
17375
+ v3Target: "v4.5.98 (@mutmutco/cli@4.5.98, tag commit 125c59187d10 \u2014 last known-good release carrying the repo-index v4-only contract)"
17376
17376
  }
17377
17377
  },
17378
17378
  {
@@ -30962,7 +30962,7 @@ init_hub_auth();
30962
30962
  init_github_client();
30963
30963
 
30964
30964
  // src/project-set.ts
30965
- var UNSET_KEYS = ["projectAdmins", "installer", "oauth", "requiredRuntimeSecrets", "requiredBuildSecrets", "tenantTasks", "secrets", "edgeDomains", "requiredGcpApis", "publishRequired", "publishDir", "releaseChannel", "releaseLanguage", "dsManifestPath", "consumesDesignSystem", "ci", "requiredChecks", "requiredCheckBranches", "ciExemptReason", "gate", "seedCanary", "notifyOnDeploy", "vercelVersionEnv", "stageAllowlist", "suiteHold"];
30965
+ var UNSET_KEYS = ["projectAdmins", "installer", "oauth", "requiredRuntimeSecrets", "requiredBuildSecrets", "tenantTasks", "secrets", "edgeDomains", "requiredGcpApis", "publishRequired", "publishDir", "releaseChannel", "releaseLanguage", "dsManifestPath", "consumesDesignSystem", "ci", "requiredChecks", "requiredCheckBranches", "ciExemptReason", "gate", "seedCanary", "notifyOnDeploy", "vercelVersionEnv", "stageAllowlist", "suiteHold", "internalPeers"];
30966
30966
  var UNSET_KEY_SET = new Set(UNSET_KEYS);
30967
30967
  var RUNTIME_SECRET_STAGES = ["dev", "rc", "main"];
30968
30968
  var SECRET_CONSUMERS = ["runtime", "build", "lambda", "actions", "agent", "box"];
@@ -31497,6 +31497,7 @@ var SETTABLE_VAR_KEYS = [
31497
31497
  "requiredRuntimeSecrets",
31498
31498
  "requiredBuildSecrets",
31499
31499
  "tenantTasks",
31500
+ "internalPeers",
31500
31501
  "edgeDomains",
31501
31502
  "statusFieldId",
31502
31503
  "statusOptions",
@@ -31535,6 +31536,7 @@ var SETTABLE_VAR_HINTS = {
31535
31536
  requiredRuntimeSecrets: 'JSON stage map, e.g. {"dev":["KEY"],"rc":["KEY"],"main":["KEY"]}',
31536
31537
  requiredBuildSecrets: 'JSON flat array, e.g. ["NODE_AUTH_TOKEN=@github-packages-token"]',
31537
31538
  tenantTasks: 'JSON map {name:{service,command[],stages[],timeoutSeconds?,artifact?:"required",secretOutput?:{path,vault:{repo,key},overwrite?}}} \u2014 merged per entry, at most 20 stored in total; retire ONE task with --unset-task NAME; use {artifact} in argv when required; a secretOutput is master-only',
31539
+ internalPeers: "JSON {owner/repo:[dev|rc|main]} \u2014 same-box suite peers via the box Caddy; clear with --unset internalPeers (#7886)",
31538
31540
  secrets: "JSON catalog map keyed by KEY {key,purpose,group,owner,stages[],consumers[]} \u2014 merged per entry; drop ONE entry with --unset-secret KEY; clear ALL with --unset secrets --confirm-clear-secrets; prefer --secrets-file",
31539
31541
  edgeDomains: "JSON {dev,rc,main} domain map",
31540
31542
  statusOptions: "JSON name\u2192id map",
@@ -31611,6 +31613,26 @@ function clearSecretsConfirmationError(unsets, existing, confirmed) {
31611
31613
  if (confirmed) return null;
31612
31614
  return `org project set: --unset secrets clears the WHOLE catalog for ${existing?.slug ?? "this project"} (${count} declared entr${count === 1 ? "y" : "ies"} would be removed). To drop ONE entry use --unset-secret <KEY>; re-run with --confirm-clear-secrets to wipe all ${count}.`;
31613
31615
  }
31616
+ function parseInternalPeersVar(raw) {
31617
+ let parsed;
31618
+ try {
31619
+ parsed = JSON.parse(raw);
31620
+ } catch {
31621
+ throw new Error("org project set: internalPeers must be valid JSON");
31622
+ }
31623
+ if (!parsed || typeof parsed !== "object" || Array.isArray(parsed)) throw new Error("org project set: internalPeers must be a JSON object");
31624
+ const entries = Object.entries(parsed);
31625
+ if (entries.length < 1 || entries.length > 20) throw new Error("org project set: internalPeers holds 1-20 peer declarations");
31626
+ const repoRe = /^[A-Za-z0-9_.-]+\/[A-Za-z0-9_.-]+$/;
31627
+ const validStages = /* @__PURE__ */ new Set(["dev", "rc", "main"]);
31628
+ const out = {};
31629
+ for (const [repo, rawStages] of entries) {
31630
+ if (!repoRe.test(repo)) throw new Error("org project set: internalPeers key must look like owner/name \u2014 got " + JSON.stringify(repo));
31631
+ if (!Array.isArray(rawStages) || rawStages.length < 1 || rawStages.length > 3 || rawStages.some((stg) => typeof stg !== "string" || !validStages.has(stg)) || new Set(rawStages).size !== rawStages.length) throw new Error("org project set: internalPeers stages must be a non-empty array of unique dev/rc/main values");
31632
+ out[repo] = rawStages;
31633
+ }
31634
+ return out;
31635
+ }
31614
31636
  function parseSuiteHoldVar(raw) {
31615
31637
  let parsed;
31616
31638
  try {
@@ -31673,6 +31695,8 @@ function buildProjectSetPatch(input) {
31673
31695
  patch[key] = parseBuildSecretsVar(raw);
31674
31696
  } else if (key === "tenantTasks") {
31675
31697
  patch[key] = parseTenantTasksVar(raw);
31698
+ } else if (key === "internalPeers") {
31699
+ patch[key] = parseInternalPeersVar(raw);
31676
31700
  } else if (key === "secrets") {
31677
31701
  patch[key] = parseSecretsCatalogVar(raw);
31678
31702
  } else if (key === "edgeDomains") {
@@ -36547,7 +36571,7 @@ function readSuiteHotfix(path2) {
36547
36571
  } catch {
36548
36572
  throw new Error(`suite hotfix record unreadable at ${path2}; repair it, never restart`);
36549
36573
  }
36550
- if (r.schema !== "mmi-suite-hotfix/v1" || !r.repo || !r.member || !r.from || r.tag !== void 0 && !RELEASE_TAG.test(r.tag) || r.released && !r.tag || r.pinMerged && !r.released || r.leadTag !== void 0 && (!RELEASE_TAG.test(r.leadTag) || !r.pinMerged) || r.leadReleased && !r.leadTag || r.mapped && !r.leadReleased)
36574
+ if (r.schema !== "mmi-suite-hotfix/v1" || !r.repo || !r.member || !r.from || r.tag !== void 0 && !RELEASE_TAG.test(r.tag) || r.released && !r.tag || r.pinMerged && !r.released || r.mainPublished && !r.released || r.leadTag !== void 0 && (!RELEASE_TAG.test(r.leadTag) || !r.pinMerged) || r.leadReleased && !r.leadTag || r.mapped && !r.leadReleased)
36551
36575
  throw new Error(`suite hotfix record has unknown or invalid state at ${path2}; repair it, never restart`);
36552
36576
  return r;
36553
36577
  }
@@ -36562,8 +36586,10 @@ async function suiteHotfix(deps, opts) {
36562
36586
  if (found.repo === SUITE_REPO) throw new Error(`${SUITE_REPO} is the suite lead; hotfix a member, this command cuts the lead; nothing was written`);
36563
36587
  const held = await deps.hold(found);
36564
36588
  if (held) throw new Error(`${found.repo} is HELD (${held.reason}); clear it with suite hold clear before a suite hotfix; nothing was written`);
36589
+ const mainPath = mainBundlePath(found.bundles);
36565
36590
  const plan = [
36566
36591
  `${found.repo}: hotfix start --from ${opts.from} + release (suite-solo, in-process)`,
36592
+ `${found.repo}: publish main bundle (module-rc-publish channel=main) at ${mainPath}`,
36567
36593
  `${SUITE_REPO}: main pin PR for ${found.id}, wait for merge`,
36568
36594
  `${SUITE_REPO}: hotfix (patch) carrying only the merged pin PR onto main`,
36569
36595
  `${SUITE_REPO}: record suite version -> member versions on its release`
@@ -36582,6 +36608,7 @@ async function suiteHotfix(deps, opts) {
36582
36608
  const save = () => writeSuiteHotfix(path2, rec);
36583
36609
  save();
36584
36610
  const resume = `rerun suite hotfix ${found.id} --from ${rec.from} --owner-go to resume`;
36611
+ if (!rec.released) await deps.preflightMain(found.repo, mainPath);
36585
36612
  if (!rec.tag) {
36586
36613
  const started = await deps.hotfixStart(found.repo, { from: rec.from, ack: rec.ack });
36587
36614
  if (!RELEASE_TAG.test(started.tag)) throw new Error(`${found.repo}: hotfix start returned no vX.Y.Z tag`);
@@ -36599,6 +36626,15 @@ async function suiteHotfix(deps, opts) {
36599
36626
  rec.released = true;
36600
36627
  save();
36601
36628
  }
36629
+ if (!rec.mainPublished) {
36630
+ try {
36631
+ await deps.publishMain(found.repo, rec.tag, mainPath);
36632
+ } catch (e) {
36633
+ throw new Error(`${found.repo}: main bundle publish failed (${e.message}); ${rec.tag} is released: ${resume}`);
36634
+ }
36635
+ rec.mainPublished = true;
36636
+ save();
36637
+ }
36602
36638
  if (!rec.pinMerged) {
36603
36639
  const pin = await deps.soloPin(found.repo, rec.tag);
36604
36640
  if (pin.status === "superseded") throw new Error(`${found.id} pin at ${rec.tag} is superseded by ${pin.pr}; a newer ${found.id} release owns the pin; stop`);
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.97",
3
+ "version": "4.5.98",
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",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/codex-plugin",
3
- "version": "4.5.97",
3
+ "version": "4.5.98",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",