@mutmutco/codex-plugin 4.5.160 → 4.5.161

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.160",
3
+ "version": "4.5.161",
4
4
  "mmiCompat": "4.x",
5
5
  "description": "MMI workflow skills and org gates delivery.",
6
6
  "author": {
package/cli/dist/main.cjs CHANGED
@@ -10312,7 +10312,7 @@ init_github_client();
10312
10312
  // src/project-model.ts
10313
10313
  var PROJECT_TYPES = ["web-app", "hub-service", "content", "desktop-app", "desktop-game", "mobile-app", "non-deployable", "cli-tool", "worker"];
10314
10314
  var DEPLOY_MODELS = ["hub-serverless", "serverless", "tenant-container", "solo-container", "static-cdn", "registry-publish", "content", "none", "vercel"];
10315
- var RELEASE_TRACKS = ["full", "direct", "trunk"];
10315
+ var RELEASE_TRACKS = ["full", "direct", "trunk", "single"];
10316
10316
  var REQUIRED_CHECK_BRANCHES = ["development", "rc", "main"];
10317
10317
  var PROJECT_TYPE_SET = new Set(PROJECT_TYPES);
10318
10318
  var DEPLOY_MODEL_SET = new Set(DEPLOY_MODELS);
@@ -10395,6 +10395,7 @@ function metaWithDeclaredClass(meta, declaredClass) {
10395
10395
  }
10396
10396
  function branchesForTrack(track) {
10397
10397
  if (track === "trunk") return ["main"];
10398
+ if (track === "single") return ["development"];
10398
10399
  if (track === "direct") return ["development", "main"];
10399
10400
  return ["development", "rc", "main"];
10400
10401
  }
@@ -10406,7 +10407,7 @@ function resolveRequiredCheckBranches(meta, repo) {
10406
10407
  return branchesForTrack(resolveReleaseTrack(meta, void 0, repo));
10407
10408
  }
10408
10409
  function promotionBranchesForTrack(track) {
10409
- if (track === "trunk") return [];
10410
+ if (track === "trunk" || track === "single") return [];
10410
10411
  if (track === "direct") return ["main"];
10411
10412
  return ["rc", "main"];
10412
10413
  }
@@ -17182,7 +17183,7 @@ function gateSeedVars(cls, releaseTrack, runtime = "node", requiredCheckBranches
17182
17183
  GATE_EXTRA_STEPS_YAML: ""
17183
17184
  };
17184
17185
  const track = releaseTrack ?? (cls === "content" ? "trunk" : "full");
17185
- const trackBranches = track === "trunk" ? ["main"] : track === "direct" ? ["development", "main"] : ["development", "rc", "main"];
17186
+ const trackBranches = track === "trunk" ? ["main"] : track === "single" ? ["development"] : track === "direct" ? ["development", "main"] : ["development", "rc", "main"];
17186
17187
  const rulesetBranches = requiredCheckBranches?.length ? [...requiredCheckBranches] : trackBranches;
17187
17188
  const rulesetRefs = JSON.stringify(rulesetBranches.map((branch) => `refs/heads/${branch}`));
17188
17189
  const rulesetContexts = JSON.stringify((requiredChecks?.length ? requiredChecks : ["gate"]).map((context) => ({ context })));
@@ -17195,6 +17196,15 @@ function gateSeedVars(cls, releaseTrack, runtime = "node", requiredCheckBranches
17195
17196
  GATE_RULESET_CONTEXTS_JSON: rulesetContexts
17196
17197
  };
17197
17198
  }
17199
+ if (track === "single") {
17200
+ return {
17201
+ ...runtimeVars,
17202
+ GATE_PUSH_BRANCHES_YAML: "[development]",
17203
+ GATE_FULL_RUN_BRANCH: "development",
17204
+ GATE_RULESET_BRANCH_REFS_JSON: rulesetRefs,
17205
+ GATE_RULESET_CONTEXTS_JSON: rulesetContexts
17206
+ };
17207
+ }
17198
17208
  if (track === "direct") {
17199
17209
  return {
17200
17210
  ...runtimeVars,
@@ -17519,7 +17529,7 @@ function buildRegisterPayload(repo, cls, vars, options = {}) {
17519
17529
  throw new Error(`deployModel must be one of: ${DEPLOY_MODELS.join(", ")}`);
17520
17530
  }
17521
17531
  if (options.releaseTrack && !isReleaseTrack(options.releaseTrack)) {
17522
- throw new Error("releaseTrack must be full, direct, or trunk");
17532
+ throw new Error("releaseTrack must be full, direct, trunk, or single");
17523
17533
  }
17524
17534
  const shape = {
17525
17535
  class: cls,
@@ -18647,7 +18657,7 @@ function classifyRow(row) {
18647
18657
  } else if (row.onboarding.status === "unknown") {
18648
18658
  reasons.add(`canonical onboarding link evidence unknown: ${row.onboarding.detail}`);
18649
18659
  }
18650
- const releaseRequired = row.track !== "trunk" && !row.classifications.includes("no-deploy-surface");
18660
+ const releaseRequired = row.track !== "trunk" && row.track !== "single" && !row.classifications.includes("no-deploy-surface");
18651
18661
  const tagIsVersion = Boolean(row.release.version) && row.unknowns.some((u) => u.startsWith(NO_VERSION_LOCK_PREFIX));
18652
18662
  for (const unknown of row.unknowns) {
18653
18663
  if (!releaseRequired && unknown === NO_RELEASE_UNKNOWN) continue;
@@ -18909,10 +18919,10 @@ var rollout_plan_default = {
18909
18919
  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)."
18910
18920
  },
18911
18921
  baseline: {
18912
- version: "4.5.160",
18913
- tag: "v4.5.160",
18914
- commit: "05c3cc8d56ee",
18915
- npm: "@mutmutco/cli@4.5.160"
18922
+ version: "4.5.161",
18923
+ tag: "v4.5.161",
18924
+ commit: "236dbfae4af2",
18925
+ npm: "@mutmutco/cli@4.5.161"
18916
18926
  },
18917
18927
  exitCriterion: "fleet-n-of-n",
18918
18928
  hubOnlyShortcut: "forbidden",
@@ -18929,14 +18939,14 @@ var rollout_plan_default = {
18929
18939
  repo: "mutmutco/mmi-hub",
18930
18940
  role: "canary",
18931
18941
  schedule: "train",
18932
- v3Target: "v4.5.160"
18942
+ v3Target: "v4.5.161"
18933
18943
  }
18934
18944
  ],
18935
18945
  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.",
18936
18946
  rollback: {
18937
18947
  independent: true,
18938
- mechanism: "npm dist-tag latest -> 4.5.160 and redeploy the Hub Lambda from tag v4.5.160 (05c3cc8d56ee); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
18939
- v3Target: "v4.5.160 (@mutmutco/cli@4.5.160, tag commit 05c3cc8d56ee \u2014 last known-good release carrying the repo-index v4-only contract)"
18948
+ mechanism: "npm dist-tag latest -> 4.5.161 and redeploy the Hub Lambda from tag v4.5.161 (236dbfae4af2); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
18949
+ v3Target: "v4.5.161 (@mutmutco/cli@4.5.161, tag commit 236dbfae4af2 \u2014 last known-good release carrying the repo-index v4-only contract)"
18940
18950
  }
18941
18951
  },
18942
18952
  {
@@ -20227,7 +20237,7 @@ function buildFleetTrackInventory(projects, releaseProbes, pluginProbes, generat
20227
20237
  unknowns
20228
20238
  };
20229
20239
  });
20230
- const tracks = { full: 0, direct: 0, trunk: 0 };
20240
+ const tracks = { full: 0, direct: 0, trunk: 0, single: 0 };
20231
20241
  for (const row of repos) tracks[row.track] += 1;
20232
20242
  return {
20233
20243
  generatedAt,
@@ -20420,13 +20430,13 @@ var FLEET_LOCKSTEP_REF_INCLUDE = ["refs/heads/rc", "refs/heads/main"];
20420
20430
  var STATUS_DESCRIPTION_MAX = 140;
20421
20431
  function classifyFleetEnrollment(rows) {
20422
20432
  return rows.map((row) => {
20423
- if (row.track === "trunk") {
20433
+ if (row.track === "trunk" || row.track === "single") {
20424
20434
  return {
20425
20435
  repo: row.repo,
20426
20436
  track: row.track,
20427
20437
  deployModel: row.deployModel,
20428
20438
  enrolled: false,
20429
- reason: "excluded: trunk track has no release train \u2014 no rc/main surface exists to gate (declared shape, not an exemption from conformance: the fleet verdict still counts this repo)"
20439
+ reason: "excluded: trunk/single track has no release train \u2014 no rc/main surface exists to gate (declared shape, not an exemption from conformance: the fleet verdict still counts this repo)"
20430
20440
  };
20431
20441
  }
20432
20442
  const noDeploy = row.classifications.includes("no-deploy-surface");
@@ -27479,6 +27489,7 @@ async function preflight(deps, ctx, stage, meta, lane) {
27479
27489
  if (model === "content") {
27480
27490
  throw new Error(`${ctx.repo} is a content repo (deployModel=content) \u2014 the release train does not apply (trunk-based; PR to main)`);
27481
27491
  }
27492
+ if (meta.releaseTrack === "single") throw new Error("single-track repos ship on merge; there is no release train");
27482
27493
  if (model === "none") {
27483
27494
  throw new Error(`${ctx.repo} is not Hub-deployed (deployModel=none) \u2014 the release train does not apply; use the project's own release path`);
27484
27495
  }
@@ -29727,9 +29738,9 @@ function rulesetCoversReleaseBranches(payload, track) {
29727
29738
  const conditions = payload.conditions;
29728
29739
  const include = conditions?.ref_name?.include;
29729
29740
  if (!Array.isArray(include)) {
29730
- return track === "full" || track === "direct" || track === "trunk";
29741
+ return track === "full" || track === "direct" || track === "trunk" || track === "single";
29731
29742
  }
29732
- const releaseRefs = track === "full" ? ["refs/heads/rc", "refs/heads/main"] : ["refs/heads/main"];
29743
+ const releaseRefs = track === "full" ? ["refs/heads/rc", "refs/heads/main"] : track === "single" ? ["refs/heads/development"] : ["refs/heads/main"];
29733
29744
  return include.some((entry) => typeof entry === "string" && (entry === "~DEFAULT_BRANCH" ? track === "trunk" : releaseRefs.some((ref) => refPatternCovers(entry, ref))));
29734
29745
  }
29735
29746
  function releaseBranchRefsCovered(conditions, track) {
@@ -34905,6 +34916,10 @@ function classifyEnvironmentDrift(drift) {
34905
34916
  }
34906
34917
  var TRACK_ENVIRONMENT_EXCEPTIONS = {
34907
34918
  direct: { rc: "direct release track has no rc stage" },
34919
+ single: {
34920
+ rc: "single release track has no rc stage",
34921
+ main: "single release track has no main branch; merges deploy the one stage"
34922
+ },
34908
34923
  trunk: {
34909
34924
  dev: "trunk release track has no dev stage",
34910
34925
  rc: "trunk release track has no rc stage"
@@ -35073,6 +35088,7 @@ function branchProtectionPayload(current, owners, app = LOCKED_APP) {
35073
35088
  }
35074
35089
  function deployStagesForBootstrap(deployModel, track) {
35075
35090
  if (deployModel !== "tenant-container" && deployModel !== "solo-container") return [];
35091
+ if (track === "single") return ["main"];
35076
35092
  return branchesForTrack(track).map((branch) => branch === "development" ? "dev" : branch);
35077
35093
  }
35078
35094
  function bootstrapSetDeployCommand(repo, stage, deployModel) {
@@ -42191,6 +42207,7 @@ var readApi = async (args) => {
42191
42207
  const env = await ghReadEnv();
42192
42208
  return (await execFileP("gh", ["api", ...args], {
42193
42209
  timeout: 2e4,
42210
+ maxBuffer: 16 * 1024 * 1024,
42194
42211
  ...env ? { env } : {}
42195
42212
  })).stdout;
42196
42213
  };
@@ -42220,7 +42237,7 @@ async function readPrMergeQueue(pr, repo, gh2 = readApi) {
42220
42237
  return result.pullRequest;
42221
42238
  }
42222
42239
  async function findPrMergeGroupRun(pr, repo, base, gh2 = readApi) {
42223
- const pages = JSON.parse(await gh2([`repos/${repo}/actions/runs?event=merge_group&per_page=100`, "--paginate", "--slurp"]));
42240
+ const pages = [JSON.parse(await gh2([`repos/${repo}/actions/runs?event=merge_group&per_page=100&exclude_pull_requests=true`]))];
42224
42241
  const prefix = `gh-readonly-queue/${base}/pr-${pr}-`;
42225
42242
  const run = pages.flatMap((page) => page.workflow_runs).filter((run2) => run2.head_branch?.startsWith(prefix)).sort((a, b) => b.created_at.localeCompare(a.created_at) || b.id - a.id)[0];
42226
42243
  return run ? { id: run.id, url: run.html_url, conclusion: run.conclusion } : void 0;
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.160",
3
+ "version": "4.5.161",
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.160",
3
+ "version": "4.5.161",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -91,6 +91,8 @@ development. A trunk repository follows its single branch and declared workflow
91
91
  No box stage.
92
92
  - Trunk track: one main branch, without an rc/development promotion train. Follow the repository's
93
93
  declared publishing workflow rather than manufacturing train branches.
94
+ - Single track (MM-Work and its modules): one environment. Every merge to development auto-deploys
95
+ the `main` stage; there is no rc, dev stage or release train, and release, rcand and hotfix refuse.
94
96
  - Urgent already-merged fixes: use [hotfix](../../hotfix/SKILL.md), which carries selected development
95
97
  fixes directly to main on either track.
96
98