@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.
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "mmi",
3
3
  "displayName": "MMI",
4
- "version": "4.5.4",
4
+ "version": "4.5.6",
5
5
  "mmiCompat": "4.x",
6
6
  "description": "MMI workflow skills and org gates delivery.",
7
7
  "author": {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/claude-plugin",
3
- "version": "4.5.4",
3
+ "version": "4.5.6",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -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 merge and the train reads its Production Deployment, same as `/release`. Unreadable META → stop; never infer the lane from branch names, tags or release history.
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`) are direct track: merging development → main
80
- is the go-live, Vercel deploys main itself, and the release train waits for that deploy and checks
81
- the live URL before it tags and announces. No version-file bump on these repos. Every branch has a
82
- Vercel preview URL; [stage](../../stage/SKILL.md) reports it. No rc, no box stage.
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
@@ -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, and every `deployModel: vercel` repo) 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`. Unreadable META → stop; never infer the lane from branch names, a stale `rc` ref, or release history.
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
- - `environments` — the rc edge domain(s) from META, the env URL the report names.
54
- - `checkout`, `localSync`, `ledger` — `returned` and phases-green, or the named reason you are still on `rc`.
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 existing rc ref, never a re-tag or re-merge.
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
 
@@ -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` (always with `releaseTrack: direct`): the same `development → main` merge is the go-live — Vercel builds `main` on the push. 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, then tags, publishes the Release and announces. 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.
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