@mutmutco/codex-plugin 4.5.201 → 4.5.203

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,6 +1,6 @@
1
1
  {
2
2
  "name": "mmi",
3
- "version": "4.5.201",
3
+ "version": "4.5.203",
4
4
  "mmiCompat": "4.x",
5
5
  "description": "MMI workflow skills and org gates delivery.",
6
6
  "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");
@@ -14180,6 +14204,12 @@ function evaluateClaim(item, login) {
14180
14204
  }
14181
14205
  if (others.length) return { ok: false, reason: `${item.ref} is already assigned to @${others.join(", @")}` };
14182
14206
  if (item.status === "In Progress" && mine) return { ok: true, alreadyClaimed: true };
14207
+ if (item.status === "Done") {
14208
+ return {
14209
+ ok: false,
14210
+ reason: `${item.ref} is not claimable: Status is Done \u2014 claim does not reopen terminal cards; skip completed items and pass only open issues (never chain separate claims with &&)`
14211
+ };
14212
+ }
14183
14213
  if (item.status !== "Todo" && item.status !== "In Progress" && item.status !== "In Review") {
14184
14214
  return { ok: false, reason: `${item.ref} is not claimable: Status is ${item.status}` };
14185
14215
  }
@@ -19279,10 +19309,10 @@ var rollout_plan_default = {
19279
19309
  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
19310
  },
19281
19311
  baseline: {
19282
- version: "4.5.201",
19283
- tag: "v4.5.201",
19284
- commit: "bd1c969606c6",
19285
- npm: "@mutmutco/cli@4.5.201"
19312
+ version: "4.5.203",
19313
+ tag: "v4.5.203",
19314
+ commit: "de3cb25fda6a",
19315
+ npm: "@mutmutco/cli@4.5.203"
19286
19316
  },
19287
19317
  exitCriterion: "fleet-n-of-n",
19288
19318
  hubOnlyShortcut: "forbidden",
@@ -19299,14 +19329,14 @@ var rollout_plan_default = {
19299
19329
  repo: "mutmutco/mmi-hub",
19300
19330
  role: "canary",
19301
19331
  schedule: "train",
19302
- v3Target: "v4.5.201"
19332
+ v3Target: "v4.5.203"
19303
19333
  }
19304
19334
  ],
19305
19335
  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
19336
  rollback: {
19307
19337
  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)"
19338
+ mechanism: "npm dist-tag latest -> 4.5.203 and redeploy the Hub Lambda from tag v4.5.203 (de3cb25fda6a); installed clients repair via `mmi-cli doctor`. No other cohort is touched.",
19339
+ v3Target: "v4.5.203 (@mutmutco/cli@4.5.203, tag commit de3cb25fda6a \u2014 last known-good release carrying the repo-index v4-only contract)"
19310
19340
  }
19311
19341
  },
19312
19342
  {
@@ -57958,13 +57988,7 @@ var DISCOVERY_HINT = "run `mmi-cli commands` for the agentic-coding map, `mmi-cl
57958
57988
  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
57989
  var lastParseErrorKind = "other";
57960
57990
  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
- }
57991
+ var lastParseErrorConflict = false;
57968
57992
  function parseInvalidChoiceError(plain) {
57969
57993
  const m = /option '([^']+)' argument '([^']*)' is invalid\. Allowed choices are ([^.]+)\./.exec(plain);
57970
57994
  if (!m) return void 0;
@@ -58045,7 +58069,7 @@ function resolveParseHint() {
58045
58069
  const path2 = canonicalPathFor(commandPath3(cmd));
58046
58070
  return [
58047
58071
  `Usage: mmi-cli ${path2} ${cmd.usage()}`,
58048
- "This command exists and your mmi-cli is not the problem \u2014 the ARGUMENTS did not parse.",
58072
+ 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
58073
  `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
58074
  ].join("\n");
58051
58075
  }
@@ -58101,6 +58125,7 @@ function envelopeAwareWriteErr(str2) {
58101
58125
  return;
58102
58126
  }
58103
58127
  lastParseErrorKind = classifyParseError(plain);
58128
+ lastParseErrorConflict = /cannot be used with/i.test(plain);
58104
58129
  lastUnknownCommand = /unknown command '?([\w:-]+)'?/.exec(plain)?.[1];
58105
58130
  const badChoice = parseInvalidChoiceError(plain);
58106
58131
  if (badChoice) {
@@ -58141,6 +58166,24 @@ function envelopeAwareWriteErr(str2) {
58141
58166
  const flag = match[1];
58142
58167
  const argv = process.argv.slice(2);
58143
58168
  const invoked = resolveCommandFromArgv(program2, argv);
58169
+ const claimStatus = invoked ? boardClaimStatusFlagRecovery(flag, canonicalPathFor(commandPath3(invoked)) ?? commandPath3(invoked), canonicalArgvFor(argv)) : void 0;
58170
+ if (claimStatus) {
58171
+ if (argvWantsJson3()) {
58172
+ process.stderr.write(
58173
+ formatErrorEnvelope(claimStatus.message, {
58174
+ code: ERROR_CODES.ERR_UNKNOWN_FLAG,
58175
+ offending_flag: "--status",
58176
+ corrected_command: claimStatus.corrected
58177
+ }) + "\n"
58178
+ );
58179
+ unknownFlagJsonHandled = true;
58180
+ return;
58181
+ }
58182
+ writeHumanParseError(
58183
+ str2.replace(/unknown option '[^']+'/, `${claimStatus.message}: run \`${claimStatus.corrected}\``)
58184
+ );
58185
+ return;
58186
+ }
58144
58187
  const positional = TARGET_SELECTOR_FLAGS.has(flag) ? positionalTargetForm(invoked, { flag, argv }) : void 0;
58145
58188
  if (argvWantsJson3()) {
58146
58189
  const ownFlags = commandOwnLongFlags(invoked);
@@ -59367,7 +59410,6 @@ program2.parseAsync(process.argv).then(() => finishCliRun()).catch((e) => failGr
59367
59410
  argvWantsJson,
59368
59411
  awsCallerArn,
59369
59412
  ciAuditDeps,
59370
- classifyParseError,
59371
59413
  commandOwnLongFlags,
59372
59414
  envHealLockPath,
59373
59415
  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.203",
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/codex-plugin",
3
- "version": "4.5.201",
3
+ "version": "4.5.203",
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