@mutmutco/codex-plugin 4.5.92 → 4.5.93
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/.codex-plugin/plugin.json +1 -1
- package/cli/dist/main.cjs +27 -18
- package/cli/package.json +1 -1
- package/package.json +1 -1
package/cli/dist/main.cjs
CHANGED
|
@@ -17252,10 +17252,10 @@ var rollout_plan_default = {
|
|
|
17252
17252
|
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)."
|
|
17253
17253
|
},
|
|
17254
17254
|
baseline: {
|
|
17255
|
-
version: "4.5.
|
|
17256
|
-
tag: "v4.5.
|
|
17257
|
-
commit: "
|
|
17258
|
-
npm: "@mutmutco/cli@4.5.
|
|
17255
|
+
version: "4.5.93",
|
|
17256
|
+
tag: "v4.5.93",
|
|
17257
|
+
commit: "f0c54c59980d",
|
|
17258
|
+
npm: "@mutmutco/cli@4.5.93"
|
|
17259
17259
|
},
|
|
17260
17260
|
exitCriterion: "fleet-n-of-n",
|
|
17261
17261
|
hubOnlyShortcut: "forbidden",
|
|
@@ -17272,14 +17272,14 @@ var rollout_plan_default = {
|
|
|
17272
17272
|
repo: "mutmutco/mmi-hub",
|
|
17273
17273
|
role: "canary",
|
|
17274
17274
|
schedule: "train",
|
|
17275
|
-
v3Target: "v4.5.
|
|
17275
|
+
v3Target: "v4.5.93"
|
|
17276
17276
|
}
|
|
17277
17277
|
],
|
|
17278
17278
|
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.",
|
|
17279
17279
|
rollback: {
|
|
17280
17280
|
independent: true,
|
|
17281
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
17282
|
-
v3Target: "v4.5.
|
|
17281
|
+
mechanism: "npm dist-tag latest -> 4.5.93 and redeploy the Hub Lambda from tag v4.5.93 (f0c54c59980d); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
17282
|
+
v3Target: "v4.5.93 (@mutmutco/cli@4.5.93, tag commit f0c54c59980d \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
17283
17283
|
}
|
|
17284
17284
|
},
|
|
17285
17285
|
{
|
|
@@ -36067,7 +36067,7 @@ function readSuiteCut(path2) {
|
|
|
36067
36067
|
} catch {
|
|
36068
36068
|
throw new Error(`suite cut record unreadable at ${path2}; repair it, never recut`);
|
|
36069
36069
|
}
|
|
36070
|
-
if (record.schema !== SCHEMA || record.lead !== SUITE_REPO || !SHA2.test(record.leadDevelopment) || !SHA2.test(record.leadPreviousRc) || !Array.isArray(record.members) || record.members.length === 0 || record.pinPr !== void 0 && (typeof record.pinPr !== "string" || !record.pinPr.startsWith("https://github.com/mutmutco/MM-Work/pull/")) || record.pinMerged !== void 0 && (record.pinMerged !== true && record.pinMerged !== false || !record.pinPr) || record.leadRcTag !== void 0 && (!RC_TAG.test(record.leadRcTag) || !SHA2.test(record.leadRcSha ?? "") || !record.pinMerged) || record.leadReleased !== void 0 && (record.leadReleased !== true || !record.leadRcTag) || record.announcement !== void 0 && (!["pending", "sent", "skipped"].includes(record.announcement) || !record.leadReleased) || record.heldMembers !== void 0 && (!Array.isArray(record.heldMembers) || record.heldMembers.some((h) => !h.id || !h.repo || typeof h.reason !== "string" || !h.reason.trim() || h.since !== void 0 && typeof h.since !== "string" || record.members.some((m) => m.id === h.id))) || record.members.some((m) => !m.id || !m.repo || !m.backend || !m.host || !SHA2.test(m.development) || !SHA2.test(m.previousRc) || m.rcWasAbsent !== void 0 && m.rcWasAbsent !== true || m.tag !== void 0 && (!RC_TAG.test(m.tag) || !SHA2.test(m.sha ?? "")) || m.published !== void 0 && (m.published !== true || !m.tag) || m.released !== void 0 && (m.released !== true || !m.published) || m.mainPublished !== void 0 && (m.mainPublished !== true || !m.released || !!m.carried) || m.backendAfterRelease !== void 0 && (!m.released || typeof m.backendAfterRelease !== "string") || m.carried !== void 0 && (m.carried !== true || m.tag !== void 0 || m.published !== void 0 || !isPin(m.rcPin) || !isPin(m.mainPin)) || m.carried === void 0 && (m.rcPin !== void 0 || m.mainPin !== void 0)))
|
|
36070
|
+
if (record.schema !== SCHEMA || record.lead !== SUITE_REPO || !SHA2.test(record.leadDevelopment) || !SHA2.test(record.leadPreviousRc) || !Array.isArray(record.members) || record.members.length === 0 || record.pinPr !== void 0 && (typeof record.pinPr !== "string" || !record.pinPr.startsWith("https://github.com/mutmutco/MM-Work/pull/")) || record.pinsUnchanged !== void 0 && (record.pinsUnchanged !== true || record.pinPr !== void 0) || record.pinMerged !== void 0 && (record.pinMerged !== true && record.pinMerged !== false || !record.pinPr && !record.pinsUnchanged) || record.leadRcTag !== void 0 && (!RC_TAG.test(record.leadRcTag) || !SHA2.test(record.leadRcSha ?? "") || !record.pinMerged) || record.leadReleased !== void 0 && (record.leadReleased !== true || !record.leadRcTag) || record.announcement !== void 0 && (!["pending", "sent", "skipped"].includes(record.announcement) || !record.leadReleased) || record.heldMembers !== void 0 && (!Array.isArray(record.heldMembers) || record.heldMembers.some((h) => !h.id || !h.repo || typeof h.reason !== "string" || !h.reason.trim() || h.since !== void 0 && typeof h.since !== "string" || record.members.some((m) => m.id === h.id))) || record.members.some((m) => !m.id || !m.repo || !m.backend || !m.host || !SHA2.test(m.development) || !SHA2.test(m.previousRc) || m.rcWasAbsent !== void 0 && m.rcWasAbsent !== true || m.tag !== void 0 && (!RC_TAG.test(m.tag) || !SHA2.test(m.sha ?? "")) || m.published !== void 0 && (m.published !== true || !m.tag) || m.released !== void 0 && (m.released !== true || !m.published) || m.mainPublished !== void 0 && (m.mainPublished !== true || !m.released || !!m.carried) || m.backendAfterRelease !== void 0 && (!m.released || typeof m.backendAfterRelease !== "string") || m.carried !== void 0 && (m.carried !== true || m.tag !== void 0 || m.published !== void 0 || !isPin(m.rcPin) || !isPin(m.mainPin)) || m.carried === void 0 && (m.rcPin !== void 0 || m.mainPin !== void 0)))
|
|
36071
36071
|
throw new Error(`suite cut record has unknown or invalid state at ${path2}; repair it, never recut`);
|
|
36072
36072
|
return record;
|
|
36073
36073
|
}
|
|
@@ -36198,7 +36198,7 @@ async function suiteRcand(deps, opts) {
|
|
|
36198
36198
|
(0, import_node_fs29.renameSync)(deps.recordPath, archive);
|
|
36199
36199
|
record = void 0;
|
|
36200
36200
|
}
|
|
36201
|
-
if (record && !record.pinPr && record.members.every((m) => !m.tag)) {
|
|
36201
|
+
if (record && !record.pinPr && !record.leadRcTag && record.members.every((m) => !m.tag)) {
|
|
36202
36202
|
(0, import_node_fs29.rmSync)(deps.recordPath, { force: true });
|
|
36203
36203
|
record = void 0;
|
|
36204
36204
|
}
|
|
@@ -36314,13 +36314,18 @@ Each module must ship a live release that bind-mounts <deployPath>/data read-onl
|
|
|
36314
36314
|
if (!member.carried && !member.priorMain && prior && pinVersion(prior) !== suiteReleaseTag(member.tag)) member.priorMain = prior;
|
|
36315
36315
|
}
|
|
36316
36316
|
writeSuiteCut(deps.recordPath, record);
|
|
36317
|
-
const pr = await deps.pin({ cut: record.leadDevelopment, pins, heldIds: record.heldMembers?.map((h) => h.id) });
|
|
36317
|
+
const pr = await deps.pin({ cut: record.leadDevelopment, pins, heldIds: record.heldMembers?.map((h) => h.id), carriedOnly: record.members.every((m) => m.carried) });
|
|
36318
36318
|
await deps.verifyLeadCut(record.leadDevelopment);
|
|
36319
|
-
if (
|
|
36320
|
-
|
|
36321
|
-
|
|
36319
|
+
if (pr.status === "unchanged") {
|
|
36320
|
+
record.pinsUnchanged = true;
|
|
36321
|
+
record.pinMerged = true;
|
|
36322
|
+
} else {
|
|
36323
|
+
if (record.pinPr && record.pinPr !== pr.pr) throw new Error(`pin PR changed from ${record.pinPr} to ${pr.pr}; stop`);
|
|
36324
|
+
record.pinPr = pr.pr;
|
|
36325
|
+
record.pinMerged = pr.status === "merged";
|
|
36326
|
+
}
|
|
36322
36327
|
writeSuiteCut(deps.recordPath, record);
|
|
36323
|
-
if (!record.pinMerged) throw new Error(`suite pin PR ${
|
|
36328
|
+
if (!record.pinMerged) throw new Error(`suite pin PR ${record.pinPr} is pending; merge it on development, then rerun suite rcand --owner-go (member tags are reused)`);
|
|
36324
36329
|
if (!record.leadRcTag) {
|
|
36325
36330
|
const leadCut = await deps.rcand(SUITE_REPO, record.leadPreviousRc);
|
|
36326
36331
|
if (!RC_TAG.test(leadCut.tag) || !SHA2.test(leadCut.sha) || !await deps.contains(SUITE_REPO, record.leadDevelopment, leadCut.sha))
|
|
@@ -40241,7 +40246,10 @@ async function openSuiteCutPinPr(deps, input) {
|
|
|
40241
40246
|
return row?.bundles.rc === p.rc && row?.bundles.main === p.main;
|
|
40242
40247
|
});
|
|
40243
40248
|
if (prs.length && matches(await registry2(branch))) return { status: "pending", pr: prs[0].url };
|
|
40244
|
-
if (!prs.length && matches(rows))
|
|
40249
|
+
if (!prs.length && matches(rows)) {
|
|
40250
|
+
if (input.carriedOnly) return { status: "unchanged" };
|
|
40251
|
+
throw new Error("pins already match without a merged cut PR \u2014 provenance unverified");
|
|
40252
|
+
}
|
|
40245
40253
|
await (0, import_promises6.mkdir)((0, import_node_path34.join)(deps.root, "tmp"), { recursive: true });
|
|
40246
40254
|
scratch = await (0, import_promises6.mkdtemp)((0, import_node_path34.join)(deps.root, "tmp", "suite-pin-"));
|
|
40247
40255
|
const run = (file, args) => deps.run(file, args, scratch);
|
|
@@ -47014,9 +47022,10 @@ function rcRunCauseFromLog(log) {
|
|
|
47014
47022
|
function memberAnnounceSummaryFile(repo, summaryFile, memberSummaryFiles) {
|
|
47015
47023
|
return repo === SUITE_REPO ? summaryFile : memberSummaryFiles[repo];
|
|
47016
47024
|
}
|
|
47025
|
+
var suiteStateDir = (root) => (0, import_node_path43.join)(resolvePrimaryGitDir(root), "mmi-runtime", "suite");
|
|
47017
47026
|
function suiteTrainIo(root, summaryFile, memberSummaryFiles = {}) {
|
|
47018
|
-
const recordPath =
|
|
47019
|
-
const base = (0, import_node_path43.join)(
|
|
47027
|
+
const recordPath = (0, import_node_path43.join)(suiteStateDir(root), "cut.json");
|
|
47028
|
+
const base = (0, import_node_path43.join)(suiteStateDir(root), "checkouts");
|
|
47020
47029
|
const checkout = async (repo) => {
|
|
47021
47030
|
if (repo === SUITE_REPO) return root;
|
|
47022
47031
|
const target = (0, import_node_path43.join)(base, repo.split("/")[1]);
|
|
@@ -47326,7 +47335,7 @@ function suiteTrainIo(root, summaryFile, memberSummaryFiles = {}) {
|
|
|
47326
47335
|
recordMapping: async (leadTag, mapping) => {
|
|
47327
47336
|
const body = await gh(["release", "view", leadTag, "--repo", SUITE_REPO, "--json", "body", "--jq", ".body"]);
|
|
47328
47337
|
if (parseSuiteMapping(body)) return;
|
|
47329
|
-
const dir =
|
|
47338
|
+
const dir = suiteStateDir(root);
|
|
47330
47339
|
(0, import_node_fs43.mkdirSync)(dir, { recursive: true });
|
|
47331
47340
|
const file = (0, import_node_path43.join)(dir, `notes-${leadTag}.md`);
|
|
47332
47341
|
(0, import_node_fs43.writeFileSync)(file, `${body}
|
package/cli/package.json
CHANGED