@mutmutco/kilo-plugin 3.107.4 → 3.108.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 +1 -1
- package/package.json +1 -1
- package/scripts/command-ladder-core.mjs +4 -4
- package/scripts/env-write-lint.mjs +1 -1
- package/scripts/pretooluse-shell-gates.mjs +1 -1
- package/scripts/vault-edit-gate.mjs +1 -1
- package/skills/hotfix/SKILL.md +4 -1
- package/skills/mmi/SKILL.md +1 -1
- package/skills/rcand/SKILL.md +11 -2
- package/skills/release/SKILL.md +16 -5
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
|
@@ -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
|
}
|
package/skills/hotfix/SKILL.md
CHANGED
|
@@ -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**
|
|
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
|
|
package/skills/mmi/SKILL.md
CHANGED
|
@@ -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
|
package/skills/rcand/SKILL.md
CHANGED
|
@@ -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
|
package/skills/release/SKILL.md
CHANGED
|
@@ -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)
|
|
277
|
-
TAG=$(node scripts/next-version.mjs cycle)
|
|
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.
|
|
390
|
-
chat, and the final report; never a placeholder like `vX.Y.0` or
|
|
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
|