@mutmutco/cli 4.5.164 → 4.5.165
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/dist/main.cjs +25 -12
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -14631,6 +14631,15 @@ function latestClaimMarker(comments) {
|
|
|
14631
14631
|
}
|
|
14632
14632
|
return void 0;
|
|
14633
14633
|
}
|
|
14634
|
+
function latestClaimRelease(comments) {
|
|
14635
|
+
for (let i = comments.length - 1; i >= 0; i -= 1) {
|
|
14636
|
+
const body = comments[i].body;
|
|
14637
|
+
const releases = parseClaimReleases(body);
|
|
14638
|
+
if (!parseClaimMarkers(body).length && !releases.length) continue;
|
|
14639
|
+
return latestClaimMarker([comments[i]]) ? void 0 : releases[releases.length - 1];
|
|
14640
|
+
}
|
|
14641
|
+
return void 0;
|
|
14642
|
+
}
|
|
14634
14643
|
function formatClaimAge(ageMs) {
|
|
14635
14644
|
if (ageMs === void 0 || !Number.isFinite(ageMs) || ageMs < 0) return "unknown age";
|
|
14636
14645
|
const minutes = Math.floor(ageMs / 6e4);
|
|
@@ -14838,6 +14847,7 @@ async function gatherClaimLiveness(client, repo, number, fetchOpenPulls) {
|
|
|
14838
14847
|
const comments = await client.restPaginate(`repos/${repo}/issues/${number}/comments`);
|
|
14839
14848
|
const rows = comments.map((comment) => ({ body: comment.body ?? "", login: comment.user?.login ?? void 0 }));
|
|
14840
14849
|
out.marker = latestClaimMarker(rows);
|
|
14850
|
+
if (!out.marker) out.releasedAt = latestClaimRelease(rows)?.ts;
|
|
14841
14851
|
for (let i = comments.length - 1; i >= 0; i -= 1) {
|
|
14842
14852
|
if (comments[i].created_at && !latestClaimMarker([rows[i]])) {
|
|
14843
14853
|
out.lastCommentAt = comments[i].created_at;
|
|
@@ -14919,8 +14929,9 @@ function liveEvidenceLines(evidence, repo) {
|
|
|
14919
14929
|
live.push(evidence.lastCommentAt && Date.parse(evidence.lastCommentAt) > Date.parse(evidence.marker.ts) ? `claim marker from ${marker} is ${formatClaimAge(evidence.markerAgeMs)} old but the issue was commented ${formatClaimAge(idleMs)} ago (session not locally probeable)` : `claim marker from ${marker} is only ${formatClaimAge(evidence.markerAgeMs)} old (session not locally probeable)`);
|
|
14920
14930
|
}
|
|
14921
14931
|
}
|
|
14922
|
-
|
|
14923
|
-
if (evidence.
|
|
14932
|
+
const sinceRelease = (at) => !evidence.releasedAt || at === void 0 || Date.parse(at) > Date.parse(evidence.releasedAt);
|
|
14933
|
+
if (evidence.openPr && workIsLive(evidence.openPrAt) && sinceRelease(evidence.openPrAt)) live.push(evidence.openPr);
|
|
14934
|
+
if (evidence.branch && workIsLive(evidence.branchAt) && sinceRelease(evidence.branchAt)) live.push(`live branch ${evidence.branch} on ${repo}`);
|
|
14924
14935
|
return live;
|
|
14925
14936
|
}
|
|
14926
14937
|
function staleWorkLines(evidence) {
|
|
@@ -19051,10 +19062,10 @@ var rollout_plan_default = {
|
|
|
19051
19062
|
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)."
|
|
19052
19063
|
},
|
|
19053
19064
|
baseline: {
|
|
19054
|
-
version: "4.5.
|
|
19055
|
-
tag: "v4.5.
|
|
19056
|
-
commit: "
|
|
19057
|
-
npm: "@mutmutco/cli@4.5.
|
|
19065
|
+
version: "4.5.165",
|
|
19066
|
+
tag: "v4.5.165",
|
|
19067
|
+
commit: "e50afbd193c3",
|
|
19068
|
+
npm: "@mutmutco/cli@4.5.165"
|
|
19058
19069
|
},
|
|
19059
19070
|
exitCriterion: "fleet-n-of-n",
|
|
19060
19071
|
hubOnlyShortcut: "forbidden",
|
|
@@ -19071,14 +19082,14 @@ var rollout_plan_default = {
|
|
|
19071
19082
|
repo: "mutmutco/mmi-hub",
|
|
19072
19083
|
role: "canary",
|
|
19073
19084
|
schedule: "train",
|
|
19074
|
-
v3Target: "v4.5.
|
|
19085
|
+
v3Target: "v4.5.165"
|
|
19075
19086
|
}
|
|
19076
19087
|
],
|
|
19077
19088
|
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.",
|
|
19078
19089
|
rollback: {
|
|
19079
19090
|
independent: true,
|
|
19080
|
-
mechanism: "npm dist-tag latest -> 4.5.
|
|
19081
|
-
v3Target: "v4.5.
|
|
19091
|
+
mechanism: "npm dist-tag latest -> 4.5.165 and redeploy the Hub Lambda from tag v4.5.165 (e50afbd193c3); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
19092
|
+
v3Target: "v4.5.165 (@mutmutco/cli@4.5.165, tag commit e50afbd193c3 \u2014 last known-good release carrying the repo-index v4-only contract)"
|
|
19082
19093
|
}
|
|
19083
19094
|
},
|
|
19084
19095
|
{
|
|
@@ -33317,7 +33328,7 @@ function parseGateVar(raw) {
|
|
|
33317
33328
|
}
|
|
33318
33329
|
var SECRET_OUTPUT_PATH_RE = /^\/[A-Za-z0-9._/-]+$/;
|
|
33319
33330
|
var SECRET_OUTPUT_REPO_RE = /^[A-Za-z0-9][A-Za-z0-9._-]*\/[A-Za-z0-9][A-Za-z0-9._-]*$/;
|
|
33320
|
-
var SECRET_OUTPUT_KEY_RE = /^[A-Z][A-Z0-9_]*$/;
|
|
33331
|
+
var SECRET_OUTPUT_KEY_RE = /^(?:(?:dev|rc|main)\/)?[A-Z][A-Z0-9_]*$/;
|
|
33321
33332
|
function parseTenantTaskSecretOutput(raw, label) {
|
|
33322
33333
|
if (!raw || typeof raw !== "object" || Array.isArray(raw)) {
|
|
33323
33334
|
throw new Error(`org project set: ${label} must be an object {path,vault:{repo,key},overwrite?}`);
|
|
@@ -33341,7 +33352,7 @@ function parseTenantTaskSecretOutput(raw, label) {
|
|
|
33341
33352
|
throw new Error(`org project set: ${label}.vault.repo must be owner/name`);
|
|
33342
33353
|
}
|
|
33343
33354
|
if (typeof vaultMap.key !== "string" || !SECRET_OUTPUT_KEY_RE.test(vaultMap.key)) {
|
|
33344
|
-
throw new Error(`org project set: ${label}.vault.key must be UPPER_SNAKE`);
|
|
33355
|
+
throw new Error(`org project set: ${label}.vault.key must be UPPER_SNAKE or <dev|rc|main>/UPPER_SNAKE`);
|
|
33345
33356
|
}
|
|
33346
33357
|
if (value.overwrite !== void 0 && typeof value.overwrite !== "boolean") {
|
|
33347
33358
|
throw new Error(`org project set: ${label}.overwrite must be true or false`);
|
|
@@ -40981,11 +40992,12 @@ async function runPrLand(prNumber, options, deps) {
|
|
|
40981
40992
|
if (drift) return drift;
|
|
40982
40993
|
const hasQueue = await deps.hasMergeQueue?.(repo, resolved.base) ?? false;
|
|
40983
40994
|
let queueSnapshot;
|
|
40995
|
+
const queued = { base: resolved.base, state: "queued" };
|
|
40984
40996
|
if (hasQueue) {
|
|
40985
|
-
base.mergeQueue = { base: resolved.base, state: "queued" };
|
|
40986
40997
|
if (!deps.readMergeQueue) throw new Error("merge queue reader unavailable");
|
|
40987
40998
|
queueSnapshot = await deps.readMergeQueue(prNumber, repo);
|
|
40988
40999
|
if (queueSnapshot.isInMergeQueue || queueSnapshot.state === "MERGED") {
|
|
41000
|
+
base.mergeQueue = queued;
|
|
40989
41001
|
base.mergeStatus = "auto-merge-enqueued";
|
|
40990
41002
|
return pollPrMergeQueue(prNumber, options, deps, base, queueSnapshot);
|
|
40991
41003
|
}
|
|
@@ -41035,6 +41047,7 @@ async function runPrLand(prNumber, options, deps) {
|
|
|
41035
41047
|
return { ...base, error: merge.error ?? "merge failed" };
|
|
41036
41048
|
}
|
|
41037
41049
|
if (hasQueue) {
|
|
41050
|
+
base.mergeQueue = queued;
|
|
41038
41051
|
if (merge.mergeStatus === "merged") {
|
|
41039
41052
|
return queueMerged(base, deps);
|
|
41040
41053
|
}
|
package/package.json
CHANGED