@mutmutco/hermes-plugin 4.0.17 → 4.1.0
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 +1 -1
- package/plugin.yaml +1 -1
- package/skills/bootstrap/seeds/gate.template.yml +9 -0
- package/skills/epic/SKILL.md +5 -2
- package/skills/hotfix/SKILL.md +3 -3
- package/skills/mmi/SKILL.md +5 -1
- package/skills/mmi-resume/SKILL.md +5 -0
- package/skills/onboard/SKILL.md +6 -3
- package/skills/rcand/SKILL.md +12 -3
- package/skills/release/SKILL.md +10 -1
- package/skills/stage/SKILL.md +17 -4
package/package.json
CHANGED
package/plugin.yaml
CHANGED
|
@@ -59,6 +59,15 @@ jobs:
|
|
|
59
59
|
run: { working-directory: {{GATE_WORKDIR}} }
|
|
60
60
|
steps:
|
|
61
61
|
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
|
|
62
|
+
# #5427: per-job npm cache under $RUNNER_TEMP — never the shared ~/.npm. Twelve mmi-live lanes
|
|
63
|
+
# share the gha-runner home; npm hardlinks from that cache into node_modules, so one job's
|
|
64
|
+
# `npm ci` can make another job's vitest/dist/workers/forks.js vanish mid-suite (Cannot find
|
|
65
|
+
# module). Job-local cache ⇒ no cross-job hardlinks. Must land BEFORE setup-node (`cache: npm`
|
|
66
|
+
# follows `npm config get cache`). Job-level `env:` cannot use the `runner` context — write
|
|
67
|
+
# via GITHUB_ENV from the shell `$RUNNER_TEMP` instead.
|
|
68
|
+
- name: Isolate npm cache (per-job)
|
|
69
|
+
shell: bash
|
|
70
|
+
run: echo "NPM_CONFIG_CACHE=$RUNNER_TEMP/npm-cache" >> "$GITHUB_ENV"
|
|
62
71
|
# MMI-Hub#5111: Windows CRLF in tracked shell scripts breaks Linux runners before the real
|
|
63
72
|
# check can explain it. Inspect only tracked files before install; .gitattributes is the fix.
|
|
64
73
|
- name: Line-ending guard
|
package/skills/epic/SKILL.md
CHANGED
|
@@ -99,8 +99,11 @@ part of the batch), use the inverse-friendly single link:
|
|
|
99
99
|
mmi-cli oracle issue link-child <parent> <child>
|
|
100
100
|
```
|
|
101
101
|
|
|
102
|
-
Each child is now a parallel item — fan them out one worktree + PR each.
|
|
103
|
-
|
|
102
|
+
Each child is now a parallel item — fan them out one worktree + PR each. On Windows, set
|
|
103
|
+
`git config core.longpaths true` on the main checkout before the first `git worktree add` (#5499). When
|
|
104
|
+
several linked worktrees belong to the same clone, serialize `git branch -m` / other ref renames (or retry
|
|
105
|
+
serially on `.tmp-renamed-log`) so parallel agents do not race the shared ref log (#5485). **When the last
|
|
106
|
+
child merges, close the umbrella** (its board `Done` follows automatically).
|
|
104
107
|
|
|
105
108
|
## Notes
|
|
106
109
|
|
package/skills/hotfix/SKILL.md
CHANGED
|
@@ -83,9 +83,9 @@ the main-base PR. Do not duplicate those steps with raw branch commands, manual
|
|
|
83
83
|
GitHub PR creation.
|
|
84
84
|
|
|
85
85
|
Conflicts confined to regenerable distribution / version-fold paths (e.g. Hub `distribution-bom.json`,
|
|
86
|
-
locked plugin manifests, consumer `package.json`) — and, for hub-serverless + registry-publish,
|
|
87
|
-
skill
|
|
88
|
-
|
|
86
|
+
locked plugin manifests, consumer `package.json`) — and, for hub-serverless + registry-publish, the
|
|
87
|
+
canonical skill root `skills/` (#4363 / #4471) — are auto-resolved (take the picked side) and regenerated
|
|
88
|
+
by the bump/fold step. Source TS under `src/` / `cli/src/` is never auto-resolved.
|
|
89
89
|
|
|
90
90
|
Before cutting the hotfix branch, `hotfix start` preflights every `--from` pick on an accumulating
|
|
91
91
|
`origin/main` tree (#4472). If any pick would hard-stop, it refuses with every failing pick and path and
|
package/skills/mmi/SKILL.md
CHANGED
|
@@ -403,7 +403,11 @@ workspace mechanics:
|
|
|
403
403
|
(`Closes #…, #…`). When an issue must stay open (HOLD/prep), never write `Does not close #N` — GitHub
|
|
404
404
|
still closes it; use `Part of #N` / `Refs #N` / `leaves #N open` only (JC#495).
|
|
405
405
|
- **Parallel:** run independent work concurrently, **one PR per item**. If two would touch the same file,
|
|
406
|
-
serialize them or fold them into a batch instead.
|
|
406
|
+
serialize them or fold them into a batch instead. On Windows, set `git config core.longpaths true` on the
|
|
407
|
+
main checkout before the first `git worktree add` (#5499; see `docs/Architecture/worktrees.md`). Linked
|
|
408
|
+
worktrees of one clone still share `.git`: serialize `git branch -m` / other ref renames across those
|
|
409
|
+
worktrees, or retry serially when the error names `.git/logs/refs/.tmp-renamed-log` (#5485; see
|
|
410
|
+
`docs/Architecture/worktrees.md`).
|
|
407
411
|
- **Background:** run off the hot path (a background task or CI job); poll with `/loop` if useful. Bound it
|
|
408
412
|
— never block silently.
|
|
409
413
|
- **Split:** keep the original as the umbrella; file each child as a **native sub-issue** of it with
|
|
@@ -108,6 +108,11 @@ janitor prose. Catalog: `docs/Architecture/compute-at-read.md` (in MMI-Hub).
|
|
|
108
108
|
| Docs index freshness | `mmi-cli oracle docs index --check` |
|
|
109
109
|
| Path / symbol / meaning pointers | `mmi-cli oracle repo-index search <q>` (Hub cloud; `--semantic` optional) |
|
|
110
110
|
|
|
111
|
+
**Code orientation after a handoff (#5420):** a memory handoff orients by story, not by structure. Route
|
|
112
|
+
cross-repo “where does X live / how does Y flow” questions through `mmi-cli oracle find <q>` (semantic) or
|
|
113
|
+
`mmi-cli oracle repo-index search <q>` (hybrid) as the first-class step — before trusting recall or grepping a
|
|
114
|
+
host-native index — and open the cited source to verify a pointer hit before acting on it.
|
|
115
|
+
|
|
111
116
|
## Notes
|
|
112
117
|
|
|
113
118
|
- `/mmi-resume` is read-only session orientation. It never claims, moves, or writes.
|
package/skills/onboard/SKILL.md
CHANGED
|
@@ -61,13 +61,16 @@ Before treating `docs/**` as current-state, teach the Hub door (Hub#4133 / #4148
|
|
|
61
61
|
|
|
62
62
|
```bash
|
|
63
63
|
mmi-cli oracle repo-index search <path-or-symbol-or-meaning> # Hub cloud pointers (default)
|
|
64
|
-
mmi-cli oracle repo-index search "where …" --semantic #
|
|
64
|
+
mmi-cli oracle repo-index search "where …" --semantic # BGE meaning over embeddings
|
|
65
65
|
mmi-cli oracle repo-index status --cloud # is the estate index live?
|
|
66
66
|
```
|
|
67
67
|
|
|
68
68
|
Host indexes (Cursor / Kilo) stay local helpers; **Hub `repo-index` is the org SSOT structure door**.
|
|
69
|
-
|
|
70
|
-
`
|
|
69
|
+
After any memory handoff, cross-repo code-orientation questions go through `mmi-cli oracle find <q>` (semantic)
|
|
70
|
+
or the `repo-index search` door above as the first-class step (#5420), and every pointer hit gets verified
|
|
71
|
+
against the cited source before you act on it. Living current-state still comes from live verbs
|
|
72
|
+
(`org schedules`, `board read`, …) — see `docs/Architecture/compute-at-read.md`. Do not invent wiki prose
|
|
73
|
+
from pointer hits.
|
|
71
74
|
|
|
72
75
|
## Notes
|
|
73
76
|
|
package/skills/rcand/SKILL.md
CHANGED
|
@@ -57,8 +57,11 @@ primary checkout.
|
|
|
57
57
|
|
|
58
58
|
Preconditions: on `development`, clean tree. The clean-tree check rejects UNTRACKED scratch too, not just
|
|
59
59
|
modified tracked files — if `--apply` stops with `working tree must be clean before …`, run `git status
|
|
60
|
-
--porcelain` on the paths it named and read both columns.
|
|
61
|
-
|
|
60
|
+
--porcelain` on the paths it named and read both columns. For `?? .jerv/` / `?? .pi/` (org-managed agent
|
|
61
|
+
scratch), run `mmi-cli doctor --apply` to write the managed `.gitignore` block — do not hand-edit
|
|
62
|
+
`.gitignore` (#5409). The train CLI already ignores those live-session dirs (#5397); doctor is the durable
|
|
63
|
+
heal so `git status` stays clean. For other `??` scratch, gitignore it (or move it to a gitignored path
|
|
64
|
+
like `tmp/`). Treat every tracked state except exactly ` M` as real work to commit or stash;
|
|
62
65
|
for ` M`, discard only when `git diff HEAD --numstat -- <paths>` is empty, and only with
|
|
63
66
|
`git checkout -- <paths>`. Plain `git diff --numstat` prints nothing for a merely staged change, so it
|
|
64
67
|
cannot tell real work from line-ending churn (#1472, #4004).
|
|
@@ -125,7 +128,13 @@ Required status checks are **per-repo branch protection, not a fixed list** —
|
|
|
125
128
|
SHA has no check-runs yet, so when checks ARE required, pushing the branch *first* is structurally rejected
|
|
126
129
|
until CI catches up (it then succeeds on a retry — avoidable noise). Push the **tag first**: it lands the
|
|
127
130
|
SHA and triggers the repo's CI without touching the protected branch ref. Then probe what `rc` actually
|
|
128
|
-
requires and wait only for those contexts
|
|
131
|
+
requires and wait only for those contexts.
|
|
132
|
+
|
|
133
|
+
**Preflight (#5428):** before the immutable tag, `mmi-cli devops rcand --apply` inspects each required
|
|
134
|
+
context's workflow `on:` triggers. If a required context (e.g. `py-gate` / `web-gate`) is pull_request-only
|
|
135
|
+
and cannot fire on a tag push, the train **refuses before tagging** with a teaching error — never publish a
|
|
136
|
+
candidate tag then wait on an event that cannot fire. Fix the gate to also trigger on `push: tags: ['v*']`
|
|
137
|
+
(see MMI-Hub `gate.yml`), or remove those contexts from the rc ruleset (`ci audit` / reconcile).
|
|
129
138
|
|
|
130
139
|
```bash
|
|
131
140
|
git push origin "vX.Y.0-rc.N" # lands the SHA + triggers the repo's CI
|
package/skills/release/SKILL.md
CHANGED
|
@@ -112,7 +112,10 @@ The clean-tree check rejects UNTRACKED scratch too, not just modified tracked fi
|
|
|
112
112
|
`--resume` stops with `working tree must be clean before …`, run `git status --porcelain` on the paths it
|
|
113
113
|
named and read BOTH status columns before touching anything (#1472, #4004):
|
|
114
114
|
|
|
115
|
-
- `??` — untracked scratch.
|
|
115
|
+
- `??` — untracked scratch. For `?? .jerv/` / `?? .pi/` (org-managed agent scratch), run
|
|
116
|
+
`mmi-cli doctor --apply` to write the managed `.gitignore` block — do not hand-edit `.gitignore`
|
|
117
|
+
(#5409). The train CLI already ignores those live-session dirs (#5397); doctor is the durable heal.
|
|
118
|
+
For other `??` paths, gitignore them, or move them to a gitignored path like `tmp/`, then retry.
|
|
116
119
|
- exactly ` M` (blank staged column) — the only state that can be churn rather than work. Test it with
|
|
117
120
|
`git diff HEAD --numstat -- <paths>`: non-empty is a real edit to commit or stash; empty means the
|
|
118
121
|
worktree normalizes straight back to HEAD (an LF↔CRLF rewrite, say), and `git checkout -- <paths>`
|
|
@@ -510,6 +513,12 @@ correct). Read the model from the registry (`mmi-cli oracle org project get {own
|
|
|
510
513
|
- **repository-owned serverless / registry-publish** (e.g. Jerv-PowerTools' `Deploy Jerv Memory`) — there is
|
|
511
514
|
no `runtime tenant redeploy` for these; re-run the repo's OWN declared `workflow_dispatch` deploy workflow at
|
|
512
515
|
the promoted-equivalent ref: `gh workflow run <deploy-workflow> --repo {owner}/{repo} --ref <ref>`.
|
|
516
|
+
- **hub-serverless** (MMI-Hub) — when `deploy.yml` fails the repo-index v4 readiness gate (`stale-commit` /
|
|
517
|
+
not-ready authorities), the promoted ref is fine; repair cloud v4 authorities first (#5405). List failing
|
|
518
|
+
authorities with `mmi-cli oracle repo-index status --cloud`, run
|
|
519
|
+
`mmi-cli oracle repo-index sync-estate --repo <owner/repo>` for each, re-probe with
|
|
520
|
+
`mmi-cli oracle repo-index health --live --queries-only`, then `gh run rerun --failed` on the failed
|
|
521
|
+
deploy run. Do not re-tag.
|
|
513
522
|
|
|
514
523
|
Name the sanctioned dispatch mechanism you used in the train report.
|
|
515
524
|
|
package/skills/stage/SKILL.md
CHANGED
|
@@ -116,18 +116,29 @@ gated at the **Cloudflare edge** (#1761). The CLI detects your IP, dispatches th
|
|
|
116
116
|
rule scoped to your dev host + IP). The box no longer IP-gates dev. No SSH from your machine; everything
|
|
117
117
|
moves through the central workflows.
|
|
118
118
|
|
|
119
|
+
**Deploy-model preflight (#5466 / #5467).** `/stage --live` is **not** generally available. Read
|
|
120
|
+
`deployModel` first (`mmi-cli oracle org project get {owner}/{repo}` → `deployModel`, or the dry
|
|
121
|
+
`mmi-cli stage --live --json` refusal). It applies only to **`tenant-container`** repos (the same
|
|
122
|
+
model the Hub tenant-deploy + tenant-control gates require). **`registry-publish` is not applicable**
|
|
123
|
+
for live stages — nor are hub-serverless, solo-container, static-cdn, content, or none. For an
|
|
124
|
+
unsupported model the dry plan refuses **before** offering `--apply` / `--down`; do not invent a
|
|
125
|
+
tenant deploy or gate.
|
|
126
|
+
|
|
119
127
|
```bash
|
|
120
|
-
mmi-cli stage --live # dry-run plan
|
|
128
|
+
mmi-cli stage --live # dry-run plan (refuses when deployModel is not tenant-container)
|
|
121
129
|
mmi-cli stage --live --apply # deploy + gate your IP at the Cloudflare edge
|
|
122
130
|
```
|
|
123
131
|
|
|
124
|
-
Tear it down when done —
|
|
132
|
+
Tear it down when done — **only when `--apply` actually created a runtime or gate**. The runtime stops
|
|
133
|
+
and the Cloudflare edge gate is removed:
|
|
125
134
|
|
|
126
135
|
```bash
|
|
127
136
|
mmi-cli stage --live --down --apply
|
|
128
137
|
```
|
|
129
138
|
|
|
130
|
-
|
|
139
|
+
If apply never landed (unsupported model, failed dispatch, or you never ran `--apply`), `--down` is a
|
|
140
|
+
**safe no-op** — do not promise teardown of a stage that was never created. Personal dev stages only —
|
|
141
|
+
rc/live environments still move exclusively through the promotion train.
|
|
131
142
|
|
|
132
143
|
## Step 3 — report
|
|
133
144
|
|
|
@@ -136,7 +147,9 @@ The stage URL, what's running (server + tools), the workspace path (`tmp/stage/`
|
|
|
136
147
|
## Notes
|
|
137
148
|
|
|
138
149
|
- `/stage` is local — no AWS, no deploy, no board or version effect. The one cloud exception is
|
|
139
|
-
`--live`: an on-demand **dev** stage of your branch
|
|
150
|
+
`--live`: an on-demand **dev** stage of your branch for **`tenant-container`** repos only, gated to
|
|
151
|
+
your IP at the Cloudflare edge (above). Preflight `deployModel` before offering it; `registry-publish`
|
|
152
|
+
and other models have no live stage.
|
|
140
153
|
- Remote rc/live environments move only through `/rcand`, `/release`, and `/hotfix`.
|
|
141
154
|
- Everything is gitignored; `/stage` never produces a tracked change.
|
|
142
155
|
- **Playwright MCP output goes to `tmp/`**, never the repo root: if you drive the Playwright MCP server,
|