Say what each verb replaces, so the agent is pointed at it instead of a shell command (hq ADR 0245) #118

Merged
mesh-admin merged 1 commits from feat/verbs-say-what-they-replace into main 2026-10-07 19:04:12 +00:00
Contributor

The agent reached machines over ssh because nothing tied a verb to the command it replaces.

  • catalogue.Verb gains optional replaces (shell commands as typed), beside main's Optional (both kept; rebased over #113, #115, #117). Read strictly like the rest of a verb's definition, so a module-defined seat's verb may carry it too.
  • The compiled seats say it: node-service-manager (journalctl, systemctl status|restart|start|stop|enable|disable|list-units|--failed|is-active), node-hostname (cat /etc/hosts, getent hosts, edit /etc/hosts, HOSTALIASES, sed -i /etc/hosts), node-intrusion-prevention (fail2ban-client …), node-packet-filter (nft list ruleset, iptables -L, iptables-save, nft -f, nft delete, iptables -X), node-backup (restic snapshots|backup|restore), mesh-store (psql -l, psql), mesh-controller.node (hostnamectl, uptime). node-login-shell.execute deliberately replaces nothing: the generic shell is not the answer to a missing tool.
  • A manifest may say it for its own tools: "replaces": {"docker_logs": ["docker logs"]} — refused when the key is not a declared tool, or an entry is empty, multi-line, over 80 characters or repeated.
  • tools answers replaces per verb; module list --json answers each module's replaces. Both feed the mesh MCP server's search (mesh-tools#21) and the agent's table and guard (mesh-catalog#110).
  • Tests: the worked-around verbs say what they replace; every entry one short line; a verb definition and a manifest carry it; each refusal; tools carries it.

Order: once this is live, a catalogue module may declare replaces (docker's is the first follow-up) — before that the strict manifest read refuses it.

hq ADR 0245.

The agent reached machines over ssh because nothing tied a verb to the command it replaces. - `catalogue.Verb` gains optional `replaces` (shell commands as typed), beside main's `Optional` (both kept; rebased over #113, #115, #117). Read strictly like the rest of a verb's definition, so a module-defined seat's verb may carry it too. - The compiled seats say it: node-service-manager (`journalctl`, `systemctl status|restart|start|stop|enable|disable|list-units|--failed|is-active`), node-hostname (`cat /etc/hosts`, `getent hosts`, `edit /etc/hosts`, `HOSTALIASES`, `sed -i /etc/hosts`), node-intrusion-prevention (`fail2ban-client …`), node-packet-filter (`nft list ruleset`, `iptables -L`, `iptables-save`, `nft -f`, `nft delete`, `iptables -X`), node-backup (`restic snapshots|backup|restore`), mesh-store (`psql -l`, `psql`), mesh-controller.node (`hostnamectl`, `uptime`). node-login-shell.execute deliberately replaces nothing: the generic shell is not the answer to a missing tool. - A manifest may say it for its **own** tools: `"replaces": {"docker_logs": ["docker logs"]}` — refused when the key is not a declared tool, or an entry is empty, multi-line, over 80 characters or repeated. - `tools` answers `replaces` per verb; `module list --json` answers each module's `replaces`. Both feed the mesh MCP server's search (mesh-tools#21) and the agent's table and guard (mesh-catalog#110). - Tests: the worked-around verbs say what they replace; every entry one short line; a verb definition and a manifest carry it; each refusal; `tools` carries it. Order: once this is live, a catalogue module may declare `replaces` (docker's is the first follow-up) — before that the strict manifest read refuses it. hq ADR 0245.
Author
Contributor

Delivery novox/mesh-controller@4469cab7f46f — superseded since 2026-10-07T19:17:40Z

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Machines

  • mesh-controller on novox: judging — 0 healthy judging(s) so far

Transitions

  • 2026-10-07 18:53 (new) → proposed (announced): novox/mesh-controller#118's head announced
  • 2026-10-07 18:58 proposed → checked (checked): the verdict names this commit
  • 2026-10-07 18:58 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-07 19:05 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-07 19:05 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path
  • 2026-10-07 19:17 delivering → superseded (superseded): a newer delivery to the same trunk took over its walk

The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-controller@4469cab7f46f` — **superseded** since 2026-10-07T19:17:40Z **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves **Machines** - mesh-controller on novox: judging — 0 healthy judging(s) so far **Transitions** - 2026-10-07 18:53 (new) → proposed (announced): novox/mesh-controller#118's head announced - 2026-10-07 18:58 proposed → checked (checked): the verdict names this commit - 2026-10-07 18:58 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-07 19:05 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-07 19:05 published → delivering (go): its walk started: let go by this owner in its group's order, by a person, or on the controller's own path - 2026-10-07 19:17 delivering → superseded (superseded): a newer delivery to the same trunk took over its walk The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Author
Contributor

Merge check at d0283ffd

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)
  • mesh/repo-check: PASS — its merge-check.sh passed

Change plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Run by the build seat on g14 as build-1791395572018786925 (builds --log build-1791395572018786925).

--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T17:23:39Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-07T17:23:39Z

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.029s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	198.760s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.016s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.020s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.016s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.190s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.037s
ok  	github.com/novox/mesh-controller/internal/broker	2.407s
ok  	github.com/novox/mesh-controller/internal/builder	1.247s
ok  	github.com/novox/mesh-controller/internal/catalogue	3.678s
ok  	github.com/novox/mesh-controller/internal/conditions	1.959s
ok  	github.com/novox/mesh-controller/internal/envfile	1.029s
ok  	github.com/novox/mesh-controller/internal/facts	1.032s
ok  	github.com/novox/mesh-controller/internal/identity	6.278s
ok  	github.com/novox/mesh-controller/internal/inventory	111.451s
ok  	github.com/novox/mesh-controller/internal/lease	17.671s
ok  	github.com/novox/mesh-controller/internal/licences	5.515s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.011s
ok  	github.com/novox/mesh-controller/internal/link	51.841s
ok  	github.com/novox/mesh-controller/internal/lint	1.786s
ok  	github.com/novox/mesh-controller/internal/outward	1.039s
ok  	github.com/novox/mesh-controller/internal/overlay	1.024s
ok  	github.com/novox/mesh-controller/internal/secrets	1.403s
ok  	github.com/novox/mesh-controller/internal/store	3.950s
ok  	github.com/novox/mesh-controller/internal/testbus	1.174s
ok  	github.com/novox/mesh-controller/internal/token	1.015s
**Merge check** at `d0283ffd` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Change plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves Run by the build seat on g14 as `build-1791395572018786925` (`builds --log build-1791395572018786925`). ``` --- the gate: build-agent, mesh-controller, route-proxy mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T17:23:39Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-07T17:23:39Z machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.029s ok github.com/novox/mesh-controller/cmd/mesh-controller 198.760s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.016s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.020s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.016s ok github.com/novox/mesh-controller/examples/route-proxy 1.190s ok github.com/novox/mesh-controller/internal/artifacts 1.037s ok github.com/novox/mesh-controller/internal/broker 2.407s ok github.com/novox/mesh-controller/internal/builder 1.247s ok github.com/novox/mesh-controller/internal/catalogue 3.678s ok github.com/novox/mesh-controller/internal/conditions 1.959s ok github.com/novox/mesh-controller/internal/envfile 1.029s ok github.com/novox/mesh-controller/internal/facts 1.032s ok github.com/novox/mesh-controller/internal/identity 6.278s ok github.com/novox/mesh-controller/internal/inventory 111.451s ok github.com/novox/mesh-controller/internal/lease 17.671s ok github.com/novox/mesh-controller/internal/licences 5.515s ok github.com/novox/mesh-controller/internal/licences/adapters 1.011s ok github.com/novox/mesh-controller/internal/link 51.841s ok github.com/novox/mesh-controller/internal/lint 1.786s ok github.com/novox/mesh-controller/internal/outward 1.039s ok github.com/novox/mesh-controller/internal/overlay 1.024s ok github.com/novox/mesh-controller/internal/secrets 1.403s ok github.com/novox/mesh-controller/internal/store 3.950s ok github.com/novox/mesh-controller/internal/testbus 1.174s ok github.com/novox/mesh-controller/internal/token 1.015s ```
jschoubben force-pushed feat/verbs-say-what-they-replace from d0283ffdb1 to 0e5af8598f 2026-10-07 18:07:22 +00:00 Compare
Author
Contributor

Merge check at 0e5af859

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)
  • mesh/repo-check: PASS — its merge-check.sh passed

Change plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Run by the build seat on shanks as build-1791396472398592725 (builds --log build-1791396472398592725).

--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T18:01:12Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-07T18:01:12Z

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.035s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	453.318s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.020s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.028s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.017s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.236s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.060s
ok  	github.com/novox/mesh-controller/internal/broker	2.539s
ok  	github.com/novox/mesh-controller/internal/builder	1.552s
ok  	github.com/novox/mesh-controller/internal/catalogue	4.282s
ok  	github.com/novox/mesh-controller/internal/conditions	2.030s
ok  	github.com/novox/mesh-controller/internal/envfile	1.025s
ok  	github.com/novox/mesh-controller/internal/facts	1.042s
ok  	github.com/novox/mesh-controller/internal/identity	42.021s
ok  	github.com/novox/mesh-controller/internal/inventory	283.960s
ok  	github.com/novox/mesh-controller/internal/lease	17.719s
ok  	github.com/novox/mesh-controller/internal/licences	43.165s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.036s
ok  	github.com/novox/mesh-controller/internal/link	82.318s
ok  	github.com/novox/mesh-controller/internal/lint	1.922s
ok  	github.com/novox/mesh-controller/internal/outward	1.069s
ok  	github.com/novox/mesh-controller/internal/overlay	1.055s
ok  	github.com/novox/mesh-controller/internal/secrets	1.484s
ok  	github.com/novox/mesh-controller/internal/store	10.872s
ok  	github.com/novox/mesh-controller/internal/testbus	1.223s
ok  	github.com/novox/mesh-controller/internal/token	1.018s
**Merge check** at `0e5af859` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Change plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves Run by the build seat on shanks as `build-1791396472398592725` (`builds --log build-1791396472398592725`). ``` --- the gate: build-agent, mesh-controller, route-proxy mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T18:01:12Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-07T18:01:12Z machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.035s ok github.com/novox/mesh-controller/cmd/mesh-controller 453.318s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.020s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.028s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.017s ok github.com/novox/mesh-controller/examples/route-proxy 1.236s ok github.com/novox/mesh-controller/internal/artifacts 1.060s ok github.com/novox/mesh-controller/internal/broker 2.539s ok github.com/novox/mesh-controller/internal/builder 1.552s ok github.com/novox/mesh-controller/internal/catalogue 4.282s ok github.com/novox/mesh-controller/internal/conditions 2.030s ok github.com/novox/mesh-controller/internal/envfile 1.025s ok github.com/novox/mesh-controller/internal/facts 1.042s ok github.com/novox/mesh-controller/internal/identity 42.021s ok github.com/novox/mesh-controller/internal/inventory 283.960s ok github.com/novox/mesh-controller/internal/lease 17.719s ok github.com/novox/mesh-controller/internal/licences 43.165s ok github.com/novox/mesh-controller/internal/licences/adapters 1.036s ok github.com/novox/mesh-controller/internal/link 82.318s ok github.com/novox/mesh-controller/internal/lint 1.922s ok github.com/novox/mesh-controller/internal/outward 1.069s ok github.com/novox/mesh-controller/internal/overlay 1.055s ok github.com/novox/mesh-controller/internal/secrets 1.484s ok github.com/novox/mesh-controller/internal/store 10.872s ok github.com/novox/mesh-controller/internal/testbus 1.223s ok github.com/novox/mesh-controller/internal/token 1.018s ```
mesh-admin changed title from Say what each verb replaces, so the agent is pointed at it instead of a shell command (hq ADR 0242) to Say what each verb replaces, so the agent is pointed at it instead of a shell command (hq ADR 0245) 2026-10-07 18:28:33 +00:00
jschoubben force-pushed feat/verbs-say-what-they-replace from 0e5af8598f to 043d89bed2 2026-10-07 18:43:43 +00:00 Compare
jschoubben added 1 commit 2026-10-07 18:53:02 +00:00
Say what each verb replaces, so the agent is pointed at it instead of a shell command (hq ADR 0245)
mesh/merge-gate pass: builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step; every machine composes with the change as it…
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery superseded: a newer delivery to the same trunk took over its walk
4469cab7f4
A seat's verb names the shell commands it is the mesh's way to do, and a module says it for its own
tools in its manifest; the tools verb and module list --json carry both, for the mesh MCP server's
search, the agent's instructions and the guard on its shell.
jschoubben force-pushed feat/verbs-say-what-they-replace from 043d89bed2 to 4469cab7f4 2026-10-07 18:53:02 +00:00 Compare
Author
Contributor

Merge check at 043d89be

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)
  • mesh/repo-check: PASS — its merge-check.sh passed

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Run by the build seat on ace as build-1791398644842724406 (builds --log build-1791398644842724406).

--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T18:46:45Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-07T18:46:45Z

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.033s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	409.710s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.013s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.059s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.013s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.104s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.029s
ok  	github.com/novox/mesh-controller/internal/broker	2.632s
ok  	github.com/novox/mesh-controller/internal/builder	1.979s
ok  	github.com/novox/mesh-controller/internal/catalogue	3.555s
ok  	github.com/novox/mesh-controller/internal/conditions	2.318s
ok  	github.com/novox/mesh-controller/internal/envfile	1.057s
ok  	github.com/novox/mesh-controller/internal/facts	1.102s
ok  	github.com/novox/mesh-controller/internal/identity	47.139s
ok  	github.com/novox/mesh-controller/internal/inventory	257.773s
ok  	github.com/novox/mesh-controller/internal/lease	17.683s
ok  	github.com/novox/mesh-controller/internal/licences	44.295s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.097s
ok  	github.com/novox/mesh-controller/internal/link	73.005s
ok  	github.com/novox/mesh-controller/internal/lint	1.770s
ok  	github.com/novox/mesh-controller/internal/outward	1.078s
ok  	github.com/novox/mesh-controller/internal/overlay	1.067s
ok  	github.com/novox/mesh-controller/internal/secrets	1.394s
ok  	github.com/novox/mesh-controller/internal/store	16.831s
ok  	github.com/novox/mesh-controller/internal/testbus	1.392s
ok  	github.com/novox/mesh-controller/internal/token	1.014s
**Merge check** at `043d89be` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves Run by the build seat on ace as `build-1791398644842724406` (`builds --log build-1791398644842724406`). ``` --- the gate: build-agent, mesh-controller, route-proxy mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T18:46:45Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-07T18:46:45Z machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.033s ok github.com/novox/mesh-controller/cmd/mesh-controller 409.710s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.013s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.059s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.013s ok github.com/novox/mesh-controller/examples/route-proxy 1.104s ok github.com/novox/mesh-controller/internal/artifacts 1.029s ok github.com/novox/mesh-controller/internal/broker 2.632s ok github.com/novox/mesh-controller/internal/builder 1.979s ok github.com/novox/mesh-controller/internal/catalogue 3.555s ok github.com/novox/mesh-controller/internal/conditions 2.318s ok github.com/novox/mesh-controller/internal/envfile 1.057s ok github.com/novox/mesh-controller/internal/facts 1.102s ok github.com/novox/mesh-controller/internal/identity 47.139s ok github.com/novox/mesh-controller/internal/inventory 257.773s ok github.com/novox/mesh-controller/internal/lease 17.683s ok github.com/novox/mesh-controller/internal/licences 44.295s ok github.com/novox/mesh-controller/internal/licences/adapters 1.097s ok github.com/novox/mesh-controller/internal/link 73.005s ok github.com/novox/mesh-controller/internal/lint 1.770s ok github.com/novox/mesh-controller/internal/outward 1.078s ok github.com/novox/mesh-controller/internal/overlay 1.067s ok github.com/novox/mesh-controller/internal/secrets 1.394s ok github.com/novox/mesh-controller/internal/store 16.831s ok github.com/novox/mesh-controller/internal/testbus 1.392s ok github.com/novox/mesh-controller/internal/token 1.014s ```
Author
Contributor

Merge check at 4469cab7

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy)
  • mesh/repo-check: PASS — its merge-check.sh passed

Delivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step

  • tier 0: mesh-controller
  • tier 1: build-agent
  • tier 2: route-proxy
  • ace: receives build-agent, route-proxy
  • g14: receives build-agent
  • novox: receives mesh-controller, build-agent, route-proxy
  • shanks: receives build-agent
  • build-agent keeps data (ADR 0233): what it holds is backed up before it moves
  • route-proxy provides route: its consumers are sent again after it
  • route-proxy keeps data (ADR 0233): what it holds is backed up before it moves

Run by the build seat on g14 as build-1791399191578526040 (builds --log build-1791399191578526040).

--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8)
long-running resources without health: 1
1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here
judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T18:46:45Z says they run
composing every machine as the mesh is
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
composing every machine with the change
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued
merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose)
judged by controller development build against the facts of 2026-10-07T18:46:45Z

machines:
  - a machine (f35): composes
  - holds mesh-dns-resolver (idt): composes
  - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes
  - a machine (yvbpsm): composes

a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy
--- its merge-check.sh (go toolchain)
ok  	github.com/novox/mesh-controller/cmd/mesh-builder	1.037s
ok  	github.com/novox/mesh-controller/cmd/mesh-controller	172.352s
ok  	github.com/novox/mesh-controller/examples/objectstore-provisioner	1.009s
ok  	github.com/novox/mesh-controller/examples/postgres-provisioner	1.014s
ok  	github.com/novox/mesh-controller/examples/redis-provisioner	1.025s
ok  	github.com/novox/mesh-controller/examples/route-proxy	1.194s
ok  	github.com/novox/mesh-controller/internal/artifacts	1.048s
ok  	github.com/novox/mesh-controller/internal/broker	2.550s
ok  	github.com/novox/mesh-controller/internal/builder	1.300s
ok  	github.com/novox/mesh-controller/internal/catalogue	3.842s
ok  	github.com/novox/mesh-controller/internal/conditions	1.983s
ok  	github.com/novox/mesh-controller/internal/envfile	1.027s
ok  	github.com/novox/mesh-controller/internal/facts	1.032s
ok  	github.com/novox/mesh-controller/internal/identity	6.257s
ok  	github.com/novox/mesh-controller/internal/inventory	95.677s
ok  	github.com/novox/mesh-controller/internal/lease	17.702s
ok  	github.com/novox/mesh-controller/internal/licences	5.592s
ok  	github.com/novox/mesh-controller/internal/licences/adapters	1.006s
ok  	github.com/novox/mesh-controller/internal/link	48.418s
ok  	github.com/novox/mesh-controller/internal/lint	1.834s
ok  	github.com/novox/mesh-controller/internal/outward	1.040s
ok  	github.com/novox/mesh-controller/internal/overlay	1.027s
ok  	github.com/novox/mesh-controller/internal/secrets	1.471s
ok  	github.com/novox/mesh-controller/internal/store	3.857s
ok  	github.com/novox/mesh-controller/internal/testbus	1.187s
ok  	github.com/novox/mesh-controller/internal/token	1.017s
**Merge check** at `4469cab7` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: build-agent, mesh-controller, route-proxy) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step - tier 0: mesh-controller - tier 1: build-agent - tier 2: route-proxy - ace: receives build-agent, route-proxy - g14: receives build-agent - novox: receives mesh-controller, build-agent, route-proxy - shanks: receives build-agent - build-agent keeps data (ADR 0233): what it holds is backed up before it moves - route-proxy provides route: its consumers are sent again after it - route-proxy keeps data (ADR 0233): what it holds is backed up before it moves Run by the build seat on g14 as `build-1791399191578526040` (`builds --log build-1791399191578526040`). ``` --- the gate: build-agent, mesh-controller, route-proxy mesh-controller: ok, 46 tool(s); WARNING: controller stay(s) up and say(s) not how it is ready — judged by liveness alone, refused from 2026-11-18 (ADR 0240 rule 8) long-running resources without health: 1 1 manifest(s) checked. Judged against the seats this binary carries; a claim on one of the mesh's own seats is judged fully at registration, and a seat declared by a module not given here reads as unknown. Identities judged on a 6-character machine name, against the bounds of the providers given here judging 0 module(s) changed against 4 machine(s), as the snapshot of 2026-10-07T18:46:45Z says they run composing every machine as the mesh is the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued composing every machine with the change the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued the bus's user list leaves out 5 user(s) the mesh has minted no credential for: controller, node.f35, node.idt, node.ygcyr, node.yvbpsm. Each is a user that cannot connect until one is issued merge gate: PASS — every machine composes with the change as it did without (4 of 4 compose) judged by controller development build against the facts of 2026-10-07T18:46:45Z machines: - a machine (f35): composes - holds mesh-dns-resolver (idt): composes - holds git, holds mesh-artifact-store, holds mesh-broker, holds mesh-catalog, holds mesh-dns-resolver, holds mesh-store, holds mesh-vault, holds npm-package-registry, the control node, the hub (ygcyr): composes - a machine (yvbpsm): composes a merge would rebuild 3 module(s) in 3 tier(s): build-agent, mesh-controller, route-proxy --- its merge-check.sh (go toolchain) ok github.com/novox/mesh-controller/cmd/mesh-builder 1.037s ok github.com/novox/mesh-controller/cmd/mesh-controller 172.352s ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.009s ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.014s ok github.com/novox/mesh-controller/examples/redis-provisioner 1.025s ok github.com/novox/mesh-controller/examples/route-proxy 1.194s ok github.com/novox/mesh-controller/internal/artifacts 1.048s ok github.com/novox/mesh-controller/internal/broker 2.550s ok github.com/novox/mesh-controller/internal/builder 1.300s ok github.com/novox/mesh-controller/internal/catalogue 3.842s ok github.com/novox/mesh-controller/internal/conditions 1.983s ok github.com/novox/mesh-controller/internal/envfile 1.027s ok github.com/novox/mesh-controller/internal/facts 1.032s ok github.com/novox/mesh-controller/internal/identity 6.257s ok github.com/novox/mesh-controller/internal/inventory 95.677s ok github.com/novox/mesh-controller/internal/lease 17.702s ok github.com/novox/mesh-controller/internal/licences 5.592s ok github.com/novox/mesh-controller/internal/licences/adapters 1.006s ok github.com/novox/mesh-controller/internal/link 48.418s ok github.com/novox/mesh-controller/internal/lint 1.834s ok github.com/novox/mesh-controller/internal/outward 1.040s ok github.com/novox/mesh-controller/internal/overlay 1.027s ok github.com/novox/mesh-controller/internal/secrets 1.471s ok github.com/novox/mesh-controller/internal/store 3.857s ok github.com/novox/mesh-controller/internal/testbus 1.187s ok github.com/novox/mesh-controller/internal/token 1.017s ```
mesh-admin merged commit 4f80d87750 into main 2026-10-07 19:04:12 +00:00
mesh-admin deleted branch feat/verbs-say-what-they-replace 2026-10-07 19:04:12 +00:00
This repo is archived. You cannot comment on pull requests.
No Reviewers
2 Participants
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-controller#118