@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.
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
|
|
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.
|
|
18913
|
-
tag: "v4.5.
|
|
18914
|
-
commit: "
|
|
18915
|
-
npm: "@mutmutco/cli@4.5.
|
|
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.
|
|
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.
|
|
18939
|
-
v3Target: "v4.5.
|
|
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
|
|
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
package/package.json
CHANGED
|
@@ -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
|
|