@mutmutco/cli 4.3.63 → 4.3.64

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 +61 -15
  2. package/package.json +1 -1
package/dist/main.cjs CHANGED
@@ -13772,7 +13772,7 @@ function walk(dir, root, out) {
13772
13772
  return out;
13773
13773
  }
13774
13774
  function defaultListDocs(root) {
13775
- const docs = ["docs", "skills/org-guide", "skills/mmi-help"].flatMap((path2) => {
13775
+ const docs = ["docs", "skills/org-guide", "skills/mmi-help", "skills/brand"].flatMap((path2) => {
13776
13776
  const directory = (0, import_node_path12.join)(root, path2);
13777
13777
  return (0, import_node_fs14.existsSync)(directory) ? walk(directory, root, []) : [];
13778
13778
  }).filter(
@@ -15801,10 +15801,10 @@ var rollout_plan_default = {
15801
15801
  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)."
15802
15802
  },
15803
15803
  baseline: {
15804
- version: "4.3.63",
15805
- tag: "v4.3.63",
15806
- commit: "23180ae03611",
15807
- npm: "@mutmutco/cli@4.3.63"
15804
+ version: "4.3.64",
15805
+ tag: "v4.3.64",
15806
+ commit: "91fe5c009629",
15807
+ npm: "@mutmutco/cli@4.3.64"
15808
15808
  },
15809
15809
  exitCriterion: "fleet-n-of-n",
15810
15810
  hubOnlyShortcut: "forbidden",
@@ -15821,14 +15821,14 @@ var rollout_plan_default = {
15821
15821
  repo: "mutmutco/mmi-hub",
15822
15822
  role: "canary",
15823
15823
  schedule: "train",
15824
- v3Target: "v4.3.63"
15824
+ v3Target: "v4.3.64"
15825
15825
  }
15826
15826
  ],
15827
15827
  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.",
15828
15828
  rollback: {
15829
15829
  independent: true,
15830
- mechanism: "npm dist-tag latest -> 4.3.63 and redeploy the Hub Lambda from tag v4.3.63 (23180ae03611); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
15831
- v3Target: "v4.3.63 (@mutmutco/cli@4.3.63, tag commit 23180ae03611 \u2014 last known-good release carrying the repo-index v4-only contract)"
15830
+ mechanism: "npm dist-tag latest -> 4.3.64 and redeploy the Hub Lambda from tag v4.3.64 (91fe5c009629); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
15831
+ v3Target: "v4.3.64 (@mutmutco/cli@4.3.64, tag commit 91fe5c009629 \u2014 last known-good release carrying the repo-index v4-only contract)"
15832
15832
  }
15833
15833
  },
15834
15834
  {
@@ -19606,12 +19606,21 @@ function readHermesPluginEvidence(env = process.env) {
19606
19606
  skills = (0, import_node_fs19.existsSync)((0, import_node_path17.join)(root, "skills")) && (0, import_node_fs19.statSync)((0, import_node_path17.join)(root, "skills")).isDirectory();
19607
19607
  } catch {
19608
19608
  }
19609
+ let provisioned = false;
19610
+ const provisionedRoot = (0, import_node_path17.join)(host, "skills", "mmi");
19611
+ try {
19612
+ provisioned = (0, import_node_fs19.existsSync)(provisionedRoot) && (0, import_node_fs19.statSync)(provisionedRoot).isDirectory();
19613
+ } catch {
19614
+ }
19615
+ const treeOk = (0, import_node_fs19.existsSync)((0, import_node_path17.join)(root, "__init__.py")) && skills && manifest === "valid";
19616
+ const receipt = treeOk && !provisioned ? `hermes-skills-unprovisioned:${provisionedRoot}` : void 0;
19609
19617
  return {
19610
19618
  hostPresent: (0, import_node_fs19.existsSync)(host),
19611
19619
  installRecordPresent,
19612
19620
  manifest,
19613
- payloadPresent: (0, import_node_fs19.existsSync)((0, import_node_path17.join)(root, "__init__.py")) && skills && manifest === "valid",
19614
- ...installedVersion ? { installedVersion } : {}
19621
+ payloadPresent: treeOk && provisioned,
19622
+ ...installedVersion ? { installedVersion } : {},
19623
+ ...receipt ? { receipt } : {}
19615
19624
  };
19616
19625
  }
19617
19626
  function installedSurfacePluginVersion(surface) {
@@ -21505,9 +21514,45 @@ async function supersedeContentCausedPublishLeg(deps, cwd) {
21505
21514
  throw new Error(`release --supersede-publish: could not prove ${prior.tag} live on origin (${e instanceof Error ? e.message : String(e)}) \u2014 refusing to close the leg on an unproven state; retry when origin answers (#6638)`);
21506
21515
  }
21507
21516
  if (liveSha.toLowerCase() !== prior.tagSha.toLowerCase()) {
21508
- throw new Error(
21509
- `release --supersede-publish: origin reports ${prior.tag} at ${liveSha.slice(0, 12) || "no tag"} but the ledger anchors ${prior.tagSha.slice(0, 12)} \u2014 an absent or divergent release is NOT supersedeable (release --abort --apply is the unpublished candidate's own exit); nothing was written (#6638)`
21510
- );
21517
+ if (liveSha) {
21518
+ throw new Error(
21519
+ `release --supersede-publish: origin reports ${prior.tag} at ${liveSha.slice(0, 12)} but the ledger anchors ${prior.tagSha.slice(0, 12)} \u2014 a divergent release is NOT supersedeable; nothing was written (#6638)`
21520
+ );
21521
+ }
21522
+ let repository;
21523
+ try {
21524
+ repository = JSON.parse(await deps.run("gh", ["repo", "view", prior.repo, "--json", "nameWithOwner"]));
21525
+ } catch (e) {
21526
+ throw new Error(`release --supersede-publish: could not prove repository access for ${prior.repo} (${e instanceof Error ? e.message.split("\n")[0] : String(e)}) \u2014 a Release 404 is untrusted without that proof; nothing was written (#6638)`);
21527
+ }
21528
+ if (repository.nameWithOwner !== prior.repo) {
21529
+ throw new Error(`release --supersede-publish: repository access proof named ${String(repository.nameWithOwner || "(missing)")}, not ${prior.repo} \u2014 nothing was written (#6638)`);
21530
+ }
21531
+ let releaseAbsent = false;
21532
+ try {
21533
+ await deps.run("gh", ["release", "view", prior.tag, "--repo", prior.repo, "--json", "tagName"]);
21534
+ } catch (e) {
21535
+ const detail = `${e instanceof Error ? e.message : String(e)} ${String(e.stderr ?? "")}`;
21536
+ releaseAbsent = /release not found|HTTP 404|\(404\)/i.test(detail);
21537
+ if (!releaseAbsent) {
21538
+ throw new Error(`release --supersede-publish: could not prove the GitHub Release for ${prior.tag} absent (${detail.split("\n")[0]}) \u2014 refusing to close on an unproven state; nothing was written (#6638)`);
21539
+ }
21540
+ }
21541
+ if (!releaseAbsent) {
21542
+ throw new Error(`release --supersede-publish: origin no longer has ${prior.tag} but its GitHub Release still exists \u2014 resolve the mixed external state before closing the ledger; nothing was written (#6638)`);
21543
+ }
21544
+ const archivePath = (0, import_node_path21.join)((0, import_node_path21.dirname)(path2), `phases.archive-${prior.tag}.json`);
21545
+ if ((0, import_node_fs21.existsSync)(archivePath)) {
21546
+ throw new Error(`release --supersede-publish: archive already exists at ${archivePath} \u2014 preserving both ledger records; resolve the collision by hand; nothing was written (#6638)`);
21547
+ }
21548
+ (0, import_node_fs21.renameSync)(path2, archivePath);
21549
+ return {
21550
+ command: "release-supersede-publish",
21551
+ repo: prior.repo,
21552
+ tag: prior.tag,
21553
+ tagSha: prior.tagSha,
21554
+ note: `closed the deleted ${prior.tag} publish failure by archiving its ledger after origin and GitHub both proved absent; start a fresh release train to carry the cause fix`
21555
+ };
21511
21556
  }
21512
21557
  const note = `superseded: content-caused publish failure on the immutable promoted ${prior.tag} \u2014 the cause fix rides the next patch train (master-approved closure, #6638)`;
21513
21558
  atomicWriteJson(path2, {
@@ -31877,7 +31922,7 @@ var surfaces_default = {
31877
31922
  },
31878
31923
  enforcementCeilings: [
31879
31924
  "MMI ships no Hermes hooks (#5908): the plugin contributes skills and the /mmi command only; enforcement is host-side.",
31880
- "Hermes user plugins are opt-in through plugins.enabled; operator consent and host process isolation remain Hermes-owned.",
31925
+ "Hermes user plugins are opt-in through plugins.enabled (#6656): after a verified converge MMI-Hub enables its OWN mmi key through Hermes' own `hermes plugins enable mmi --no-allow-tool-override` command, and never reads, reorders, or writes another operator entry. Built-in tool override is explicitly declined, since MMI ships no Hermes hooks. Host process isolation remains Hermes-owned.",
31881
31926
  "npm is MMI transport only: MMI-Hub extracts @mutmutco/hermes-plugin into $HERMES_HOME/plugins/mmi and provisions the canonical skills into $HERMES_HOME/skills/mmi/; a fresh Hermes Agent process is required for discovery."
31882
31927
  ]
31883
31928
  }
@@ -45032,7 +45077,8 @@ function mmiDoctorDeps(opts = {}) {
45032
45077
  manifest: hermes?.manifest ?? (installedVersion ? "valid" : snapshot.installRecordPresent ? "invalid" : "missing"),
45033
45078
  guardState: buildPluginGuardDecision(snapshot).state,
45034
45079
  ...installedVersion ? { installedVersion } : {},
45035
- ...stagedVersion ? { stagedVersion } : {}
45080
+ ...stagedVersion ? { stagedVersion } : {},
45081
+ ...hermes?.receipt ? { receipt: hermes.receipt } : {}
45036
45082
  };
45037
45083
  return surfaceEvidence;
45038
45084
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.3.63",
3
+ "version": "4.3.64",
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",