@mutmutco/claude-plugin 4.5.4 → 4.5.6
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
package/skills/hotfix/SKILL.md
CHANGED
|
@@ -19,7 +19,7 @@ Read META and name the lane before describing or executing anything:
|
|
|
19
19
|
mmi-cli oracle org project get {owner}/{repo} --json
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
A hotfix always skips rc on every track: it cherry-picks `development → main` directly, MMI-Hub included. `deployModel` decides the release-triggered runs the train watches; on `vercel` nothing is dispatched — Vercel builds `main` on the
|
|
22
|
+
A hotfix always skips rc on every track: it cherry-picks `development → main` directly, MMI-Hub included. `deployModel` decides the release-triggered runs the train watches; on `vercel` nothing is dispatched — Vercel builds `main` on the push and the hotfix waits for its Production Deployment and probes the URL, same as `/release --watch`; a leg left pending settles on the next doctor `--heal`. Unreadable META → stop; never infer the lane from branch names, tags or release history.
|
|
23
23
|
|
|
24
24
|
## Preflight
|
|
25
25
|
|
|
@@ -27,7 +27,7 @@ A hotfix always skips rc on every track: it cherry-picks `development → main`
|
|
|
27
27
|
mmi-cli devops train doctor --lane hotfix --heal --json
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
-
Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `warning` · `healed` · `info`), `source` (`local` · `origin`), `remedy` and `anchor`. `ready: false` → stop and quote every blocker's `code` and `remedy`; an unread origin is never green. `hotfix start` and `hotfix release` re-run this doctor as their step 0 with heal on.
|
|
30
|
+
The JSON is on stdout alone; a stale CLI first prints its self-update notice on stderr and re-runs itself, so parse stdout only, never `2>&1`. Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `warning` · `healed` · `info`), `source` (`local` · `origin`), `remedy` and `anchor`. `ready: false` → stop and quote every blocker's `code` and `remedy`; an unread origin is never green. `hotfix start` and `hotfix release` re-run this doctor as their step 0 with heal on.
|
|
31
31
|
|
|
32
32
|
## Apply
|
|
33
33
|
|
|
@@ -76,10 +76,11 @@ development. A trunk repository follows its single branch and declared workflow
|
|
|
76
76
|
then [release](../../release/SKILL.md) for promotion. The release workflow also describes its
|
|
77
77
|
supported development-source route.
|
|
78
78
|
- Direct track: development → main. Use [release](../../release/SKILL.md); do not invent an rc lane.
|
|
79
|
-
- Vercel-hosted repos (registry `deployModel: vercel`)
|
|
80
|
-
is the go-live, Vercel deploys
|
|
81
|
-
the live URL before it
|
|
82
|
-
Vercel preview URL; [stage](../../stage/SKILL.md) reports it.
|
|
79
|
+
- Vercel-hosted repos (registry `deployModel: vercel`) keep their track (direct or full): the push to
|
|
80
|
+
main is the go-live, Vercel deploys each branch itself, and the train waits for that deploy and checks
|
|
81
|
+
the live URL before it announces; on full track rcand does the same for the rc deploy. No version-file
|
|
82
|
+
bump on these repos. Every branch has a Vercel preview URL; [stage](../../stage/SKILL.md) reports it.
|
|
83
|
+
No box stage.
|
|
83
84
|
- Trunk track: one main branch, without an rc/development promotion train. Follow the repository's
|
|
84
85
|
declared publishing workflow rather than manufacturing train branches.
|
|
85
86
|
- Urgent already-merged fixes: use [hotfix](../../hotfix/SKILL.md), which carries selected development
|
package/skills/rcand/SKILL.md
CHANGED
|
@@ -19,7 +19,7 @@ Read META and name the lane before describing or executing anything:
|
|
|
19
19
|
mmi-cli oracle org project get {owner}/{repo} --json
|
|
20
20
|
```
|
|
21
21
|
|
|
22
|
-
`releaseTrack: direct` (product repos with explicit META, plus MMI-Hub
|
|
22
|
+
`releaseTrack: direct` (product repos with explicit META, plus MMI-Hub) has no `rc`: stop here and run `/release` from `development`; `rcand --apply` refuses direct-track at its own preflight. Full-track runs from `development`, and a full-track repo may skip rc entirely with `/release --dev`. A full-track `deployModel: vercel` repo runs rcand as usual; the train dispatches nothing and, with `--watch`, waits for the non-Production Deployment Vercel builds for the rc push, then probes its URL. Unreadable META → stop; never infer the lane from branch names, a stale `rc` ref, or release history.
|
|
23
23
|
|
|
24
24
|
Authority is structural and server-checked: the doctor asks the Hub, and the protected `rc` push allowlist carries the same people (master + that repo's project-admins). Gate ordering: the tag lands the rc SHA for checks, and every deploy side-effect waits until the protected `rc` push accepts that checked SHA.
|
|
25
25
|
|
|
@@ -29,7 +29,7 @@ Authority is structural and server-checked: the doctor asks the Hub, and the pro
|
|
|
29
29
|
mmi-cli devops train doctor --lane rcand --heal --json
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `warning` · `healed` · `info`), `source` (`local` · `origin`), `remedy` and `anchor`. `ready: false` → stop and quote every blocker's `code` and `remedy`; an unread origin is never green. `--apply` re-runs this doctor as its step 0 with heal on.
|
|
32
|
+
The JSON is on stdout alone; a stale CLI first prints its self-update notice on stderr and re-runs itself, so parse stdout only, never `2>&1`. Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `warning` · `healed` · `info`), `source` (`local` · `origin`), `remedy` and `anchor`. `ready: false` → stop and quote every blocker's `code` and `remedy`; an unread origin is never green. `--apply` re-runs this doctor as its step 0 with heal on.
|
|
33
33
|
|
|
34
34
|
## Apply
|
|
35
35
|
|
|
@@ -50,14 +50,14 @@ Read the receipt at `$r`, never the exit code (exit `1` = the deploy failed afte
|
|
|
50
50
|
- `promoted` — `true` even when the deploy failed; promotion and deploy are separate outcomes.
|
|
51
51
|
- `tag` — the minted `vX.Y.0-rc.N`; `resumeNote` says an existing rc tag was resumed rather than minted.
|
|
52
52
|
- `deployStatus` — `pending` is never terminal. `runId` / `runUrl` / `workflowRuns` name the run: the dispatched `tenant-deploy.yml` for tenant-container, the auto-fired `deploy.yml` for serverless. Watch each non-success entry to conclusion: `gh run watch <run-id> --repo {owner}/{repo} --exit-status`.
|
|
53
|
-
- `
|
|
54
|
-
- `checkout`, `localSync`, `ledger` — `returned` and phases-green, or the named reason
|
|
53
|
+
- `releaseVerdict` — `followUpStatus` (`complete` · `pending` · `failed`) and one `legs` row per follow-up; a failed row carries its error.
|
|
54
|
+
- `checkout`, `localSync`, `ledger` — `checkout.status: returned` to `development` and phases-green, or the named reason it is not.
|
|
55
55
|
|
|
56
|
-
Then confirm origin: `git rev-list --count origin/rc..origin/development` is `0` and the rc tag is on origin. There is no GitHub Release at rc; the bounded Latest read belongs to `/release`. A red deploy after a green promotion is a deploy retry of the
|
|
56
|
+
Then confirm origin: `git rev-list --count origin/rc..origin/development` is `0` and the rc tag is on origin. There is no GitHub Release at rc; the bounded Latest read belongs to `/release`. A red deploy after a green promotion is a deploy retry of the same candidate, never a re-tag or re-merge (Recovery).
|
|
57
57
|
|
|
58
58
|
## Recovery
|
|
59
59
|
|
|
60
|
-
Every refusal and every doctor blocker names its `code` and `anchor`: open `docs/Guides/train-troubleshooting.md#<code>` and follow that entry, nothing else. That guide is test-parsed, never free text — the infra drift and plugin-set suites validate every anchor cited here and assert policy from its wording — so an edit to it re-runs the infra suite (`npm --prefix infra test`) in the same PR: a heading or slug change is a code change. A candidate whose immutable rc tag passed policy but whose `origin/rc` was not pushed continues with `mmi-cli devops rcand --resume --watch --json --out <fresh-receipt>` — the only continuation form: `--resume` never re-tags, and `--apply` mints the next `-rc.N` for a new cut only. A refused train is a stop (Merge floor): fix the cause on `development` through a normal PR, then rerun; a rejected protected push leaves the local tag for an authorized rerun, never a force.
|
|
60
|
+
Every refusal and every doctor blocker names its `code` and `anchor`: open `docs/Guides/train-troubleshooting.md#<code>` and follow that entry, nothing else. That guide is test-parsed, never free text — the infra drift and plugin-set suites validate every anchor cited here and assert policy from its wording — so an edit to it re-runs the infra suite (`npm --prefix infra test`) in the same PR: a heading or slug change is a code change. A candidate whose immutable rc tag passed policy but whose `origin/rc` was not pushed continues with `mmi-cli devops rcand --resume --watch --json --out <fresh-receipt>` — the only continuation form: `--resume` never re-tags, and `--apply` mints the next `-rc.N` for a new cut only. A promoted candidate whose rc deploy failed retries it, once the cause is fixed, with `mmi-cli devops rcand --retry-deploy --watch --json --out <fresh-receipt>` — same tag and SHA, never re-cut or re-pushed; `--resume` only re-reads that failed leg. Supersede is the last resort, with the authorized human's fresh approval. A refused train is a stop (Merge floor): fix the cause on `development` through a normal PR, then rerun; a rejected protected push leaves the local tag for an authorized rerun, never a force.
|
|
61
61
|
|
|
62
62
|
## Merge floor
|
|
63
63
|
|
package/skills/release/SKILL.md
CHANGED
|
@@ -21,7 +21,7 @@ mmi-cli oracle org project get {owner}/{repo} --json
|
|
|
21
21
|
|
|
22
22
|
`releaseTrack: direct` → `development → main`, no `/rcand`. Absent → full (`rc → main`), except MMI-Hub, which is direct by the Hub-control special case. Full-track `--dev` ships `development → main` skipping rc and fails closed when `origin/rc` carries content not in `development`. Unreadable META → stop; never infer the lane from branch names, tags or release history.
|
|
23
23
|
|
|
24
|
-
`deployModel: vercel` (
|
|
24
|
+
`deployModel: vercel` (on either track): the push to `main` is the go-live — Vercel builds `main` itself. The train dispatches nothing; with `--watch` it waits for the **Production** GitHub Deployment the Vercel GitHub app posts for the release SHA, probes the served URL once, and announces once it is green. Unwatched or timed out, the deploy leg stays `pending` and settles on `release --resume` or the next doctor `--heal`, which re-read the Deployment. No version-file bump on a vercel repo — the tag is the version. The receipt's `workflowRuns` carries a `vercel` row with the Vercel log URL; `pending` with "is the Vercel GitHub app connected?" means no Deployment was ever posted — connect the app, never re-tag.
|
|
25
25
|
|
|
26
26
|
## Preflight
|
|
27
27
|
|
|
@@ -29,7 +29,7 @@ mmi-cli oracle org project get {owner}/{repo} --json
|
|
|
29
29
|
mmi-cli devops train doctor --lane release --heal --json
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `warning` · `healed` · `info`), `source` (`local` · `origin`), `remedy` and `anchor`. `ready: false` → stop and quote every blocker's `code` and `remedy`; an unread origin is never green. `--apply` re-runs this doctor as its step 0 with heal on.
|
|
32
|
+
The JSON is on stdout alone; a stale CLI first prints its self-update notice on stderr and re-runs itself, so parse stdout only, never `2>&1`. Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `warning` · `healed` · `info`), `source` (`local` · `origin`), `remedy` and `anchor`. `ready: false` → stop and quote every blocker's `code` and `remedy`; an unread origin is never green. `--apply` re-runs this doctor as its step 0 with heal on.
|
|
33
33
|
|
|
34
34
|
## Apply
|
|
35
35
|
|