@mutmutco/kilo-plugin 3.129.0 → 3.131.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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/kilo-plugin",
3
- "version": "3.129.0",
3
+ "version": "3.131.0",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -18,9 +18,9 @@ The FIX is never back-merged: `development` already contains it, and `rc` absorb
18
18
 
19
19
  The VERSION FOLD is different, and `hotfix release` ports it for you (#4410). `hotfix start` commits the
20
20
  fold onto the main-base branch, so after the tag `main` declares the new version while `development`
21
- still declares the old one and on a repo whose branch-pinned files carry that version (the Hub's
22
- `.claude-plugin/marketplace.json` pins plugin content to `main`) catalog-lockstep then reds **every** PR
23
- into development until it is ported. Step 3 opens that development-base fold PR automatically; land it.
21
+ still declares the old one. The Hub's catalogs now pin exact npm packages (#4948), so there is no
22
+ branch/content lockstep red; the fold still must land so the next release starts from production's real
23
+ version, BOM, and package pins. Step 3 opens that development-base fold PR automatically; land it.
24
24
 
25
25
  ## Merge floor (#3167 — non-negotiable)
26
26
 
@@ -144,19 +144,17 @@ merged into `development`; the fold is regenerated on a branch cut from `develop
144
144
  reported `development fold port FAILED`, follow the manual remedy it named; never improvise a merge from
145
145
  `main`.
146
146
 
147
- ### Catalog-lockstep vs development prepare (#4517)
147
+ ### Development fold after a hotfix (#4517 / #4948)
148
148
 
149
- Hub docs catalog-lockstep refuses PRs into `development` that advance
150
- `.claude-plugin/marketplace.json` ahead of `origin/main`. That gate is correct for main-anchored catalog
151
- truth. When Publish-Truth / a version bump must advance the marketplace, do **not** land
152
- `release-distribution prepare` as a development PR — use this hotfix door:
149
+ The Hub's thin catalogs now pin exact npm packages, so the old main-anchored catalog-lockstep gate is
150
+ retired: an unreleased branch cannot deliver a package version the release train has not published.
151
+ Hotfix versioning still belongs on the main-base train, never in an improvised development prepare PR:
153
152
 
154
153
  1. `mmi-cli devops hotfix start --from <merged-dev-pr-or-sha>` (prepare + distribution bump on `hotfix/vX.Y.Z` from `main`)
155
154
  2. merge the hotfix PR → `mmi-cli devops hotfix release vX.Y.Z` (publish)
156
155
  3. land the automatic `hotfix-fold/<tag>` development fold PR (or follow its printed remedy)
157
156
 
158
- A development prepare PR that only exists to move marketplace ahead of main will keep failing
159
- catalog-lockstep; that is not a false red — switch to the hotfix path above.
157
+ The fold is now required for version/BOM/package-pin continuity, not to clear a branch-content gate.
160
158
 
161
159
  ## Retro
162
160
 
@@ -24,15 +24,14 @@ first gap:
24
24
  - **Board** — is the Project board reachable, and how many items are on it.
25
25
  - **Registry** — is the repo registered in the Hub (`PROJECT#<slug>` META).
26
26
  - **Secrets** — is a GitHub token available for the vault path.
27
- - **Plugin** — will this machine ever pick up a new MMI plugin release, and from which branch (#3485).
28
-
29
- The **Plugin** row is the one nothing else catches, and it is per machine, not per repo. Claude Code
30
- leaves auto-update **off** for third-party marketplaces, and a marketplace registered with no
31
- `source.ref` serves its catalog from the repo's default branch while pinning plugin content to `main`.
32
- Both are hand edits in the developer's own Claude config org tooling deliberately does not write them
33
- (owner ruling on #3485) so a machine nobody tells stays silently a release behind from day one. The row
34
- names both fixes verbatim; it never takes `Next command`, because a stale plugin does not stop the work in
35
- front of you.
27
+ - **Plugin** — is `mmi-updater` the single writer, and does its journal show every present surface at
28
+ the gated fleet version (#4945).
29
+
30
+ The **Plugin** row is per machine, not per repo. The Hub's thin Claude/Codex catalogs pin exact npm
31
+ packages; Git no longer transports plugin content, and background marketplace auto-update stays **off**
32
+ so it cannot race the scheduled updater. The updater gates a release tag+BOM, converges each present host,
33
+ and writes the journal stamp (`fleet <V> ✓`). A red row names `mmi-updater verify` or
34
+ `mmi-updater reconcile`; no marketplace ref or hand-edited auto-update ceremony remains.
36
35
 
37
36
  A `✗` on any line comes with a `Next command:` — run **that** first. Common ones:
38
37
 
@@ -100,8 +100,8 @@ exists — a tag minted before the conflict resolution points at the wrong SHA.
100
100
  ## Step 3 — tag the rc
101
101
 
102
102
  The shared helper derives the next rc tag from existing tags (re-run-safe — `-rc.N` increments). `rc` mode
103
- requires `MMI_BUMP_INTENT` (PATCH is `/hotfix`-only, so a planned release is `minor` or `major`; the train
104
- refuses without it):
103
+ reads `MMI_BUMP_INTENT`; unset it resolves to `patch` (#4929) declare `minor`/`major` explicitly for a
104
+ planned feature cycle:
105
105
  ```bash
106
106
  TAG=$(MMI_BUMP_INTENT=minor node scripts/next-version.mjs rc) # -> vX.Y.0-rc.N
107
107
  git tag "$TAG"
@@ -191,11 +191,10 @@ Version `vX.Y.0-rc.N` · merged commits · rc deploy run + env URL.
191
191
  - **MAJOR / exact-target cycle:** for a release the tag math can't derive (a MAJOR like `2.0.0`, or skipping
192
192
  a version already on npm), export `MMI_RELEASE_VERSION=X.Y.Z` before `/rcand` — `next-version.mjs rc` then
193
193
  opens that exact cycle (validated to move strictly forward). Keep it exported through `/release`.
194
- - **`MMI_BUMP_INTENT=major|minor|patch` is required for `next-version.mjs rc`** (Step 3) — it selects the
195
- increment for an ordinary release and is never inferred; absence is a hard refusal, not a default.
196
- **Export it for the whole run:** `mmi-cli devops rcand --apply` resolves the intent itself and refuses
197
- mid-train with the same message, so passing it only as a one-off prefix on the `next-version.mjs` command
198
- leaves the apply to fail after the preflight has already passed. This is
194
+ - **`MMI_BUMP_INTENT=major|minor|patch` selects the increment for `next-version.mjs rc`** (Step 3); absent,
195
+ it defaults to `patch` (#4929). **Export it for the whole run:** `mmi-cli devops rcand --apply` resolves
196
+ the intent itself with the same default, so a one-off prefix on the `next-version.mjs` command leaves the
197
+ apply deriving a different increment than the tag you minted. This is
199
198
  a different knob from `MMI_RELEASE_VERSION` above: `MMI_BUMP_INTENT` picks the increment,
200
199
  `MMI_RELEASE_VERSION` overrides the computed version entirely and is for the exceptional case only.
201
200
 
@@ -5,6 +5,11 @@ description: Ship rc or direct-track development to main and production.
5
5
 
6
6
  **Host-native invocation:** Claude `/mmi:release` · Codex `$mmi:release` · jervcode/Kimi `/skill:release` · Kilo `skill` tool. A backticked `/name` in this doc names the matching workflow (this skill or a sibling), not a literal command.
7
7
 
8
+ **Argument (#4929):** `/release minor`, `/release major`, or `/release patch` — a bare bump word, never a
9
+ `--flag` or env var. Map it to `MMI_BUMP_INTENT` exported for the whole run (the train and
10
+ `next-version.mjs` both read it). No argument → `patch`: a `/release patch` from development is a
11
+ legitimate ordinary release; `/hotfix` remains the cherry-pick promotion lane.
12
+
8
13
  # /release — ship to main + prod
9
14
 
10
15
  Full-track repos ship **exactly what is on `rc`** (never pulls `development`): merge `rc → main`, tag
@@ -56,9 +61,13 @@ mean "unverified", never an authority verdict:**
56
61
  denial, and retrying will never change it: fix the `{owner}/{repo}` argument, then re-probe. Before the
57
62
  fix this string came back `role: master, train: true, verified: true` for anything owner/name-shaped.
58
63
 
59
- - An `unknown command 'org'` error is a STALE CLI — the `org` namespace ships in newer trains, so an old
60
- installed CLI can't even parse the probe. Jump to Step 0a, heal the CLI, then re-run this probe; never
61
- conclude the command form is wrong from a pre-heal failure (#3150).
64
+ - An `unknown command 'oracle'` error is a STALE CLI — the house-prefixed namespaces ship in newer
65
+ trains, so an old installed CLI can't even parse the probe. Jump to Step 0a, heal the CLI, then re-run
66
+ this probe; never conclude the command form is wrong from a pre-heal failure (#3150). The mirror-image
67
+ failure is a Wave-3 flat alias on a CURRENT CLI: the un-housed `org …`, `secrets …`, and
68
+ `release …` forms were removed in #4316 and fail closed with a house-prefix error — rewrite to the
69
+ house form (`mmi-cli oracle org …`, `mmi-cli vault secrets …`, `mmi-cli devops release …`); that is
70
+ never a stale CLI and never an authority verdict.
62
71
  - A **TIMEOUT or network error** (`operation aborted due to timeout`, DNS/socket failures) is **not** a
63
72
  `train: false` denial (#3321). Read the probe's own `verified` field: `verified: false` means the verdict
64
73
  could not be established, so the `train: false` beside it carries NO authority meaning. The client
@@ -70,8 +79,10 @@ mean "unverified", never an authority verdict:**
70
79
 
71
80
  Then
72
81
  preconditions: clean tree; full-track repos run from `rc` (or from `development` with `--dev`), while
73
- direct-track repos run from `development`. Ordinary `/release` also needs `MMI_BUMP_INTENT=minor|major`
74
- exported in the apply environment (patch is `/hotfix`); the train does not infer an open cycle.
82
+ direct-track repos run from `development`. Ordinary `/release` takes its bump intent from the bare
83
+ argument (`/release minor|major|patch` `MMI_BUMP_INTENT`, exported for the whole run); unstated, the
84
+ train defaults to `patch` (#4929). An invalid intent fails `--apply` closed at intent resolution
85
+ (`MMI_BUMP_INTENT must be one of major|minor|patch`), before any merge, tag, or fold.
75
86
 
76
87
  **Run from the checkout that already has that branch — never a fresh isolated worktree (#2770).** This is
77
88
  a shared-branch train operation (merge/tag/push against origin's protected `main`/`rc`), not an isolated
@@ -288,8 +299,10 @@ Nothing to do by hand; the `--apply` result reports the fold outcome (`versionFo
288
299
  ## Step 2 — tag the release
289
300
 
290
301
  Full-track repos drop the `-rc.N` suffix from the open cycle. Direct-track repos use the next cycle directly
291
- because they have no rc tag — and `cycle` mode requires `MMI_BUMP_INTENT` (PATCH is `/hotfix`-only, so a
292
- planned release is `minor` or `major`; the train refuses without it):
302
+ because they have no rc tag — `cycle` mode reads `MMI_BUMP_INTENT` (the `/release` argument; unset →
303
+ `patch`, #4929). The Step 0 export is what covers the apply run — the inline prefix below only resolves
304
+ the tag for display; `mmi-cli devops release --apply` re-derives intent itself and fail-closes before any
305
+ merge, tag, or fold when the value is invalid:
293
306
  ```bash
294
307
  TAG=$(node scripts/next-version.mjs release) # full-track repos -> vX.Y.0
295
308
  TAG=$(MMI_BUMP_INTENT=minor node scripts/next-version.mjs cycle) # direct-track repos -> vX.Y.0
@@ -300,7 +313,13 @@ git tag "$TAG"
300
313
 
301
314
  `mmi-cli devops release --apply`'s exit code is **not** the release verdict: exit `2` can mean the release
302
315
  shipped successfully while protected-branch alignment remains pending, and exit `1` can mean a
303
- post-release follow-up failed after promotion. Read the live release verdict and verify these four
316
+ post-release follow-up failed after promotion **or that the follow-up is merely unresolved** (#4939):
317
+ a verdict of `releaseStatus=succeeded` with `followUpStatus=pending` (the release-triggered runs — e.g.
318
+ the Hub's `deploy.yml` + `publish.yml` — had only just auto-fired) also exits nonzero, and a
319
+ background-task harness surfacing exit codes misreads it as "release failed" when the release actually
320
+ shipped. Classify from the verdict fields, never the exit code alone: `succeeded` + `pending` means
321
+ shipped with the follow-up unresolved — watch the enumerated `workflowRuns` to conclusion; only a
322
+ resolved failure there is a failed follow-up. Read the live release verdict and verify these four
304
323
  facts instead: the `main..development` count, the tag on `origin`, `gh release view`, and the runs on
305
324
  the release SHA.
306
325
 
@@ -486,7 +505,10 @@ mmi-cli oracle org project sync-info --apply # omit --apply for the read-only
486
505
 
487
506
  ## Step 6 — collect deploy verdict + report
488
507
 
489
- The `release --apply` exit code is **not** the release verdict. Report the live release verdict from
508
+ The `release --apply` exit code is **not** the release verdict. A nonzero exit with
509
+ `releaseStatus=succeeded` and `followUpStatus=pending` is the unresolved-follow-up case from Step 3 —
510
+ the release shipped; the runs enumerated in `workflowRuns` are the outstanding verdict, so watch them
511
+ to conclusion here rather than re-running or alarming. Report the live release verdict from
490
512
  the four checks that matter: the `main..development` count, the tag on `origin`, `gh release view`,
491
513
  and the runs on the release SHA; an alignment PR is normal follow-up work when those checks confirm
492
514
  the release shipped.
@@ -546,12 +568,15 @@ deploy run + URL + **green/red** · branch-alignment note · npm publish run + C
546
568
 
547
569
  ## Notes
548
570
 
549
- - PATCH-level releases are `/hotfix` only (a hotfix always skips rc — it cherry-picks `development → main`
550
- directly); planned releases are MINOR or MAJOR. Never force-push `main`.
551
- - **`MMI_BUMP_INTENT=major|minor` is required in the apply environment for ordinary `/release`** (patch is
552
- `/hotfix`). Absence is a hard refusal — the train never infers an open cycle. Export it for the whole
553
- run, not a one-off prefix on `next-version.mjs cycle`: `mmi-cli devops release --apply` (and `rcand
554
- --apply`) resolve intent themselves and refuse mid-train if the env is missing. `MMI_RELEASE_VERSION`
571
+ - `/hotfix` stays the cherry-pick promotion lane (a hotfix always skips rc — it cherry-picks
572
+ `development → main` directly), but a `/release patch` from development is a legitimate ordinary
573
+ release (#4929). Never force-push `main`.
574
+ - **`MMI_BUMP_INTENT=major|minor|patch` comes from the bare `/release` argument; unstated it defaults to
575
+ `patch`** (#4929). Export it for the whole run, not a one-off prefix on `next-version.mjs cycle`:
576
+ `mmi-cli devops release --apply` (and `rcand --apply`) resolve intent themselves **before any merge,
577
+ tag, or fold** — direct-track included — defaulting to `patch` when the env is absent and failing closed
578
+ there with `MMI_BUMP_INTENT must be one of major|minor|patch` on an invalid value, so the tree stays
579
+ clean on the start branch. `MMI_RELEASE_VERSION`
555
580
  below is a different knob: it overrides the computed version; it does not replace the intent export
556
581
  unless you set that exact-target env instead.
557
582
  - **`--dev` (full-track only):** releases `development → main` skipping rc, with the same fold/tag/Release/
@@ -561,8 +586,8 @@ deploy run + URL + **green/red** · branch-alignment note · npm publish run + C
561
586
  - **MAJOR / exact-target release:** to ship a version the tag math can't derive (a MAJOR like `2.0.0`, or
562
587
  skipping a version already on npm), product repos export `MMI_RELEASE_VERSION=X.Y.Z` for **both** `/rcand`
563
588
  and `/release`; MMI-Hub exports it for `/release` only. Steps 1b/2 then fold and tag exactly that
564
- version. Unset, the train uses the declared `MMI_BUMP_INTENT` increment it does not infer an open
565
- cycle, and apply fail-closes if that env is also missing.
589
+ version. Unset, the train uses the declared `MMI_BUMP_INTENT` increment, defaulting to `patch` when
590
+ neither the argument nor the env declares one (#4929).
566
591
 
567
592
  ## Retro — one check before you finish
568
593
  Before your final report, answer one question honestly: did **this skill's own instructions** misfire