@mutmutco/cli 3.108.0 → 3.110.0
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 +30 -12
- package/package.json +1 -1
package/dist/main.cjs
CHANGED
|
@@ -15339,6 +15339,9 @@ async function branchesMergedIntoBase(remote) {
|
|
|
15339
15339
|
}
|
|
15340
15340
|
|
|
15341
15341
|
// ../infra/src/version-gate.ts
|
|
15342
|
+
function isDeclaredNonFleetProject(project2) {
|
|
15343
|
+
return String(project2.projectClass ?? "").trim().toLowerCase() === "third-party";
|
|
15344
|
+
}
|
|
15342
15345
|
var HUB_REPO2 = "mutmutco/mmi-hub";
|
|
15343
15346
|
var NO_RELEASE_UNKNOWN = "no published GitHub Release";
|
|
15344
15347
|
var NO_VERSION_LOCK_PREFIX = "no distribution-bom.json or package.json version lock at ";
|
|
@@ -15428,7 +15431,12 @@ function buildCanaryClasses(rows, resultByRepo) {
|
|
|
15428
15431
|
function evaluateFleetLockstepGate(rows, evaluatedAt, unclassifiedProjectsInput = []) {
|
|
15429
15432
|
const results = rows.map(classifyRow);
|
|
15430
15433
|
const resultByRepo = new Map(results.map((r) => [r.repo, r]));
|
|
15431
|
-
const
|
|
15434
|
+
const nonFleetProjects = unclassifiedProjectsInput.filter(isDeclaredNonFleetProject).map((p) => ({
|
|
15435
|
+
slug: p.slug,
|
|
15436
|
+
name: p.name,
|
|
15437
|
+
reason: `registered project ${p.slug} (${p.name}) declares class third-party and carries no repository \u2014 operated, not shipped, so it has no release that could conform`
|
|
15438
|
+
}));
|
|
15439
|
+
const unclassifiedProjects = unclassifiedProjectsInput.filter((p) => !isDeclaredNonFleetProject(p)).map((p) => ({
|
|
15432
15440
|
slug: p.slug,
|
|
15433
15441
|
name: p.name,
|
|
15434
15442
|
reason: `registered project ${p.slug} (${p.name}) has no valid registered repository \u2014 unclassifiable fleet membership the N-of-N cannot place, drift or clear`
|
|
@@ -15458,6 +15466,7 @@ function evaluateFleetLockstepGate(rows, evaluatedAt, unclassifiedProjectsInput
|
|
|
15458
15466
|
drift,
|
|
15459
15467
|
unknowns,
|
|
15460
15468
|
unclassifiedProjects,
|
|
15469
|
+
nonFleetProjects,
|
|
15461
15470
|
canaryClasses: buildCanaryClasses(rows, resultByRepo),
|
|
15462
15471
|
hubOnly,
|
|
15463
15472
|
repos: results,
|
|
@@ -15609,10 +15618,10 @@ var rollout_plan_default = {
|
|
|
15609
15618
|
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)."
|
|
15610
15619
|
},
|
|
15611
15620
|
baseline: {
|
|
15612
|
-
version: "3.
|
|
15613
|
-
tag: "v3.
|
|
15614
|
-
commit: "
|
|
15615
|
-
npm: "@mutmutco/cli@3.
|
|
15621
|
+
version: "3.110.0",
|
|
15622
|
+
tag: "v3.110.0",
|
|
15623
|
+
commit: "6417e1ccdaf4",
|
|
15624
|
+
npm: "@mutmutco/cli@3.110.0"
|
|
15616
15625
|
},
|
|
15617
15626
|
exitCriterion: "fleet-n-of-n",
|
|
15618
15627
|
hubOnlyShortcut: "forbidden",
|
|
@@ -15629,14 +15638,14 @@ var rollout_plan_default = {
|
|
|
15629
15638
|
repo: "mutmutco/mmi-hub",
|
|
15630
15639
|
role: "canary",
|
|
15631
15640
|
schedule: "train",
|
|
15632
|
-
v3Target: "v3.
|
|
15641
|
+
v3Target: "v3.110.0"
|
|
15633
15642
|
}
|
|
15634
15643
|
],
|
|
15635
15644
|
rollbackTrigger: "Any red inside the post-cut soak window: `devops train gate` FAIL attributable to the v4 doors, Hub endpoint health probe failure, a v3 client refused while the compat window must still admit it (SUPPORTED_MINOR_WINDOW=2, MIN_CLIENT_VERSION 0.0.0 \u2014 D6a), or npm consumer install/doctor failure on the v4 dist.",
|
|
15636
15645
|
rollback: {
|
|
15637
15646
|
independent: true,
|
|
15638
|
-
mechanism: "npm dist-tag latest -> 3.
|
|
15639
|
-
v3Target: "v3.
|
|
15647
|
+
mechanism: "npm dist-tag latest -> 3.110.0 and redeploy the Hub Lambda from tag v3.110.0 (6417e1ccdaf4); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
|
|
15648
|
+
v3Target: "v3.110.0 (@mutmutco/cli@3.110.0, tag commit 6417e1ccdaf4 \u2014 the preserved latest-v3 distribution, D6b)"
|
|
15640
15649
|
}
|
|
15641
15650
|
},
|
|
15642
15651
|
{
|
|
@@ -16915,7 +16924,8 @@ function buildFleetTrackInventory(projects, releaseProbes, pluginProbes, generat
|
|
|
16915
16924
|
anomalies.push({
|
|
16916
16925
|
kind: "project-without-repo",
|
|
16917
16926
|
slug: String(project2.slug ?? "?"),
|
|
16918
|
-
name: String(project2.name ?? project2.slug ?? "?")
|
|
16927
|
+
name: String(project2.name ?? project2.slug ?? "?"),
|
|
16928
|
+
projectClass: project2.class == null ? null : String(project2.class)
|
|
16919
16929
|
});
|
|
16920
16930
|
}
|
|
16921
16931
|
for (const repo of repos2) {
|
|
@@ -17060,7 +17070,7 @@ async function runFleetLockstepGate(deps = defaultFleetTrackInventoryDeps(true))
|
|
|
17060
17070
|
inventory.generatedAt,
|
|
17061
17071
|
// A registered project with no valid repo produces no inventory row (#4685); fold each anomaly
|
|
17062
17072
|
// into the denominator as an explicit unknown so a repo-less project can never vanish from N-of-N.
|
|
17063
|
-
inventory.anomalies.map((a) => ({ slug: a.slug, name: a.name }))
|
|
17073
|
+
inventory.anomalies.map((a) => ({ slug: a.slug, name: a.name, projectClass: a.projectClass }))
|
|
17064
17074
|
);
|
|
17065
17075
|
}
|
|
17066
17076
|
function fleetGateConformanceEvidence(result) {
|
|
@@ -17103,6 +17113,10 @@ function formatFleetLockstepGate(result) {
|
|
|
17103
17113
|
lines.push("", `unclassifiable registered projects (${result.unclassifiedProjects.length}):`);
|
|
17104
17114
|
for (const project2 of result.unclassifiedProjects) lines.push(` ? ${project2.reason}`);
|
|
17105
17115
|
}
|
|
17116
|
+
if (result.nonFleetProjects.length) {
|
|
17117
|
+
lines.push("", `registered projects outside the fleet (${result.nonFleetProjects.length}):`);
|
|
17118
|
+
for (const project2 of result.nonFleetProjects) lines.push(` - ${project2.reason}`);
|
|
17119
|
+
}
|
|
17106
17120
|
lines.push("", "canary classes by deploy model (canary -> cohort):");
|
|
17107
17121
|
for (const cls of result.canaryClasses) {
|
|
17108
17122
|
lines.push(
|
|
@@ -22374,6 +22388,7 @@ var WRITE_PROBE_CONCURRENCY = 8;
|
|
|
22374
22388
|
var CLAIM_CONCURRENCY = 5;
|
|
22375
22389
|
var BOARD_ACTIVE_READ_MAX_PAGES = 100;
|
|
22376
22390
|
var BOARD_PROJECTION_STALE_MS = 24 * 60 * 6e4;
|
|
22391
|
+
var BOARD_PROJECTION_RECONCILE_STALE_MS = 3 * 60 * 6e4;
|
|
22377
22392
|
var BOARD_PROJECTION_TIMEOUT_MS = 8e3;
|
|
22378
22393
|
var execFileP4 = (file, args, options = {}) => (
|
|
22379
22394
|
// encoding 'utf8' guarantees string output at runtime; the cast pins the type (promisify's
|
|
@@ -22822,7 +22837,10 @@ function projectionFreshness(row, now) {
|
|
|
22822
22837
|
projectedAgeMs,
|
|
22823
22838
|
sourceTimestamp: row.watermark.sourceTimestamp,
|
|
22824
22839
|
sourceAgeMs,
|
|
22825
|
-
|
|
22840
|
+
// #4774: health must agree with BOTH ages a caller can see on the source line — a projection whose
|
|
22841
|
+
// rebuild (projectedAt) went stale is exactly as unreliable as one whose source events did, even
|
|
22842
|
+
// while recent webhook activity keeps sourceAgeMs looking fresh.
|
|
22843
|
+
health: row.watermark.health === "stale" || sourceAgeMs > BOARD_PROJECTION_STALE_MS || projectedAgeMs > BOARD_PROJECTION_RECONCILE_STALE_MS ? "stale" : "fresh"
|
|
22826
22844
|
};
|
|
22827
22845
|
}
|
|
22828
22846
|
function renderBoardSource(report) {
|
|
@@ -37298,7 +37316,7 @@ var surfaces_default = {
|
|
|
37298
37316
|
{
|
|
37299
37317
|
command: "npm",
|
|
37300
37318
|
args: ["--prefix", "cli", "run", "build"],
|
|
37301
|
-
inputs: ["cli/src", "cli/build.mjs", "cli/package.json", "cli/README.md", "cli/tsconfig.json"],
|
|
37319
|
+
inputs: ["cli/src", "cli/build.mjs", "cli/package.json", "cli/README.md", "cli/tsconfig.json", "infra/rollout-plan.json"],
|
|
37302
37320
|
outputs: ["cli/dist/index.cjs", "cli/dist/main.cjs"]
|
|
37303
37321
|
}
|
|
37304
37322
|
],
|
package/package.json
CHANGED