@mutmutco/kilo-plugin 3.97.0 → 3.99.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.97.0",
3
+ "version": "3.99.0",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -36,6 +36,13 @@ Priority is a **board field**, never a label (#1454 retired the four `priority:*
36
36
  checks they are gone). The per-step instructions below
37
37
  are the manual path; `bootstrap apply <repo> [--execute]` automates them from this manifest.
38
38
 
39
+ **`bootstrap apply` is a single-repo tool** — fresh bootstrap/onboarding, or refreshing one repo's own
40
+ drifted seed. It is **never** the fleet-wide fan-out for an `org`-owned seed edit: that write path is
41
+ propagation from a Hub merge (#4233), and the seeded `agent-pr.yml` itself now fails the merge gate on
42
+ any repo that receives a hand-edit to an org-owned target path outside a propagation/bootstrap-delivery
43
+ branch (#4241). Running `apply --execute` against every registry repo by hand to fan out a Hub edit is
44
+ exactly the copy-per-repo pattern this rule exists to end — see Hub#4234.
45
+
39
46
  **Release gap — a new topology value must reach TWO surfaces, and a local dev build only fixes one (#2928).**
40
47
  A new `--project-type`, `--deploy-model`, or `--release-track` lands on `development` but is not live until a
41
48
  release train ships it — in **both** of these places:
@@ -130,11 +137,15 @@ FIRST=main # trunk (content)
130
137
 
131
138
  # One-time namespace + first-ref creation uses the authenticated master-admin GitHub session. The current
132
139
  # mmi-cli has no App-backed command for a repository that does not exist; this is the named exception.
133
- gh repo create "$OWNER/$REPO" --private
140
+ gh repo create "$OWNER/$REPO" --private --disable-wiki
134
141
  gh api -X PUT "repos/$OWNER/$REPO/contents/.gitkeep" \
135
142
  -f message="chore: initial commit" -f content="Cg==" -f branch="$FIRST"
136
143
  ```
137
144
 
145
+ `--disable-wiki` seeds `has_wiki=false` at creation: wikis are retired org-wide (compute-at-read, #4206),
146
+ GitHub defaults new repos to `has_wiki=true`, and `bootstrap apply --execute` / `bootstrap reconcile --apply`
147
+ enforce the same rule as drift checks afterwards.
148
+
138
149
  On an empty repo that PUT creates `$FIRST` **and leaves it the default branch**, so no `gh repo edit
139
150
  --default-branch` is needed here. Skip this step when the repo already exists with the track's default branch.
140
151
 
@@ -48,6 +48,8 @@ Write a JSON array (one object per child) to a scratch path under `tmp/`. Each r
48
48
  create, so you do not need a separate `link-child` pass. Cross-repo is fine (a Hub umbrella can parent
49
49
  product-repo children).
50
50
  - `priority` — `urgent|high|medium|low` (defaults to `medium`); sets the board Priority **field**.
51
+ - `repo` — optional per-row target repo (`owner/repo`); defaults to `--repo`, then the current repo.
52
+ This is how one batch fans children out across repos under a single umbrella.
51
53
  - `surface` — required when the target repo uses `surface:*` taxonomy; accepts the value with or without
52
54
  the prefix. A top-level `--surface <value>` may supply the default for every applicable row.
53
55
 
@@ -31,33 +31,34 @@ it on every move). Closed/finished items auto-archive after they go quiet; archi
31
31
  - Known login → `👋 Welcome back, @<login> — pulling up your board…`
32
32
  - `source: unknown` → generic `👋 Welcome back — pulling up your board…`
33
33
  2. **Keep the board fast: read first, run doctor only when evidence says it can change this render (#2112).**
34
- The normal happy path is identity → board read. Do **not** block the board on `doctor --preflight` just to
34
+ The normal happy path is identity → board read. Do **not** block the board on a doctor run just to
35
35
  check freshness. Run doctor synchronously only after a hard signal that the current setup may be broken:
36
36
  `mmi-cli` is missing, `board read` reports missing auth/project scope, the command surface is absent, or a
37
37
  cached/session-start health line explicitly says a heal is needed.
38
38
 
39
39
  ```bash
40
40
  mmi-cli board read --json # Step 1 — first useful render on the happy path
41
- mmi-cli doctor --preflight # only after a hard setup signal — foreground, one at a time
41
+ mmi-cli doctor --no-repo-writes # only after a hard setup signal — foreground, one at a time
42
42
  ```
43
43
 
44
- Since #3485 `--preflight` **heals**: its heals are `npm install -g` and a marketplace remove add →
45
- install, both machine-global. Since #3489 they are serialised behind a machine-wide lock, so two
46
- concurrent preflights no longer interleave inside the npm prefix or the marketplace clone — the second
47
- waits, and if the first is still installing after two minutes the second reports the heal as skipped
48
- rather than forcing it.
44
+ Since #4199 `--preflight` is **READ-ONLY** (docs/doctor-contract.md § Flag Grammar the canon
45
+ reversal; jerv semantics win estate-wide): it measures and reports with the shared exit code and performs
46
+ zero writes. The heal lane for "fix my env before work" is `doctor --no-repo-writes` — the default heal
47
+ run minus repo working-tree mutation. Its heals are `npm install -g` and a marketplace remove add
48
+ install, both machine-global, serialised behind a machine-wide lock (#3489), so two concurrent runs no
49
+ longer interleave inside the npm prefix or the marketplace clone — the second waits, and if the first is
50
+ still installing after two minutes the second reports the heal as skipped rather than forcing it.
49
51
 
50
- Still run it in the foreground and wait. The lock stops corruption, not confusion: a backgrounded
51
- preflight that reports "skipped — lock busy" has healed nothing, and an agent that does not read that
52
- line will carry on believing its tooling was fixed.
52
+ Still run it in the foreground and wait. The lock stops corruption, not confusion: a backgrounded run
53
+ that reports "skipped — lock busy" has healed nothing, and an agent that does not read that line will
54
+ carry on believing its tooling was fixed.
53
55
 
54
- `doctor --preflight` detects a stale npm global or a stale/unresolved plugin install and runs the **env**
55
- half of the interactive doctor self-heal (#3485/#3975) — it never touches the repo working tree, and
56
- never pays the train-branch sync or the gc sweep. It still belongs off the critical board path unless it
57
- has proof it must heal. When it prints `↻ Updating mmi tooling, one moment…`, relay that before waiting;
58
- when it prints `↻ MMI tooling updated — …`, relay the reload/restart guidance.
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
58
+ `↻ Updating mmi tooling, one moment…`, relay that before waiting; when it prints `↻ MMI tooling
59
+ updated …`, relay the reload/restart guidance.
59
60
 
60
- What it actually heals, and nothing more:
61
+ What the env half heals:
61
62
 
62
63
  - a behind npm global → `npm install -g @mutmutco/cli@<released version>`, pinned, never the floating
63
64
  `@latest`, which npm can resolve off a cached packument and reinstall the stale version right after a
@@ -67,14 +68,12 @@ What it actually heals, and nothing more:
67
68
  reinstall, never `claude plugin update`, which nests into itself past MAX_PATH on Windows and wipes the
68
69
  marketplace clone (#1126). Effective after a reload: **restart Claude Code / run `/reload-plugins`**
69
70
  (native), or **reopen the workspace** (VS Code extension).
70
-
71
- It does **not** dedup `installed_plugins.json` rows and does **not** quarantine cache dirs — that
72
- machinery was deleted in #2741 and `doctor` is doctrine-bound never to write to the harness-owned plugin
73
- cache. Stale cached versions are a detect-only row; the verb that deletes them is `mmi-cli plugin prune
74
- --apply`.
71
+ - superseded plugin cache versions → the guarded auto-prune (#4199, canon per
72
+ docs/doctor-contract.md § Guarded cache prune): never the running/newest/installed version, a cache a
73
+ live session holds is named "still held" and never forced.
75
74
 
76
75
  - **Fast path** → `whoami` then `board read`; no foreground doctor.
77
- - **Hard setup signal** → run `doctor --preflight`, relay `↻` lines, then retry `board read` when appropriate.
76
+ - **Hard setup signal** → run `doctor --no-repo-writes`, relay `↻` lines, then retry `board read` when appropriate.
78
77
  - **`mmi-cli: command not found`** → plugin PATH provisioning has not applied, or the standalone CLI is not installed.
79
78
  In Claude Code, reopen the session; if it persists, install the MMI plugin:
80
79
  `/plugin marketplace add mutmutco/MMI-Hub` → `/plugin install mmi@mutmutco` → `/reload-plugins`.
@@ -117,7 +116,7 @@ cache. Stale cached versions are a detect-only row; the verb that deletes them i
117
116
  missing project/board coords → a master-admin registers or backfills the repo's `PROJECT#<slug>` META.
118
117
  There's no reliable project to read until that is fixed, so stop here.
119
118
 
120
- A broken setup surfaces from `doctor --preflight`, a failed `board read`, or a gate that still fails after
119
+ A broken setup surfaces from `doctor --preflight` (read-only), a failed `board read`, or a gate that still fails after
121
120
  heal — handle it then. A `command not found` from **either** command routes into the recovery paths above.
122
121
  Don't block the all-green path on doctor noise.
123
122
 
@@ -1,9 +1,9 @@
1
1
  ---
2
- name: doctor
2
+ name: mmi-doctor
3
3
  description: One hygiene pass — mmi-cli doctor heals and cleans by default.
4
4
  ---
5
5
 
6
- # /doctor — one hygiene pass
6
+ # /mmi-doctor — one hygiene pass
7
7
 
8
8
  One command. Run it when a session opens messy or before a handoff.
9
9
 
@@ -28,7 +28,7 @@ default doctor — use `mmi-cli secrets diff` when you need a catalog gap check.
28
28
 
29
29
  ## Do not run the old multi-step ritual
30
30
 
31
- Do **not** chain these as a `/doctor` substitute:
31
+ Do **not** chain these as a `/mmi-doctor` substitute:
32
32
 
33
33
  ```bash
34
34
  mmi-cli doctor --self
@@ -42,7 +42,7 @@ that surface alone (e.g. a secrets catalog review, or an interactive `board doct
42
42
 
43
43
  ## Notes
44
44
 
45
- - `/doctor` is the hygiene pass; `/resume` is the lighter read-only session open.
45
+ - `/mmi-doctor` is the hygiene pass; `/resume` is the lighter read-only session open.
46
46
  - Prefer one doctor run over hand-editing board items, gitignore blocks, or marketplace pins.
47
47
 
48
48
  ## Retro — one check before you finish
@@ -52,4 +52,4 @@ about? (Process only — never the user's code or task; e.g. a doctor run that p
52
52
  branch.) If yes, file **one** lesson and move on; a clean run is silent (hard cap: one per run). It
53
53
  lands on the Hub board (deduped) and is fixed only via a reviewed PR — never edit the skill live; the
54
54
  retro is advisory, so if the call fails, note it and continue:
55
- `mmi-cli skill-lesson --skill doctor --title "<what misfired>" --body "<what; evidence; proposed amendment>"`
55
+ `mmi-cli skill-lesson --skill mmi-doctor --title "<what misfired>" --body "<what; evidence; proposed amendment>"`