@mutmutco/claude-plugin 4.5.201 → 4.5.202

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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mmi",
3
3
  "displayName": "MMI",
4
- "version": "4.5.201",
4
+ "version": "4.5.202",
5
5
  "mmiCompat": "4.x",
6
6
  "description": "MMI workflow skills and org gates delivery.",
7
7
  "author": {
package/cli/dist/main.cjs CHANGED
@@ -1595,7 +1595,6 @@ __export(index_exports, {
1595
1595
  argvWantsJson: () => argvWantsJson3,
1596
1596
  awsCallerArn: () => awsCallerArn,
1597
1597
  ciAuditDeps: () => ciAuditDeps2,
1598
- classifyParseError: () => classifyParseError,
1599
1598
  commandOwnLongFlags: () => commandOwnLongFlags,
1600
1599
  envHealLockPath: () => envHealLockPath,
1601
1600
  isOrgRegisteredRepo: () => isOrgRegisteredRepo,
@@ -6299,6 +6298,31 @@ function excessArgumentMessage(extra, corrected) {
6299
6298
  const head = `unexpected positional argument ${list} \u2014 this command does not take it`;
6300
6299
  return corrected ? `${head}. Did you mean \`${corrected}\`?` : head;
6301
6300
  }
6301
+ function boardClaimStatusFlagRecovery(flag, canonicalPath, argv) {
6302
+ if (canonicalPath !== "oracle board claim") return void 0;
6303
+ if (flag !== "--status" && !flag.startsWith("--status=")) return void 0;
6304
+ const kept = [];
6305
+ for (let i = 0; i < argv.length; i++) {
6306
+ const tok = argv[i];
6307
+ if (tok.startsWith("--status=")) continue;
6308
+ if (tok === "--status") {
6309
+ if (i + 1 < argv.length && !argv[i + 1].startsWith("-")) i++;
6310
+ continue;
6311
+ }
6312
+ kept.push(tok);
6313
+ }
6314
+ return {
6315
+ message: "unknown option '--status' \u2014 `oracle board claim` automatically sets status to In Progress; retry without --status and its value",
6316
+ corrected: `mmi-cli ${kept.join(" ")}`
6317
+ };
6318
+ }
6319
+ function classifyParseError(plain) {
6320
+ if (/unknown command/i.test(plain)) return "unknown-command";
6321
+ if (/unknown option|missing required argument|too many arguments|argument missing|is invalid\. Allowed choices are|cannot be used with/i.test(plain)) {
6322
+ return "bad-arguments";
6323
+ }
6324
+ return "other";
6325
+ }
6302
6326
 
6303
6327
  // src/released-version-cache.ts
6304
6328
  var import_node_fs10 = require("node:fs");
@@ -19279,10 +19303,10 @@ var rollout_plan_default = {
19279
19303
  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)."
19280
19304
  },
19281
19305
  baseline: {
19282
- version: "4.5.201",
19283
- tag: "v4.5.201",
19284
- commit: "bd1c969606c6",
19285
- npm: "@mutmutco/cli@4.5.201"
19306
+ version: "4.5.202",
19307
+ tag: "v4.5.202",
19308
+ commit: "e1fe495d9b63",
19309
+ npm: "@mutmutco/cli@4.5.202"
19286
19310
  },
19287
19311
  exitCriterion: "fleet-n-of-n",
19288
19312
  hubOnlyShortcut: "forbidden",
@@ -19299,14 +19323,14 @@ var rollout_plan_default = {
19299
19323
  repo: "mutmutco/mmi-hub",
19300
19324
  role: "canary",
19301
19325
  schedule: "train",
19302
- v3Target: "v4.5.201"
19326
+ v3Target: "v4.5.202"
19303
19327
  }
19304
19328
  ],
19305
19329
  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.",
19306
19330
  rollback: {
19307
19331
  independent: true,
19308
- mechanism: "npm dist-tag latest -> 4.5.201 and redeploy the Hub Lambda from tag v4.5.201 (bd1c969606c6); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
19309
- v3Target: "v4.5.201 (@mutmutco/cli@4.5.201, tag commit bd1c969606c6 \u2014 last known-good release carrying the repo-index v4-only contract)"
19332
+ mechanism: "npm dist-tag latest -> 4.5.202 and redeploy the Hub Lambda from tag v4.5.202 (e1fe495d9b63); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
19333
+ v3Target: "v4.5.202 (@mutmutco/cli@4.5.202, tag commit e1fe495d9b63 \u2014 last known-good release carrying the repo-index v4-only contract)"
19310
19334
  }
19311
19335
  },
19312
19336
  {
@@ -57958,13 +57982,7 @@ var DISCOVERY_HINT = "run `mmi-cli commands` for the agentic-coding map, `mmi-cl
57958
57982
  var STALE_HINT = `(${DISCOVERY_HINT}). If you expected this command to exist, your installed tooling may be stale \u2014 run \`mmi-hub update\`, then retry`;
57959
57983
  var lastParseErrorKind = "other";
57960
57984
  var lastUnknownCommand;
57961
- function classifyParseError(plain) {
57962
- if (/unknown command/i.test(plain)) return "unknown-command";
57963
- if (/unknown option|missing required argument|too many arguments|argument missing|is invalid\. Allowed choices are/i.test(plain)) {
57964
- return "bad-arguments";
57965
- }
57966
- return "other";
57967
- }
57985
+ var lastParseErrorConflict = false;
57968
57986
  function parseInvalidChoiceError(plain) {
57969
57987
  const m = /option '([^']+)' argument '([^']*)' is invalid\. Allowed choices are ([^.]+)\./.exec(plain);
57970
57988
  if (!m) return void 0;
@@ -58045,7 +58063,7 @@ function resolveParseHint() {
58045
58063
  const path2 = canonicalPathFor(commandPath3(cmd));
58046
58064
  return [
58047
58065
  `Usage: mmi-cli ${path2} ${cmd.usage()}`,
58048
- "This command exists and your mmi-cli is not the problem \u2014 the ARGUMENTS did not parse.",
58066
+ lastParseErrorConflict ? "This command exists and your mmi-cli is not the problem \u2014 two of the options conflict. Choose one of them and retry." : "This command exists and your mmi-cli is not the problem \u2014 the ARGUMENTS did not parse.",
58049
58067
  `Run \`mmi-cli ${path2} --help\` for its signature, \`mmi-cli explain ${path2} --json\` for exact detail, or \`mmi-cli commands\` for the task map.`
58050
58068
  ].join("\n");
58051
58069
  }
@@ -58101,6 +58119,7 @@ function envelopeAwareWriteErr(str2) {
58101
58119
  return;
58102
58120
  }
58103
58121
  lastParseErrorKind = classifyParseError(plain);
58122
+ lastParseErrorConflict = /cannot be used with/i.test(plain);
58104
58123
  lastUnknownCommand = /unknown command '?([\w:-]+)'?/.exec(plain)?.[1];
58105
58124
  const badChoice = parseInvalidChoiceError(plain);
58106
58125
  if (badChoice) {
@@ -58141,6 +58160,24 @@ function envelopeAwareWriteErr(str2) {
58141
58160
  const flag = match[1];
58142
58161
  const argv = process.argv.slice(2);
58143
58162
  const invoked = resolveCommandFromArgv(program2, argv);
58163
+ const claimStatus = invoked ? boardClaimStatusFlagRecovery(flag, canonicalPathFor(commandPath3(invoked)) ?? commandPath3(invoked), canonicalArgvFor(argv)) : void 0;
58164
+ if (claimStatus) {
58165
+ if (argvWantsJson3()) {
58166
+ process.stderr.write(
58167
+ formatErrorEnvelope(claimStatus.message, {
58168
+ code: ERROR_CODES.ERR_UNKNOWN_FLAG,
58169
+ offending_flag: "--status",
58170
+ corrected_command: claimStatus.corrected
58171
+ }) + "\n"
58172
+ );
58173
+ unknownFlagJsonHandled = true;
58174
+ return;
58175
+ }
58176
+ writeHumanParseError(
58177
+ str2.replace(/unknown option '[^']+'/, `${claimStatus.message}: run \`${claimStatus.corrected}\``)
58178
+ );
58179
+ return;
58180
+ }
58144
58181
  const positional = TARGET_SELECTOR_FLAGS.has(flag) ? positionalTargetForm(invoked, { flag, argv }) : void 0;
58145
58182
  if (argvWantsJson3()) {
58146
58183
  const ownFlags = commandOwnLongFlags(invoked);
@@ -59367,7 +59404,6 @@ program2.parseAsync(process.argv).then(() => finishCliRun()).catch((e) => failGr
59367
59404
  argvWantsJson,
59368
59405
  awsCallerArn,
59369
59406
  ciAuditDeps,
59370
- classifyParseError,
59371
59407
  commandOwnLongFlags,
59372
59408
  envHealLockPath,
59373
59409
  isOrgRegisteredRepo,
package/cli/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/cli",
3
- "version": "4.5.201",
3
+ "version": "4.5.202",
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",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/claude-plugin",
3
- "version": "4.5.201",
3
+ "version": "4.5.202",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -10,6 +10,14 @@ The server exposes `/health` and `/module.js`. Register the module's bundle URL,
10
10
 
11
11
  `gate` installs and checks the backend and module, including `mmwork-check-ui` from `@mutmutco/mmwork-ds`. Gates run fast deterministic checks only (owner rulings 2026-10-15, MM-Work#5388, and 2026-10-25, MM-Work#7629).
12
12
 
13
+ ## How the design pipeline reaches this module (owner, 2026-10-25; MM-Work#7651 / MM-Work#7654 / Hub#8827)
14
+
15
+ 1. **Single source of truth:** the source folder of `packages/mmwork-ds` in `mutmutco/MM-Work`, owned by the MM-Work Design Lead (tokens, layers, component bundle, component docs, `DESIGN.md` and its `design.json` sidecar). Never edit the kit or its copies here; a missing piece or variant is built there first, or requested via kit MCP `request_piece`.
16
+ 2. **MM Artifact on Live Docs:** Live Docs (`Canlı belgeler / MM-Work`) displays document `3a5c79df-5274-40ad-a1b5-a75e67a74dac` (ATOMIC, module `mm-work-kit`), an MM Artifact in the `design-system` format rebuilt from the kit source on every kit release: Overview, Guide (kit README + `DESIGN.md`), Tokens, Atoms, Molecules, Organisms, Templates and Files. Browse it to see every piece live.
17
+ 3. **Impeccable knows Atomic Design at boot:** `impeccable context` loads `PRODUCT.md`, `DESIGN.md` and the `design.json` sidecar in `.impeccable`, which carry the Atomic Design contract 1.1.0: `Atoms -> Molecules -> Organisms -> Templates -> Pages`, upward-only composition enforced by `npx mmwork-check-ui --rules=all`. Pages arrange exported `@mutmutco/mmwork-ds` pieces around one template and never paint custom controls, raw `<button>`/`<input>`, `mw-*` classes, inline visual styles or raw hex/px values.
18
+ 4. **Automatic propagation:** on every kit release the Hub kit-adopt workflow opens an adoption PR here that bumps `@mutmutco/mmwork-ds`, runs `mmwork-sync-impeccable`, and writes `DESIGN.md`, the `.impeccable` design manifest and `.impeccable/config.json` (`hook.enabled: true`) at the repository root, and deletes any stale copies under `module/`. These files are kit-owned: do not hand-edit them, and keep them committed even if `.impeccable/` is ignored (the adoption PR force-stages them).
19
+ 5. **Root only:** `PRODUCT.md`, `DESIGN.md`, the `.impeccable` design manifest and `.impeccable/config.json` live only at this repository's root, never duplicated under `module/`; a copy there makes Impeccable treat `module/` as a separate root without `PRODUCT.md` and the config. Run `impeccable context` from the root. Any suite-wide propagation of these files needs an explicit intercom ACK handshake with the MM-Work Design Lead naming the files written and removed, `impeccable context` + `impeccable doctor --json` verification, and the issue/PR reference.
20
+
13
21
  ## Mandatory Impeccable workflow (owner, 2026-10-25; Hub#8814 / MM-Work#7629)
14
22
 
15
23
  UI and design verification uses `@mutmutco/mmwork-ds` (`mmwork-check-ui`) plus Impeccable on every design task: inspect the toolkit for applicable capabilities, work directly on the live app, and use our own MM Artifacts A/B canvas only when an owner A/B choice is needed. Functional journeys, where separately permitted, stay opt-in `workflow_dispatch`-only and never act as design checks.
@@ -1,2 +1,4 @@
1
1
  In the suite lead (MM-Work) a plain rcand, release or hotfix refuses: run `mmi-cli devops suite rcand --owner-go` or `mmi-cli devops suite release --owner-go` instead (a lead-only cut needs `--suite-solo --owner-go`). A suite member cannot run standalone rcand, release or hotfix: cut from the suite lead; only a backward-compatible solo backend release/hotfix with explicit owner approval may pass `--suite-solo --owner-go`, and its MM-Work development pin PR must land before the suite is in sync.
2
2
 
3
+ Support sessions (MMI-Hub, Jerv-Hub, Jerv-JervCode) are not suite members and hold standing owner authorization (2026-10-25) to cut and ship releases at their discretion during suite runs without repeated per-release approval; record this standing rule in every suite session's working note and briefing while keeping all standard release preflight, gate, and verification checks.
4
+
@@ -7,7 +7,7 @@ description: Ship rc or direct-track development to main and production.
7
7
 
8
8
  # /release — ship to main + prod
9
9
 
10
- Bare `minor|major|patch` (default `patch`), never a flag; needs Jervaise's yes (principle 12). `minor`: `MMI_BUMP_REASON`. `major`: also `MMI_MAJOR_APPROVED=<exact version>` after the yes ([docs/versioning.md](../../docs/versioning.md)).
10
+ Bare `minor|major|patch` (default `patch`), never a flag; needs Jervaise's yes (principle 12). Support sessions (`MMI-Hub`, `Jerv-Hub`, `Jerv-JervCode`) hold standing owner authorization (2026-10-25) to release at their discretion during active suite runs without repeated per-release approval; record this standing rule in every suite session's working note and briefing ([suite.md](suite.md)). All standard release preflight, gate, and verification checks still apply. `minor`: `MMI_BUMP_REASON`. `major`: also `MMI_MAJOR_APPROVED=<exact version>` after the yes ([docs/versioning.md](../../docs/versioning.md)).
11
11
 
12
12
  ## Lane
13
13
 
@@ -1,5 +1,7 @@
1
1
  In the suite lead (MM-Work) a plain rcand, release or hotfix refuses: run `mmi-cli devops suite rcand --owner-go` or `mmi-cli devops suite release --owner-go` instead (a lead-only cut needs `--suite-solo --owner-go`). A suite member cannot run standalone rcand, release or hotfix: cut from the suite lead; only a backward-compatible solo backend release/hotfix with explicit owner approval may pass `--suite-solo --owner-go`, and its MM-Work development pin PR must land before the suite is in sync.
2
2
 
3
+ Support sessions (MMI-Hub, Jerv-Hub, Jerv-JervCode) are not suite members and hold standing owner authorization (2026-10-25) to cut and ship releases at their discretion during suite runs without repeated per-release approval; record this standing rule in every suite session's working note and briefing while keeping all standard release preflight, gate, and verification checks.
4
+
3
5
  Every new mm-work suite Release (including solo and hotfix releases) requires both `--announce-summary-file <path>` (English) and `--announce-summary-file-tr <path>` (Turkish, "sen" form) in the update-notes template. The canonical wording lives in the [MM-Work GUIDE, "Update notes"](https://github.com/mutmutco/MM-Work/blob/development/packages/mmwork-ds/GUIDE.md#update-notes); this repo links it and never copies it. Each file has the section word `Fixed` / `Düzeldi` (what works now, never the problem: "Drive: Scans of large drives now finish without timing out."; a line without now / again / no longer, or artık / yeniden / tekrar / yine, is refused) and/or `New` / `Yeni` (what you can now do) on its own line, Fixed first, each only when it has lines. Under them go 1–8 lines of `<Area>: <sentence>.`, each at most 120 characters, with no issue numbers, versions or commit prefixes. Off-template or missing files refuse before tagging. Do not write the head (app · date · time) or the thanks line: MM-Work renders both from the Release date and credits. Suite release also requires a valid `--member-summary-file <owner/repo=path>` and `--member-summary-file-tr <owner/repo=path>` for every member being released, before promoting any member. Carried, held and already-released members need none, and existing Releases can resume without new files.
4
6
  The `/user-releases` feed serves template notes as `updateNotes: {en?, tr?: {fixed[], new[]}}`. Older title-and-notes bodies keep `plainWords` and get `updateNotes: null`.
5
7