@mutmutco/kilo-plugin 3.82.0 → 3.83.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
|
@@ -128,6 +128,8 @@ for `rc`/`main` (#3433). `$FIRST` is the track's first branch: `development` for
|
|
|
128
128
|
FIRST=development # full / direct
|
|
129
129
|
FIRST=main # trunk (content)
|
|
130
130
|
|
|
131
|
+
# One-time namespace + first-ref creation uses the authenticated master-admin GitHub session. The current
|
|
132
|
+
# mmi-cli has no App-backed command for a repository that does not exist; this is the named exception.
|
|
131
133
|
gh repo create "$OWNER/$REPO" --private
|
|
132
134
|
gh api -X PUT "repos/$OWNER/$REPO/contents/.gitkeep" \
|
|
133
135
|
-f message="chore: initial commit" -f content="Cg==" -f branch="$FIRST"
|
|
@@ -136,6 +138,11 @@ gh api -X PUT "repos/$OWNER/$REPO/contents/.gitkeep" \
|
|
|
136
138
|
On an empty repo that PUT creates `$FIRST` **and leaves it the default branch**, so no `gh repo edit
|
|
137
139
|
--default-branch` is needed here. Skip this step when the repo already exists with the track's default branch.
|
|
138
140
|
|
|
141
|
+
The two `gh` writes above are authorized by the authenticated master-admin login and are the one-time
|
|
142
|
+
bootstrap exception while no App-backed `mmi-cli` command owns a repository that does not yet exist. They
|
|
143
|
+
are not a general write lane: after the namespace and first ref exist, use the App-backed
|
|
144
|
+
`mmi-cli bootstrap apply --execute` path for managed seeds, labels, rulesets, and registry state.
|
|
145
|
+
|
|
139
146
|
For a **content** repo the API form is not merely tidier, it is the only thing that works: `main` is that
|
|
140
147
|
track's first and only branch, so the initial commit IS a push to `main` and the #1660 guard fences it — and
|
|
141
148
|
the deny's own advice ("land through a CI-gated PR to development") is meaningless on a repo with no commits,
|
package/skills/epic/SKILL.md
CHANGED
|
@@ -9,6 +9,14 @@ Turn one large item — a vision issue, an epic, an umbrella issue — into a se
|
|
|
9
9
|
single pre-validated batch, each already linked to its parent. This is the slice-and-fan-out act done by
|
|
10
10
|
hand today: draft the children, validate them all, create them, confirm the tree.
|
|
11
11
|
|
|
12
|
+
## Opening branch — create a new umbrella when none exists
|
|
13
|
+
|
|
14
|
+
When the request is a product intent rather than an existing issue, gather the intent first, read the
|
|
15
|
+
repo's live issue templates, draft the umbrella from the matching feature/task template, and show that
|
|
16
|
+
draft for the user's go. Only then create one issue with the `epic` label and an explicit Priority field;
|
|
17
|
+
re-read it from the board to prove the body, label, and priority landed. Stop there unless the user also
|
|
18
|
+
asked for and approved child decomposition.
|
|
19
|
+
|
|
12
20
|
## Step 0 — load the umbrella whole
|
|
13
21
|
|
|
14
22
|
Read the parent end-to-end before slicing — body **and every comment**, treating later comments as
|
|
@@ -28,7 +36,7 @@ Write a JSON array (one object per child) to a scratch path under `tmp/`. Each r
|
|
|
28
36
|
```json
|
|
29
37
|
[
|
|
30
38
|
{ "type": "task", "title": "C1: extract the shared frame", "body": "…", "priority": "high",
|
|
31
|
-
"parent": "owner/repo#42" },
|
|
39
|
+
"surface": "cli", "parent": "owner/repo#42" },
|
|
32
40
|
{ "type": "feature", "title": "C2: wire the new command", "body": "…", "priority": "medium",
|
|
33
41
|
"parent": "owner/repo#42" }
|
|
34
42
|
]
|
|
@@ -40,6 +48,8 @@ Write a JSON array (one object per child) to a scratch path under `tmp/`. Each r
|
|
|
40
48
|
create, so you do not need a separate `link-child` pass. Cross-repo is fine (a Hub umbrella can parent
|
|
41
49
|
product-repo children).
|
|
42
50
|
- `priority` — `urgent|high|medium|low` (defaults to `medium`); sets the board Priority **field**.
|
|
51
|
+
- `surface` — required when the target repo uses `surface:*` taxonomy; accepts the value with or without
|
|
52
|
+
the prefix. A top-level `--surface <value>` may supply the default for every applicable row.
|
|
43
53
|
|
|
44
54
|
The batch **pre-validates every row before creating any** — one bad row fails the whole set with an
|
|
45
55
|
aggregate error, so you fix all of them once. Get the user's go on the drafted set before writing.
|
|
@@ -47,13 +57,18 @@ aggregate error, so you fix all of them once. Get the user's go on the drafted s
|
|
|
47
57
|
## Step 2 — create the children
|
|
48
58
|
|
|
49
59
|
```bash
|
|
50
|
-
mmi-cli issue create --type task --batch tmp/epic-children.json
|
|
60
|
+
mmi-cli issue create --type task --batch tmp/epic-children.json --surface cli
|
|
51
61
|
```
|
|
52
62
|
|
|
53
63
|
`--type` is required by the create command but each row's own `type` governs; pass any valid type as the
|
|
54
64
|
placeholder. It prints per-row `{number,url}` results and fails loud on any misfire. Add
|
|
55
65
|
`--idempotency-key <key>` when a retried loop must not duplicate.
|
|
56
66
|
|
|
67
|
+
The idempotency lookup is find-before-create, not an atomic reservation. Run one batch writer at a time:
|
|
68
|
+
never submit concurrent creates with the same key. Size the calling command's wall-clock budget for the
|
|
69
|
+
whole sequential batch. If the command times out, its outcome is unknown — confirm the process has ended,
|
|
70
|
+
wait for writes to quiesce, inspect the children, then retry the missing rows with the same key.
|
|
71
|
+
|
|
57
72
|
## Step 3 — confirm the tree
|
|
58
73
|
|
|
59
74
|
```bash
|
package/skills/release/SKILL.md
CHANGED
|
@@ -139,7 +139,10 @@ Verify META + required SSM secret names before touching `main`:
|
|
|
139
139
|
mmi-cli org project get {owner}/{repo}
|
|
140
140
|
mmi-cli secrets preflight --stage main --repo {owner}/{repo}
|
|
141
141
|
```
|
|
142
|
-
|
|
142
|
+
An enumerated missing META row or missing secret name → stop and repair the registry/secrets first. An
|
|
143
|
+
HTTP 5xx, timeout, DNS, socket, or other transport failure is **unverified**, not evidence that a name is
|
|
144
|
+
missing: retry the read/preflight and repair connectivity if it persists. Never provision or rename a
|
|
145
|
+
secret from a transport-error response.
|
|
143
146
|
|
|
144
147
|
## Step 0c — hotfix-coverage guard (fail closed, #839, #958)
|
|
145
148
|
|
package/skills/resume/SKILL.md
CHANGED
|
@@ -35,14 +35,16 @@ mmi-cli status
|
|
|
35
35
|
|
|
36
36
|
`status` is the unified current-state read for **this** checkout: branch, linked worktrees, your open PRs,
|
|
37
37
|
your claimed board items, and whether a local stage is running. It is the "where am I" line — render it,
|
|
38
|
-
don't re-derive it from raw `git`/`gh`.
|
|
38
|
+
don't re-derive it from raw `git`/`gh`. Keep the case-preserving `repo` value it reports; that is the
|
|
39
|
+
workspace identity the next step must use (for example `mutmutco/MMC-ZuberShade`).
|
|
39
40
|
|
|
40
41
|
## Step 2 — the next move
|
|
41
42
|
|
|
42
43
|
```bash
|
|
43
|
-
mmi-cli next
|
|
44
|
+
mmi-cli next --repo <repo reported by status>
|
|
44
45
|
```
|
|
45
46
|
|
|
47
|
+
Pass the repository from `status` explicitly; never reconstruct it by changing case or punctuation.
|
|
46
48
|
`next` recommends the single most actionable claimable board item (unblocked, priority-ranked) and prints
|
|
47
49
|
the exact `mmi-cli board claim <n>` to take it. Offer it; do not claim on the user's behalf without a go.
|
|
48
50
|
For the full board partition (yours / claimable / taken) run `/mmi`.
|