@mutmutco/codex-plugin 4.3.52 → 4.3.53
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
|
@@ -36,7 +36,7 @@ Run from the primary checkout. One cycle carries as many merged fixes as you nam
|
|
|
36
36
|
1. Start from the merged development fix(es):
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
r1=$(mktemp tmp/hotfix-start.XXXXXX)
|
|
39
|
+
mkdir -p .jerv/tmp && r1=$(mktemp .jerv/tmp/hotfix-start.XXXXXX)
|
|
40
40
|
mmi-cli devops hotfix start --from <pr|sha>[,<pr|sha>…] --json --out "$r1"
|
|
41
41
|
```
|
|
42
42
|
|
|
@@ -53,7 +53,7 @@ Because Hub's default branch is `development`, the main-base PR closes no tracki
|
|
|
53
53
|
3. Release, naming every fix the cycle carries (each is proven an ancestor of the tagged SHA before tagging):
|
|
54
54
|
|
|
55
55
|
```bash
|
|
56
|
-
r2=$(mktemp tmp/hotfix-release.XXXXXX)
|
|
56
|
+
mkdir -p .jerv/tmp && r2=$(mktemp .jerv/tmp/hotfix-release.XXXXXX)
|
|
57
57
|
mmi-cli devops hotfix status --json
|
|
58
58
|
mmi-cli devops hotfix release vX.Y.Z --carries <pr|sha>[,<pr|sha>…] --json --out "$r2"
|
|
59
59
|
```
|
package/skills/rcand/SKILL.md
CHANGED
|
@@ -36,7 +36,7 @@ Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `
|
|
|
36
36
|
Run from the primary checkout on `development`. Export the bump intent once from the bare argument — `MMI_BUMP_INTENT=minor|major|patch`, unset → `patch` — and keep it exported through the following `/release`; `MMI_RELEASE_VERSION=X.Y.Z` opens an exact cycle for both `/rcand` and `/release` only when the tag math cannot derive it.
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
r=$(mktemp tmp/rcand-receipt.XXXXXX)
|
|
39
|
+
mkdir -p .jerv/tmp && r=$(mktemp .jerv/tmp/rcand-receipt.XXXXXX)
|
|
40
40
|
mmi-cli devops rcand --apply --json --out "$r"
|
|
41
41
|
```
|
|
42
42
|
|
package/skills/release/SKILL.md
CHANGED
|
@@ -33,21 +33,40 @@ Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `
|
|
|
33
33
|
|
|
34
34
|
Run from the primary checkout on the lane's start branch (`rc`; `development` for direct-track and `--dev`). Export the bump intent once from the bare argument — `MMI_BUMP_INTENT=minor|major|patch`, unset → `patch`; `MMI_RELEASE_VERSION=X.Y.Z` only for an exact target the tag math cannot derive.
|
|
35
35
|
|
|
36
|
-
Two cases need a summary file. (1) **MMI-Hub** — always: write a fresh 3–6 line neutral summary to `f=$(mktemp tmp/release-summary.XXXXXX)` — sourced from Hub PR titles only (`origin/main..origin/development`), rewritten in Hub-subsystem terms, never a product or brand name. Hub scope is only `mutmutco/MMI-Hub`: never a product's board, `ds-propagate.yml`, or a product's deploy state. (2) **Any product repo whose META carries `releaseChannel`** (`mmi-cli oracle org project get {owner}/{repo} --json`) — required too: read `releaseLanguage` (default `en`) and write 3–6 lines IN THAT LANGUAGE, in plain words for the project's audience: what changed and why it matters to a user; no commit prefixes, no issue or PR numbers, no file names, no product-internal jargon. The train refuses `--apply` without the file, and raw release notes are never posted to a project channel. A repo with no `releaseChannel` announces nothing and needs no file.
|
|
36
|
+
Two cases need a summary file. (1) **MMI-Hub** — always: write a fresh 3–6 line neutral summary to `f=$(mkdir -p .jerv/tmp && mktemp .jerv/tmp/release-summary.XXXXXX)` — sourced from Hub PR titles only (`origin/main..origin/development`), rewritten in Hub-subsystem terms, never a product or brand name. Hub scope is only `mutmutco/MMI-Hub`: never a product's board, `ds-propagate.yml`, or a product's deploy state. (2) **Any product repo whose META carries `releaseChannel`** (`mmi-cli oracle org project get {owner}/{repo} --json`) — required too: read `releaseLanguage` (default `en`) and write 3–6 lines IN THAT LANGUAGE, in plain words for the project's audience: what changed and why it matters to a user; no commit prefixes, no issue or PR numbers, no file names, no product-internal jargon. The train refuses `--apply` without the file, and raw release notes are never posted to a project channel. A repo with no `releaseChannel` announces nothing and needs no file.
|
|
37
37
|
|
|
38
38
|
```bash
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
mmi-cli devops release --apply --announce-summary-file "$f" --json --out "$r" # MMI-Hub
|
|
39
|
+
mkdir -p .jerv/tmp
|
|
40
|
+
mktemp .jerv/tmp/release-receipt.XXXXXX
|
|
42
41
|
```
|
|
43
42
|
|
|
44
|
-
|
|
43
|
+
Scratch lives under `.jerv/tmp` in every repo: a repo-root `tmp/` may not exist at all, and an agent host guards the primary checkout against root writes outside `.jerv/tmp` — either one aborts the release before its first command runs.
|
|
44
|
+
|
|
45
|
+
Copy the returned pathname into `<result-path>` below; do not rely on shell variables surviving another tool call. For a product without a release channel:
|
|
46
|
+
|
|
47
|
+
```bash
|
|
48
|
+
mmi-cli devops release --apply --watch --json --out "<result-path>"
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
For MMI-Hub or a product with a release channel, also substitute the saved summary pathname:
|
|
52
|
+
|
|
53
|
+
```bash
|
|
54
|
+
mmi-cli devops release --apply --watch --announce-summary-file "<summary-path>" --json --out "<result-path>"
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
Add `--dev` for a full-track dev → main release. Keep `--watch` to block on the deploy/publish runs. `mmi-cli devops release --apply --ack <sha>[,<sha>…]` only when the authorized human has verified that a main-only commit the hotfix-coverage guard refused is already in the candidate — never ack to save time. The one command merges, runs the version fold (automatic, inside `mmi-cli devops release --apply`) that bumps the manifests unconditionally before the tag, pushes the tag first (`gate.yml` runs on `v*` tags, so the fold commit earns its required checks), waits for the required contexts, pushes `main`, publishes the Release, dispatches or correlates the deploy (`tenant-deploy.yml` only for tenant-container), announces (the org alerts channel for the Hub; the project's own release channel for a product repo), re-syncs project info, and rolls `development` and `rc` forward. Nothing here is done by hand.
|
|
58
|
+
|
|
59
|
+
**Progress narration.**
|
|
60
|
+
|
|
61
|
+
Describe the release in plain words before each command: “Preparing release”, “Waiting for checks”, “Waiting for publishing”, or “Finishing the existing release”. Keep temporary-file preparation separate from the long-running release command so its tool title cannot become a temporary filename; carry the returned path explicitly into the release command when tool calls do not share shell variables. Keep stderr visible: the CLI prints `Release: ` stages and elapsed updates every 30 seconds during long operations, while JSON and `--out` remain the verification record. Never redirect both streams into the result file.
|
|
62
|
+
|
|
63
|
+
Use the actual current stage, never a guessed sequence. Explain a pending result as “Publishing is still pending” or name the unfinished step, then narrate the sanctioned resume command as “Checking the remaining release steps”. Say “Release complete” only after the status fields prove every required follow-up complete. Temporary filenames, `XXXXXX`, receipts, and ledger folding are internal bookkeeping, never a user-facing status.
|
|
45
64
|
|
|
46
65
|
## Verify
|
|
47
66
|
|
|
48
|
-
Read the
|
|
67
|
+
Read the saved result, never the exit code (exit `1` = a follow-up failed after promotion; a pending follow-up exits `0`, so a clean exit alone never means every leg resolved):
|
|
49
68
|
|
|
50
|
-
- `releaseVerdict.releaseStatus` + `followUpStatus` — `succeeded` + `pending` is shipped with the follow-up unresolved: neither failed nor done.
|
|
69
|
+
- `releaseVerdict.releaseStatus` + `followUpStatus` — `succeeded` + `pending` is shipped with the follow-up unresolved: neither failed nor done. A `--resume` receipt carries the same `releaseVerdict` (`command: release-resume`), plus its own `mode` and `state`.
|
|
51
70
|
- `deployStatus` — `pending` is never terminal; `promoted: true` holds even when a deploy failed.
|
|
52
71
|
- `workflowRuns` — every run on the release SHA (deploy-model runs, any `push: main` deploy, the repo's own `gate`). Watch each non-success entry to conclusion: `gh run watch <run-id> --repo {owner}/{repo} --exit-status`. Name which run is red: `deploy.yml` / `publish.yml` / `tenant-deploy.yml` / `jerv-gateway` is a deploy or publish verdict; a `gate` push run is ordinary CI sharing the SHA.
|
|
53
72
|
- With `--watch` the train waits for its own alignment PR to land (true merge) and folds the ledger in the same run, so the receipt ends `succeeded` / `complete`. An external `gh run watch` never folds anything: if the receipt still shows a `pending` leg (no `--watch`, the alignment PR outlived the bounded wait, or a release-event `publish.yml` run on a registry-publish repo had not been correlated by the time the receipt was written — `--watch` waits for the alignment PR, not for that run, so a `publish` leg `pending` with no run URL after `--watch` is the expected direct-track shape, not a failure), fold it live before declaring the cut done or starting any new train: `mmi-cli devops release --resume --watch --json --out <fresh-receipt>`; the NEXT train's doctor otherwise refuses with `ledger-pending`.
|