@mutmutco/pi-plugin 4.5.225 → 4.5.227

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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@mutmutco/pi-plugin",
3
- "version": "4.5.225",
3
+ "version": "4.5.227",
4
4
  "description": "MMI workflow skills and org gates delivery.",
5
5
  "author": {
6
6
  "name": "MMI Future",
@@ -29,7 +29,15 @@ mmi-cli devops train doctor --lane hotfix --heal --json
29
29
 
30
30
  Parse stdout only; never `2>&1`. `ready` false → stop and quote every blocker's `code` and `remedy`; an unread origin is never green. Findings carry `code`, `severity`, `source`, `remedy`, `anchor`.
31
31
 
32
- Piping `mmi-cli devops api get` into a JSON parser: a refusal exits 1 with empty stdout, so guard both: `out=$(MMI_ACTOR=app mmi-cli devops api get <path>) && [ -n "$out" ] && printf '%s' "$out" | node -e '…'`. One job's metadata: read the allowlisted `repos/{owner}/{repo}/actions/runs/{id}/jobs` and filter `jobs[]` by `id`; `actions/jobs/{id}` is refused (only its `/logs`, with `--out`).
32
+ Piping `mmi-cli devops api get` into a JSON parser: a refusal exits 1 with empty stdout, so guard both exit status and nonempty output. For one job's runner and timestamps, read the allowlisted `repos/{owner}/{repo}/actions/runs/{id}/jobs` and filter `jobs[]` by `id`; `actions/jobs/{id}` is refused (only its `/logs`, with `--out`). Do not retry that refused endpoint or broaden the allowlist.
33
+
34
+ ```bash
35
+ # Set repo, run_id and job_id to the target repository, run and job.
36
+ out=$(MMI_ACTOR=app mmi-cli devops api get "repos/$repo/actions/runs/$run_id/jobs") &&
37
+ [ -n "$out" ] && printf '%s' "$out" | node -e 'let s="";process.stdin.on("data",d=>s+=d).on("end",()=>{const j=JSON.parse(s).jobs.find(j=>String(j.id)===process.argv[1]);if(!j)throw new Error("Job not found in run jobs");console.log(JSON.stringify({runner_name:j.runner_name,started_at:j.started_at,completed_at:j.completed_at,conclusion:j.conclusion}))})' "$job_id"
38
+ ```
39
+
40
+ Do not parse stdout after a failing read, suppress its stderr, or merge stderr into the JSON.
33
41
 
34
42
  ## Apply
35
43
 
@@ -18,11 +18,15 @@ Use host worktrees and MMI cleanup; no personal Jerv is required. At handoff, st
18
18
  session; never copy them forward from an earlier handoff, even labelled unverified (#9039).
19
19
  Report skill misfires to Hub
20
20
  with `mmi-cli learning skill-lesson --skill <name> --title <summary> --body-file <path>`.
21
- Under the App pool,
21
+ Under the App pool, on raw `gh`
22
22
  `--jq`/`-q`/`--template`/`--web` are refused: use
23
23
  `MMI_ACTOR=app mmi-cli devops read issue view <id> --repo <owner/repo> --json comments`
24
24
  (or `pr`/`run view` with their fields); filter returned JSON locally, e.g. by adding
25
25
  `--jq '<expr>'` to that typed read (runs the local jq, never inside gh).
26
+ For the last N comments (here, 3), use the typed JSON read with local filtering, not raw gh formatters:
27
+ ```bash
28
+ MMI_ACTOR=app mmi-cli devops read issue view <id> --repo <owner/repo> --json comments --jq '.comments[-3:][] | {createdAt, body}'
29
+ ```
26
30
  For run logs, never native `gh run view --log`/`--log-failed`: use
27
31
  `MMI_ACTOR=app mmi-cli devops read run log <runId> --repo <owner/repo> [--failed | --job <name>] [--tail N]`.
28
32
  A refused command writes no output, so a `> file` redirect leaves it empty or missing: read the