@mutmutco/cli 4.0.7 → 4.0.9

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.
Files changed (2) hide show
  1. package/dist/main.cjs +16 -12
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -8266,6 +8266,10 @@ var DECLARED_ENTRIES = [
8266
8266
  // #4118: Listening + systemd-active ≠ GitHub online after acquirejob 503. restart.conf cannot see
8267
8267
  // it; an Actions workflow on mmi-live cannot heal it when half the fleet is offline. Root cron.
8268
8268
  { name: "mmi-runner-online-reconcile (mmi-runner)", cadence: "*/5 * * * *", executor: "box cron.d", llm: "no", resolved: "declared", source: "/etc/cron.d/mmi-runner-online \u2192 /opt/mmi-control/runner-online-reconcile.sh; API-offline + _diag acquirejob, max 2 restarts/tick (verify: mmi-cli devops runtime box get mmi-runner --ssh)" },
8269
+ // #5292: a lane that holds a dispatched JOB but produces zero output past the budget honestly
8270
+ // reports "busy", so the online reconcile never fires and GitHub will not re-dispatch while the
8271
+ // run holds the assignment. This tick cancels + re-triggers those runs (max 1/tick, debounced).
8272
+ { name: "mmi-runner-jobwedge-reconcile (mmi-runner)", cadence: "*/5 * * * *", executor: "box cron.d", llm: "no", resolved: "declared", source: "/etc/cron.d/mmi-runner-jobwedge \u2192 /opt/mmi-control/runner-jobwedge-reconcile.sh; in_progress job silent past 10 min on our lanes \u2192 cancel + rerun, max 1 heal/tick (verify: mmi-cli devops runtime box get mmi-runner --ssh)" },
8269
8273
  // #3852: the runner /tmp sweep — daily inode hygiene (03:41 UTC), deliberately the one clutter path the
8270
8274
  // out-of-band disk-relief script must never touch. Verified installed 2026-08-18: the cron.d file and
8271
8275
  // flock line match scripts/runner-tmp-sweep.cron exactly.
@@ -10823,10 +10827,10 @@ var rollout_plan_default = {
10823
10827
  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)."
10824
10828
  },
10825
10829
  baseline: {
10826
- version: "4.0.7",
10827
- tag: "v4.0.7",
10828
- commit: "c86400699cbb",
10829
- npm: "@mutmutco/cli@4.0.7"
10830
+ version: "4.0.9",
10831
+ tag: "v4.0.9",
10832
+ commit: "ed837f90a7da",
10833
+ npm: "@mutmutco/cli@4.0.9"
10830
10834
  },
10831
10835
  exitCriterion: "fleet-n-of-n",
10832
10836
  hubOnlyShortcut: "forbidden",
@@ -10843,14 +10847,14 @@ var rollout_plan_default = {
10843
10847
  repo: "mutmutco/mmi-hub",
10844
10848
  role: "canary",
10845
10849
  schedule: "train",
10846
- v3Target: "v4.0.7"
10850
+ v3Target: "v4.0.9"
10847
10851
  }
10848
10852
  ],
10849
10853
  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.",
10850
10854
  rollback: {
10851
10855
  independent: true,
10852
- mechanism: "npm dist-tag latest -> 4.0.7 and redeploy the Hub Lambda from tag v4.0.7 (c86400699cbb); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
10853
- v3Target: "v4.0.7 (@mutmutco/cli@4.0.7, tag commit c86400699cbb \u2014 last known-good release carrying the repo-index v4-only contract)"
10856
+ mechanism: "npm dist-tag latest -> 4.0.9 and redeploy the Hub Lambda from tag v4.0.9 (ed837f90a7da); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
10857
+ v3Target: "v4.0.9 (@mutmutco/cli@4.0.9, tag commit ed837f90a7da \u2014 last known-good release carrying the repo-index v4-only contract)"
10854
10858
  }
10855
10859
  },
10856
10860
  {
@@ -23581,12 +23585,12 @@ async function probeRepoIndexV4ReadinessCloud(queries, deps) {
23581
23585
  if (!token) return { ok: false, error: "no Hub session token (run `gh auth login`)" };
23582
23586
  const baseUrl = deps.baseUrl.replace(/\/$/, "");
23583
23587
  const headers = { ...clientVersionHeaders(), Authorization: ["Bearer", token].join(" "), "content-type": "application/json" };
23584
- const shadowPass = async () => {
23588
+ const shadowPass = async (readinessProbe) => {
23585
23589
  for (const query of queries) {
23586
23590
  const res = await fetchWithRetry(deps.fetch ?? fetch, `${baseUrl}/repo-index/v4/shadow`, {
23587
23591
  method: "POST",
23588
23592
  headers,
23589
- body: JSON.stringify({ q: query.query, mode: query.mode, readinessProbe: true })
23593
+ body: JSON.stringify({ q: query.query, mode: query.mode, readinessProbe })
23590
23594
  }, { attempts: RETRY_ATTEMPTS2, timeoutMs: 12e4, sleep: deps.retrySleep });
23591
23595
  const body = await res.json().catch(() => ({}));
23592
23596
  if (!res.ok) return { ok: false, error: `${query.id}: ${body.error ?? `v4 readiness probe HTTP ${res.status}`}${body.errorClass ? ` (${body.errorClass})` : ""}`, status: res.status };
@@ -23594,9 +23598,9 @@ async function probeRepoIndexV4ReadinessCloud(queries, deps) {
23594
23598
  return { ok: true };
23595
23599
  };
23596
23600
  try {
23597
- const warmup = await shadowPass();
23601
+ const warmup = await shadowPass(false);
23598
23602
  if (!warmup.ok) return warmup;
23599
- const verdict = await shadowPass();
23603
+ const verdict = await shadowPass(true);
23600
23604
  if (!verdict.ok) return verdict;
23601
23605
  const res = await fetchWithRetry(deps.fetch ?? fetch, `${baseUrl}/repo-index/status`, {
23602
23606
  method: "GET",
@@ -34612,7 +34616,7 @@ function checkRepoIndexCloud(probe) {
34612
34616
  ...Object.entries(readiness.modes).sort(([a], [b]) => a.localeCompare(b)).flatMap(([mode, result]) => {
34613
34617
  const errors = Object.entries(result.errors).map(([kind, count]) => `${kind}:${count}`).join(",") || "none";
34614
34618
  return [
34615
- `v4 ${mode}: ${result.verdict} \u2014 evidence=${result.evidenceCount}/${result.goldenCount} relevance=${percent(result.expectedTop10CitationRelevance)} citations=${percent(result.citationValidity)} embeddings=${percent(result.embeddingCoverage)} p95=${result.p95V4Ms ?? "n/a"}ms errorRate=${percent(result.errorRate)} errors=${errors}`,
34619
+ `v4 ${mode}: ${result.verdict} \u2014 evidence=${result.evidenceCount}/${result.goldenCount} relevance=${percent(result.expectedTop10CitationRelevance)} citations=${percent(result.citationValidity)} embeddings=${percent(result.embeddingCoverage)} median=${result.medianV4Ms ?? "n/a"}ms errorRate=${percent(result.errorRate)} errors=${errors}`,
34616
34620
  `v4 ${mode} ceilings relevance>=${percent(result.ceilings.minimumExpectedTop10CitationRelevance)} citations>=${percent(result.ceilings.minimumCitationValidity)} embeddings>=${percent(result.ceilings.minimumEmbeddingCoverage)} p95<=${result.ceilings.maximumP95Ms}ms errorRate<=${percent(result.ceilings.maximumErrorRate)}`
34617
34621
  ];
34618
34622
  }),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.0.7",
3
+ "version": "4.0.9",
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",