@mutmutco/kilo-plugin 3.130.0 → 3.132.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,7 @@
1
1
  {
2
2
  "name": "@mutmutco/kilo-plugin",
3
- "version": "3.130.0",
3
+ "version": "3.132.0",
4
+ "mmiCompat": "3.x",
4
5
  "description": "MMI workflow skills and org gates delivery.",
5
6
  "author": {
6
7
  "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
 
@@ -53,16 +53,13 @@ Still run it in the foreground and wait. The lock stops corruption, not confusio
53
53
  that reports "skipped — lock busy" has healed nothing, and an agent that does not read that line will
54
54
  carry on believing its tooling was fixed.
55
55
 
56
- `doctor --no-repo-writes` heals a stale npm global or a stale/unresolved plugin install (the **env**
57
- half of the interactive doctor, #3485/#3975) — it never touches the repo working tree. When it prints
56
+ `doctor --no-repo-writes` heals a stale/unresolved plugin install (the **env** half of the interactive
57
+ doctor, #3485/#3975) — it never touches the repo working tree. When it prints
58
58
  `↻ Updating mmi tooling, one moment…`, relay that before waiting; when it prints `↻ MMI tooling
59
59
  updated — …`, relay the reload/restart guidance.
60
60
 
61
61
  What the env half heals:
62
62
 
63
- - a behind npm global → `npm install -g @mutmutco/cli@<released version>`, pinned, never the floating
64
- `@latest`, which npm can resolve off a cached packument and reinstall the stale version right after a
65
- publish (#3422). Effective on the next invocation.
66
63
  - a stale or unresolved Claude plugin → `claude plugin marketplace remove mmi` → `… remove mutmutco` →
67
64
  `claude plugin marketplace add mutmutco/MMI-Hub` → `claude plugin install mmi@mutmutco`. A fresh
68
65
  reinstall, never `claude plugin update`, which nests into itself past MAX_PATH on Windows and wipes the
@@ -72,6 +69,10 @@ What the env half heals:
72
69
  docs/doctor-contract.md § Guarded cache prune): never the running/newest/installed version, a cache a
73
70
  live session holds is named "still held" and never forced.
74
71
 
72
+ What it does **not** do since #4954: install anything. A behind npm global is REPORTED (the `mmi-cli`
73
+ row names `npm install -g @mutmutco/cli@<released>`) and the `fleet` row reads the scheduled
74
+ `mmi-updater`'s journal — that reconciler is the single writer of CLI and plugin versions.
75
+
75
76
  - **Fast path** → `whoami` then `board read`; no foreground doctor.
76
77
  - **Hard setup signal** → run `doctor --no-repo-writes`, relay `↻` lines, then retry `board read` when appropriate.
77
78
  - **`mmi-cli: command not found`** → plugin PATH provisioning has not applied, or the standalone CLI is not installed.
@@ -13,10 +13,15 @@ One command. Run it when a session opens messy or before a handoff.
13
13
  mmi-cli doctor
14
14
  ```
15
15
 
16
- By default this **heals and cleans** (MMI-Hub#3975): CLI/plugin/marketplace env repairs, managed
17
- `.gitignore`, merged-branch / dead-worktree reap (including deferred IDE-locked removals), light board
18
- mechanical fixes, docs-index working-tree heal, and related full-lane checks. Secrets stay **out** of
19
- default doctor — use `mmi-cli vault secrets diff` when you need a catalog gap check.
16
+ By default this **heals and cleans** (MMI-Hub#3975): plugin env repairs, managed `.gitignore`,
17
+ merged-branch / dead-worktree reap (including deferred IDE-locked removals), light board mechanical
18
+ fixes, docs-index working-tree heal, and related full-lane checks. Secrets stay **out** of default
19
+ doctor — use `mmi-cli vault secrets diff` when you need a catalog gap check.
20
+
21
+ Doctor does **not** update the CLI or the host plugins (MMI-Hub#4954). The scheduled `mmi-updater`
22
+ reconciler is the single writer of those versions; doctor only REPORTS — the `mmi-cli` row names the
23
+ version gap and the `npm install -g @mutmutco/cli@<released>` that closes it, and the `fleet` row reads
24
+ the reconciler's journal (installed / expected / drift per surface).
20
25
 
21
26
  ## Flags
22
27
 
@@ -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
 
@@ -125,7 +125,7 @@ git rev-list --count origin/main..origin/development
125
125
 
126
126
  Before local gates or `release --apply`, ensure the repo-local / PATH `mmi-cli` matches the released train
127
127
  path — a stale checkout (e.g. 2.32.0 while 2.32.4 is released) fails release gates with opaque errors.
128
- Self-heal in place without repo writes (heals run by default since #3975; the flag suppresses only
128
+ Read the gap without repo writes (plugin/env repairs run by default since #3975; the flag suppresses only
129
129
  mutations of the working tree you are about to release from):
130
130
  ```bash
131
131
  mmi-cli doctor --no-repo-writes
@@ -136,10 +136,11 @@ inverse is also true: a run can exit **0** while printing ✗ lines (report-only
136
136
  direction is a gate. Read the rows.
137
137
 
138
138
  - **Blocking:** a red `mmi-cli` / `Claude plugin` version line, or a reported `minClientVersion` gap.
139
- `--no-repo-writes` does not block the env heals the step above self-updates the npm global CLI
140
- (#3272) and reinstalls the plugin (#3282), suppressing only repo-file writes so the re-run should clear
141
- it. If a gap persists, fix it — `mmi-cli doctor`, or `npm install -g @mutmutco/cli`before
142
- continuing. Do **not** proceed to Step 0b while the installed CLI is behind the Hub's `minClientVersion`.
139
+ **Doctor does not update the CLI (#4954).** The scheduled `mmi-updater` owns npm installs now; doctor
140
+ REPORTS the lag (the `mmi-cli` row) and reads the reconciler's journal (the `fleet` row). So the remedy
141
+ here is the explicit install below — `npm install -g @mutmutco/cli@<released>`not a doctor re-run.
142
+ `--no-repo-writes` still heals the plugin install (#3282), suppressing only repo-file writes. Do **not**
143
+ proceed to Step 0b while the installed CLI is behind the Hub's `minClientVersion`.
143
144
  - **Not blocking:** every other red check is hygiene, not a train gate. Stale branches and scratch heal with
144
145
  a plain `mmi-cli doctor` (after the release); `plugin cache` needs a different verb,
145
146
  `mmi-cli plugin prune --apply` — saying doctor cleared it was wrong. Both still exit 1 until you run the
@@ -313,7 +314,13 @@ git tag "$TAG"
313
314
 
314
315
  `mmi-cli devops release --apply`'s exit code is **not** the release verdict: exit `2` can mean the release
315
316
  shipped successfully while protected-branch alignment remains pending, and exit `1` can mean a
316
- post-release follow-up failed after promotion. Read the live release verdict and verify these four
317
+ post-release follow-up failed after promotion **or that the follow-up is merely unresolved** (#4939):
318
+ a verdict of `releaseStatus=succeeded` with `followUpStatus=pending` (the release-triggered runs — e.g.
319
+ the Hub's `deploy.yml` + `publish.yml` — had only just auto-fired) also exits nonzero, and a
320
+ background-task harness surfacing exit codes misreads it as "release failed" when the release actually
321
+ shipped. Classify from the verdict fields, never the exit code alone: `succeeded` + `pending` means
322
+ shipped with the follow-up unresolved — watch the enumerated `workflowRuns` to conclusion; only a
323
+ resolved failure there is a failed follow-up. Read the live release verdict and verify these four
317
324
  facts instead: the `main..development` count, the tag on `origin`, `gh release view`, and the runs on
318
325
  the release SHA.
319
326
 
@@ -499,7 +506,10 @@ mmi-cli oracle org project sync-info --apply # omit --apply for the read-only
499
506
 
500
507
  ## Step 6 — collect deploy verdict + report
501
508
 
502
- The `release --apply` exit code is **not** the release verdict. Report the live release verdict from
509
+ The `release --apply` exit code is **not** the release verdict. A nonzero exit with
510
+ `releaseStatus=succeeded` and `followUpStatus=pending` is the unresolved-follow-up case from Step 3 —
511
+ the release shipped; the runs enumerated in `workflowRuns` are the outstanding verdict, so watch them
512
+ to conclusion here rather than re-running or alarming. Report the live release verdict from
503
513
  the four checks that matter: the `main..development` count, the tag on `origin`, `gh release view`,
504
514
  and the runs on the release SHA; an alignment PR is normal follow-up work when those checks confirm
505
515
  the release shipped.