@mutmutco/codex-plugin 4.5.2 → 4.5.4
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
|
@@ -98,7 +98,8 @@ that actually ships in the cut: the train refuses an issue or PR number the rele
|
|
|
98
98
|
commit, so build and verify the lines from one pass over that range —
|
|
99
99
|
`git log --stat --format='%h %s%n%b' origin/main..origin/development`, which carries each commit's
|
|
100
100
|
subject, body and changed files — never from subjects, PR titles or memory; a line whose claim is not
|
|
101
|
-
in that output does not go in the file.
|
|
101
|
+
in that output does not go in the file. A Hub summary never mentions a Jerv-side project; the train
|
|
102
|
+
refuses such a line.
|
|
102
103
|
|
|
103
104
|
Announcement delivery uses the developer's GitHub-authenticated Hub session. The Hub checks project
|
|
104
105
|
authority, resolves the registered channel, and reads the MMI Future Slack key inside its vault boundary.
|
|
@@ -117,7 +118,9 @@ AWS is the org control plane and the vaults only; Hetzner boxes run every long-r
|
|
|
117
118
|
links (`vercel`); Cloudflare owns all DNS, TLS and tunnels; one-line installers are served
|
|
118
119
|
from the product family's own box — `get.mutmut.work/<product>` for MMI and MM products, `get.jerv.ai/<product>`
|
|
119
120
|
for Jerv products — never mixed. Whether a repo ships one, its family and its sign-in are registry
|
|
120
|
-
facts (META `installer`, `docs/decisions/2026-09-23-installer-platform.md`).
|
|
121
|
+
facts (META `installer`, `docs/decisions/2026-09-23-installer-platform.md`). MMI-Hub serves the
|
|
122
|
+
shared installer and face; it follows no repo. Each repo's own release refreshes its installer lock
|
|
123
|
+
and proves its own channel. `hub-serverless` is the Hub control plane itself, and `registry-publish`/`none` are not
|
|
121
124
|
hosted services. Sign-in gates and signed payloads stay on each product's own server. Do not move a
|
|
122
125
|
workload to a different provider, or add a second one for the same job, without an explicit owner
|
|
123
126
|
decision.
|
package/skills/release/SKILL.md
CHANGED
|
@@ -35,7 +35,7 @@ Read `ready`, then `findings[]`: each carries `code`, `severity` (`blocker` · `
|
|
|
35
35
|
|
|
36
36
|
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.
|
|
37
37
|
|
|
38
|
-
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 the range `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. **Build and verify every line from ONE command's output**, never from commit subjects or PR titles alone: `git log --stat --format='%h %s%n%b' origin/main..origin/development` gives each commit's subject, its full body (where a bundled PR records `Closes #N`) and the files it changed in a single pass. A line whose claim you cannot point to in that output does not go in the file, and every `#N` a Hub line cites must appear there: the train refuses `--apply` on a citation that ships in no commit of the cut. (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.
|
|
38
|
+
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 the range `origin/main..origin/development`, rewritten in Hub-subsystem terms, never a product or brand name, and never a Jerv-side project (the train refuses such a line). Hub scope is only `mutmutco/MMI-Hub`: never a product's board, `ds-propagate.yml`, or a product's deploy state. **Build and verify every line from ONE command's output**, never from commit subjects or PR titles alone: `git log --stat --format='%h %s%n%b' origin/main..origin/development` gives each commit's subject, its full body (where a bundled PR records `Closes #N`) and the files it changed in a single pass. A line whose claim you cannot point to in that output does not go in the file, and every `#N` a Hub line cites must appear there: the train refuses `--apply` on a citation that ships in no commit of the cut. (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.
|
|
39
39
|
|
|
40
40
|
```bash
|
|
41
41
|
mkdir -p .jerv/tmp
|
|
@@ -75,7 +75,7 @@ Read the saved result, never the exit code (exit `1` = a follow-up failed after
|
|
|
75
75
|
|
|
76
76
|
- `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`.
|
|
77
77
|
- `deployStatus` — `pending` is never terminal; `promoted: true` holds even when a deploy failed.
|
|
78
|
-
- `served-channel(<product>)` row — the release's proof that new installs get it: the public `/release/version` pointer of the Hub's `mmi`,
|
|
78
|
+
- `served-channel(<product>)` row — the release's proof that new installs get it: the public `/release/version` pointer of the releasing repo's OWN channel (the Hub's `mmi`, or the product its registry `installer` declaration names; no declaration → no row), read after deploy and publish are green. `success` names the version read. `failure` is either a channel still on the previous version or a stale served process (the route answers 401/404): the note names what moves that channel and the exact remedy; run it, then re-read the pointer. `pending` means not probed (legs not green) or unreadable, never proof. The row is receipt evidence only, never a ledger leg, so it never blocks the next train.
|
|
79
79
|
- `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.
|
|
80
80
|
- 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`.
|
|
81
81
|
- `announceNote` — `announced` (to the alerts channel for the Hub, to the project release channel for a product repo), `skipped`, `not announced` (deploy or publish not green; the note says whether a `--resume` carrying the same `--announce-summary-file` will post it), or the failure note. The channel id itself is never printed.
|