@mutmutco/kilo-plugin 3.107.5 → 3.109.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/agent/reviewer.md CHANGED
@@ -45,7 +45,7 @@ file and the task the caller handed you.
45
45
 
46
46
  ## What to review
47
47
 
48
- Resolve the change first. If the caller handed you a bundle (a `mmi-cli pr review` JSON payload, or an
48
+ Resolve the change first. If the caller handed you a bundle (a `mmi-cli devops pr review` JSON payload, or an
49
49
  explicit diff), review exactly that. Otherwise derive it from the checkout — the PR diff, or
50
50
  `git diff <base>...HEAD` against the base the caller names (default `origin/development`). Read the changed
51
51
  files in full where the diff alone is ambiguous; trace callers and downstream effects rather than
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/kilo-plugin",
3
- "version": "3.107.5",
3
+ "version": "3.109.0",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -11,10 +11,10 @@
11
11
 
12
12
  /** The exhaustive covered-write set: a raw `gh <object> <verb>` that `mmi-cli` already owns. */
13
13
  export const COVERED_GH_WRITES = [
14
- { object: 'issue', verb: 'create', replacement: 'mmi-cli issue create' },
15
- { object: 'issue', verb: 'comment', replacement: 'mmi-cli issue comment' },
16
- { object: 'pr', verb: 'create', replacement: 'mmi-cli pr create' },
17
- { object: 'pr', verb: 'merge', replacement: 'mmi-cli pr merge (or mmi-cli pr land)' },
14
+ { object: 'issue', verb: 'create', replacement: 'mmi-cli oracle issue create' },
15
+ { object: 'issue', verb: 'comment', replacement: 'mmi-cli oracle issue comment' },
16
+ { object: 'pr', verb: 'create', replacement: 'mmi-cli devops pr create' },
17
+ { object: 'pr', verb: 'merge', replacement: 'mmi-cli devops pr merge (or mmi-cli devops pr land)' },
18
18
  ];
19
19
 
20
20
  /** Remove quoted spans so a covered phrase inside a `--body "..."` literal does not trip the gate. */
@@ -10,7 +10,7 @@ import { applyPatchWriteTargets, invokesApplyPatch } from './edit-tool-paths.mjs
10
10
 
11
11
  const DENY_REASON =
12
12
  'No .env — the org is env-free. This command creates a .env file; don\'t. Deliver config vault-native '
13
- + '(`mmi-cli stage` injects secrets into the process env; `mmi-cli secrets` manages names). If something '
13
+ + '(`mmi-cli stage` injects secrets into the process env; `mmi-cli vault secrets` manages names). If something '
14
14
  + 'genuinely cannot proceed without a .env, STOP and consult the board (file an issue) — do not create it.';
15
15
 
16
16
  /** True for a token that names a REAL .env file (`.env` or `.env.<suffix>`), excluding the allowed template
@@ -94,7 +94,7 @@ function expectedProtectionReason(original, input, analyzer, semanticClass) {
94
94
  const recovery = located.semanticClass === 'environment enumeration'
95
95
  ? 'Query only the required variables by explicit non-secret name, in a separate tool call.'
96
96
  : located.semanticClass === 'secret-value output'
97
- ? 'Use a verifier or consumer that returns status without values; when its contract requires vault injection, invoke it through `mmi-cli secrets use`.'
97
+ ? 'Use a verifier or consumer that returns status without values; when its contract requires vault injection, invoke it through `mmi-cli vault secrets use`.'
98
98
  : 'Use the vault-native route named above, and run any safe sibling diagnostics as separate tool calls.';
99
99
  return `${original} Entire compound tool call was cancelled before execution; safe sibling diagnostics did not run. `
100
100
  + `This is an expected safety refusal, not a tool defect. Rejected segment ${located.ordinal}: `
@@ -31,7 +31,7 @@ export function analyze(input) {
31
31
  reason:
32
32
  'No .env — the org is env-free. Never create, edit, or write a .env file (not even a local or '
33
33
  + 'gitignored one). Deliver config vault-native: `mmi-cli stage` injects the declared secrets into the '
34
- + 'compose process env (no file), and `mmi-cli secrets` manages the names. If something genuinely cannot '
34
+ + 'compose process env (no file), and `mmi-cli vault secrets` manages the names. If something genuinely cannot '
35
35
  + 'proceed without a .env, STOP and consult the board (file an issue) — do not create the file.',
36
36
  };
37
37
  }
@@ -79,7 +79,10 @@ side) and regenerated by the bump/fold step. Source TS under `src/` / `cli/src/`
79
79
 
80
80
  Before cutting the hotfix branch, `hotfix start` preflights every `--from` pick on an accumulating
81
81
  `origin/main` tree (#4472). If any pick would hard-stop, it refuses with every failing pick and path and
82
- prescribes **one** main-clean synthesis development PR for the whole batch (pattern #4467) not N
82
+ prescribes **one** development-based cite-only synthesis PR for the whole batch (#4643; the old
83
+ "cut from origin/main" pattern #4467 wording is retired — a main-parented branch must never merge
84
+ into development, #4365/#4371): cut from `origin/development`, regenerate the conflicting content so
85
+ it cherry-picks cleanly onto `origin/main`, land it with the cite-only marker (the #5096 flow) — not N
83
86
  serial ports. Behavior changes still land on `development` first through a normal PR, then rerun hotfix
84
87
  start from the port merge SHA(s) — never hand-resolve onto main.
85
88
 
@@ -303,7 +303,7 @@ something else* paths.)
303
303
  ```
304
304
  It lands on the board as Todo automatically — confirm the link from the JSON. (Templates differ per
305
305
  repo; read the actual `.yml` set rather than assuming bug/feature/task.)
306
- - **File a friction report (org-tooling pain):** `mmi-cli report --title "<one-line>" --body "<what hurt>"`
306
+ - **File a friction report (org-tooling pain):** `mmi-cli learning report --title "<one-line>" --body "<what hurt>"`
307
307
  files it on the Hub board via your Hub session and dedups against the open reports (a confident
308
308
  duplicate becomes a +1 comment, not a new issue). The actual GitHub write runs server-side with the
309
309
  Hub App's own token (#263), so no MMI-Hub repo access is required to file. Never read Hub coordinates or
@@ -97,9 +97,11 @@ exists — a tag minted before the conflict resolution points at the wrong SHA.
97
97
 
98
98
  ## Step 3 — tag the rc
99
99
 
100
- The shared helper derives the next rc tag from existing tags (re-run-safe — `-rc.N` increments):
100
+ The shared helper derives the next rc tag from existing tags (re-run-safe — `-rc.N` increments). `rc` mode
101
+ requires `MMI_BUMP_INTENT` (PATCH is `/hotfix`-only, so a planned release is `minor` or `major`; the train
102
+ refuses without it):
101
103
  ```bash
102
- TAG=$(node scripts/next-version.mjs rc) # -> vX.Y.0-rc.N
104
+ TAG=$(MMI_BUMP_INTENT=minor node scripts/next-version.mjs rc) # -> vX.Y.0-rc.N
103
105
  git tag "$TAG"
104
106
  ```
105
107
 
@@ -187,6 +189,13 @@ Version `vX.Y.0-rc.N` · merged commits · rc deploy run + env URL.
187
189
  - **MAJOR / exact-target cycle:** for a release the tag math can't derive (a MAJOR like `2.0.0`, or skipping
188
190
  a version already on npm), export `MMI_RELEASE_VERSION=X.Y.Z` before `/rcand` — `next-version.mjs rc` then
189
191
  opens that exact cycle (validated to move strictly forward). Keep it exported through `/release`.
192
+ - **`MMI_BUMP_INTENT=major|minor|patch` is required for `next-version.mjs rc`** (Step 3) — it selects the
193
+ increment for an ordinary release and is never inferred; absence is a hard refusal, not a default.
194
+ **Export it for the whole run:** `mmi-cli devops rcand --apply` resolves the intent itself and refuses
195
+ mid-train with the same message, so passing it only as a one-off prefix on the `next-version.mjs` command
196
+ leaves the apply to fail after the preflight has already passed. This is
197
+ a different knob from `MMI_RELEASE_VERSION` above: `MMI_BUMP_INTENT` picks the increment,
198
+ `MMI_RELEASE_VERSION` overrides the computed version entirely and is for the exceptional case only.
190
199
 
191
200
  ## Retro — one check before you finish
192
201
  Before your final report, answer one question honestly: did **this skill's own instructions** misfire
@@ -271,10 +271,11 @@ Nothing to do by hand; the `--apply` result reports the fold outcome (`versionFo
271
271
  ## Step 2 — tag the release
272
272
 
273
273
  Full-track repos drop the `-rc.N` suffix from the open cycle. Direct-track repos use the next cycle directly
274
- because they have no rc tag:
274
+ because they have no rc tag — and `cycle` mode requires `MMI_BUMP_INTENT` (PATCH is `/hotfix`-only, so a
275
+ planned release is `minor` or `major`; the train refuses without it):
275
276
  ```bash
276
- TAG=$(node scripts/next-version.mjs release) # full-track repos -> vX.Y.0
277
- TAG=$(node scripts/next-version.mjs cycle) # direct-track repos -> vX.Y.0
277
+ TAG=$(node scripts/next-version.mjs release) # full-track repos -> vX.Y.0
278
+ TAG=$(MMI_BUMP_INTENT=minor node scripts/next-version.mjs cycle) # direct-track repos -> vX.Y.0
278
279
  git tag "$TAG"
279
280
  ```
280
281
 
@@ -386,8 +387,9 @@ consumers, or treat a product's deploy state as part of this release — those b
386
387
  `/release` or `/rcand`, never a Hub train.
387
388
 
388
389
  Before running `--apply` for MMI-Hub, resolve the real tag first:
389
- `TAG=$(node scripts/next-version.mjs cycle)` — always print `$TAG` (e.g. `v2.43.0`) in summaries, Slack,
390
- chat, and the final report; never a placeholder like `vX.Y.0` or `v0.x.0`.
390
+ `TAG=$(MMI_BUMP_INTENT=minor node scripts/next-version.mjs cycle)` — always print `$TAG` (e.g.
391
+ `v2.43.0`) in summaries, Slack, chat, and the final report; never a placeholder like `vX.Y.0` or
392
+ `v0.x.0`.
391
393
 
392
394
  Write a curated summary — 3-6 very short plain lines, one change per line, dev-readable, no PR-dump —
393
395
  to a fresh temp file (`f=$(mktemp tmp/release-summary.XXXXXX)`, so a stale prior summary is never reused).
@@ -529,6 +531,15 @@ deploy run + URL + **green/red** · branch-alignment note · npm publish run + C
529
531
 
530
532
  - PATCH-level releases are `/hotfix` only (a hotfix always skips rc — it cherry-picks `development → main`
531
533
  directly); planned releases are MINOR or MAJOR. Never force-push `main`.
534
+ - **`MMI_BUMP_INTENT=major|minor|patch` is required for direct-track's `next-version.mjs cycle`** (Step 2)
535
+ — it selects the increment for an ordinary release and is never inferred; absence is a hard refusal
536
+ (`MMI_BUMP_INTENT must be one of major|minor|patch`), not a default. **Export it for the whole run, not
537
+ just the tag line:** `mmi-cli devops release --apply` resolves the intent itself and refuses mid-train
538
+ with the same message, so a value passed only as a one-off prefix on the `next-version.mjs` command
539
+ leaves the apply to fail after the preflight has already passed. The same holds for
540
+ `mmi-cli devops rcand --apply`. This is a different knob from
541
+ `MMI_RELEASE_VERSION` below: `MMI_BUMP_INTENT` picks the increment, `MMI_RELEASE_VERSION` overrides the
542
+ computed version entirely and is for the exceptional case only.
532
543
  - **`--dev` (full-track only):** releases `development → main` skipping rc, with the same fold/tag/Release/
533
544
  deploy machinery plus the post-release rc retirement and rc alignment. Refuses (fail closed) when
534
545
  `origin/rc` carries commits not in `development`; on direct-track repos it's a no-op (they already