The live condition mesh.release.held (kind release-held) read "Needs you: release them, or leave them held. Some module updates wait for a person to release them…" on 2026-10-08. It named neither the modules nor the machines held, and lacked the ADR 0258 words that say where a release is given ("from the mesh MCP server; this notification cannot do it.").
Change
backlogObservation words the condition where it is raised (releaseHeldWords): the modules waiting and the machines they wait on, e.g. "Updates of openrazer wait for your release" / "Needs you: release them from the mesh MCP server; this notification cannot do it. Updates of openrazer on g14 and shanks wait for a person to release them, because the last release failed its check. They are not delivered until then, and stay held if you leave them." The machines go in Also. The kind's fallback in plainWordings uses the same function.
The three "restart the controller if this stays" needs (controller-deaf, self-check-silent, watchdogs-silent) missed the same suffix and now carry it: ADR 0258 §1 says release, stop, start and restart are said in words with where to give them.
Tests
TestUpdatesHeldNameWhatWaitsAndWhereItIsReleased: the raised words, held to the plain rule.
TestANeedNoNotificationAnswersNamesTheMeshMCPServer: every wording in plainWordings (each subject shape, both severities) and the ones worded where raised (waiting walk, module restart, stalled delivery, held release) — when its need opens with a verb only the mesh MCP server performs (release, stop, start, restart, restore) and offers no action, it must end with FromMeshMCPServer. It would have caught release-held and the controller restarts. A need such as "check the disks of ace" is not held to it, because the mesh MCP server is not where that is done.
merge-check.sh passes locally.
## Why
The live condition `mesh.release.held` (kind `release-held`) read "Needs you: release them, or leave them held. Some module updates wait for a person to release them…" on 2026-10-08. It named neither the modules nor the machines held, and lacked the ADR 0258 words that say where a release is given ("from the mesh MCP server; this notification cannot do it.").
## Change
- `backlogObservation` words the condition where it is raised (`releaseHeldWords`): the modules waiting and the machines they wait on, e.g. "Updates of openrazer wait for your release" / "Needs you: release them from the mesh MCP server; this notification cannot do it. Updates of openrazer on g14 and shanks wait for a person to release them, because the last release failed its check. They are not delivered until then, and stay held if you leave them." The machines go in `Also`. The kind's fallback in `plainWordings` uses the same function.
- The three "restart the controller if this stays" needs (`controller-deaf`, `self-check-silent`, `watchdogs-silent`) missed the same suffix and now carry it: ADR 0258 §1 says release, stop, start and restart are said in words with where to give them.
## Tests
- `TestUpdatesHeldNameWhatWaitsAndWhereItIsReleased`: the raised words, held to the plain rule.
- `TestANeedNoNotificationAnswersNamesTheMeshMCPServer`: every wording in `plainWordings` (each subject shape, both severities) and the ones worded where raised (waiting walk, module restart, stalled delivery, held release) — when its need opens with a verb only the mesh MCP server performs (release, stop, start, restart, restore) and offers no action, it must end with `FromMeshMCPServer`. It would have caught `release-held` and the controller restarts. A need such as "check the disks of ace" is not held to it, because the mesh MCP server is not where that is done.
- `merge-check.sh` passes locally.
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…
The release-held words said "release them, or leave them held" without the modules,
the machines or the mesh MCP server, so the operator could neither tell what waited
nor where to act (ADR 0258). The controller's restart needs missed the same suffix.
A test now holds every need that opens with a verb only the mesh MCP server performs
to name it, so a new kind cannot miss it.
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: passed — healthy 3 times over 3m40s
mesh-controller on the rest running it: sent
build-agent on ace: passed — healthy 3 times over 3m43s
build-agent on the rest running it: sent
route-proxy on ace: passed — healthy 3 times over 3m46s
route-proxy on the rest running it: sent
Transitions
2026-10-08 15:02 (new) → proposed (announced): novox/mesh-controller#155's head announced
2026-10-08 15:08 proposed → checked (checked): the verdict names this commit
2026-10-08 15:08 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-08 15:09 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-08 15:09 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-08 15:27 delivering → delivered (done): its walk is done: every machine of its deploy plan passed, or was left as its policy says
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@298ec06ae0aa` — **delivered** since 2026-10-08T15:27:23Z
**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: passed — healthy 3 times over 3m40s
- mesh-controller on the rest running it: sent
- build-agent on ace: passed — healthy 3 times over 3m43s
- build-agent on the rest running it: sent
- route-proxy on ace: passed — healthy 3 times over 3m46s
- route-proxy on the rest running it: sent
**Transitions**
- 2026-10-08 15:02 (new) → proposed (announced): novox/mesh-controller#155's head announced
- 2026-10-08 15:08 proposed → checked (checked): the verdict names this commit
- 2026-10-08 15:08 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-08 15:09 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-08 15:09 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-08 15:27 delivering → delivered (done): its walk is done: every machine of its deploy plan passed, or was left as its policy says
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
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-1791470666353208340 (builds --log build-1791470666353208340).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T14:40:42Z 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-08T14:40:42Z
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-delivery, 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.034s
ok github.com/novox/mesh-controller/cmd/mesh-controller 152.537s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.020s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/route-proxy 1.112s
ok github.com/novox/mesh-controller/internal/artifacts 1.055s
ok github.com/novox/mesh-controller/internal/broker 2.457s
ok github.com/novox/mesh-controller/internal/builder 1.793s
ok github.com/novox/mesh-controller/internal/catalogue 4.043s
ok github.com/novox/mesh-controller/internal/conditions 2.190s
ok github.com/novox/mesh-controller/internal/envfile 1.056s
ok github.com/novox/mesh-controller/internal/facts 1.059s
ok github.com/novox/mesh-controller/internal/identity 4.073s
ok github.com/novox/mesh-controller/internal/inventory 69.813s
ok github.com/novox/mesh-controller/internal/lease 17.696s
ok github.com/novox/mesh-controller/internal/licences 3.725s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.063s
ok github.com/novox/mesh-controller/internal/link 43.714s
ok github.com/novox/mesh-controller/internal/lint 1.945s
ok github.com/novox/mesh-controller/internal/outward 1.077s
ok github.com/novox/mesh-controller/internal/overlay 1.076s
ok github.com/novox/mesh-controller/internal/secrets 1.449s
ok github.com/novox/mesh-controller/internal/store 3.308s
ok github.com/novox/mesh-controller/internal/testbus 1.188s
ok github.com/novox/mesh-controller/internal/token 1.015s
**Merge check** at `e33da2dc`
- `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-1791470666353208340` (`builds --log build-1791470666353208340`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T14:40:42Z 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-08T14:40:42Z
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-delivery, 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.034s
ok github.com/novox/mesh-controller/cmd/mesh-controller 152.537s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.020s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.014s
ok github.com/novox/mesh-controller/examples/route-proxy 1.112s
ok github.com/novox/mesh-controller/internal/artifacts 1.055s
ok github.com/novox/mesh-controller/internal/broker 2.457s
ok github.com/novox/mesh-controller/internal/builder 1.793s
ok github.com/novox/mesh-controller/internal/catalogue 4.043s
ok github.com/novox/mesh-controller/internal/conditions 2.190s
ok github.com/novox/mesh-controller/internal/envfile 1.056s
ok github.com/novox/mesh-controller/internal/facts 1.059s
ok github.com/novox/mesh-controller/internal/identity 4.073s
ok github.com/novox/mesh-controller/internal/inventory 69.813s
ok github.com/novox/mesh-controller/internal/lease 17.696s
ok github.com/novox/mesh-controller/internal/licences 3.725s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.063s
ok github.com/novox/mesh-controller/internal/link 43.714s
ok github.com/novox/mesh-controller/internal/lint 1.945s
ok github.com/novox/mesh-controller/internal/outward 1.077s
ok github.com/novox/mesh-controller/internal/overlay 1.076s
ok github.com/novox/mesh-controller/internal/secrets 1.449s
ok github.com/novox/mesh-controller/internal/store 3.308s
ok github.com/novox/mesh-controller/internal/testbus 1.188s
ok github.com/novox/mesh-controller/internal/token 1.015s
```
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…
The backlog is held after any failed walk, not only a release, and a check is a pull
request's status; the words said the last release failed its check.
Review follow-up (298ec06): the held-updates explanation now ends "…wait for a person to release them, because the last walk failed." In the glossary a check is a pull request's status, and the backlog is held after any failed walk, not only a release. TestUpdatesHeldSayTheWalkFailed covers both the raised words and the fallback: it requires "the last walk failed" and rejects "release failed" and "check". merge-check.sh passes locally.
Review follow-up (298ec06): the held-updates explanation now ends "…wait for a person to release them, because the last walk failed." In the glossary a check is a pull request's status, and the backlog is held after any failed walk, not only a release. `TestUpdatesHeldSayTheWalkFailed` covers both the raised words and the fallback: it requires "the last walk failed" and rejects "release failed" and "check". `merge-check.sh` passes locally.
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-1791471764593443311 (builds --log build-1791471764593443311).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T15:00:23Z 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-08T15:00:23Z
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-delivery, 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.034s
ok github.com/novox/mesh-controller/cmd/mesh-controller 183.236s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/route-proxy 1.191s
ok github.com/novox/mesh-controller/internal/artifacts 1.042s
ok github.com/novox/mesh-controller/internal/broker 2.365s
ok github.com/novox/mesh-controller/internal/builder 2.079s
ok github.com/novox/mesh-controller/internal/catalogue 3.907s
ok github.com/novox/mesh-controller/internal/conditions 2.120s
ok github.com/novox/mesh-controller/internal/envfile 1.024s
ok github.com/novox/mesh-controller/internal/facts 1.026s
ok github.com/novox/mesh-controller/internal/identity 4.301s
ok github.com/novox/mesh-controller/internal/inventory 75.746s
ok github.com/novox/mesh-controller/internal/lease 17.594s
ok github.com/novox/mesh-controller/internal/licences 3.941s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.011s
ok github.com/novox/mesh-controller/internal/link 47.244s
ok github.com/novox/mesh-controller/internal/lint 1.841s
ok github.com/novox/mesh-controller/internal/outward 1.042s
ok github.com/novox/mesh-controller/internal/overlay 1.026s
ok github.com/novox/mesh-controller/internal/secrets 1.397s
ok github.com/novox/mesh-controller/internal/store 3.153s
ok github.com/novox/mesh-controller/internal/testbus 1.167s
ok github.com/novox/mesh-controller/internal/token 1.019s
**Merge check** at `298ec06a`
- `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-1791471764593443311` (`builds --log build-1791471764593443311`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 51 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-08T15:00:23Z 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-08T15:00:23Z
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-delivery, 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.034s
ok github.com/novox/mesh-controller/cmd/mesh-controller 183.236s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.023s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/route-proxy 1.191s
ok github.com/novox/mesh-controller/internal/artifacts 1.042s
ok github.com/novox/mesh-controller/internal/broker 2.365s
ok github.com/novox/mesh-controller/internal/builder 2.079s
ok github.com/novox/mesh-controller/internal/catalogue 3.907s
ok github.com/novox/mesh-controller/internal/conditions 2.120s
ok github.com/novox/mesh-controller/internal/envfile 1.024s
ok github.com/novox/mesh-controller/internal/facts 1.026s
ok github.com/novox/mesh-controller/internal/identity 4.301s
ok github.com/novox/mesh-controller/internal/inventory 75.746s
ok github.com/novox/mesh-controller/internal/lease 17.594s
ok github.com/novox/mesh-controller/internal/licences 3.941s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.011s
ok github.com/novox/mesh-controller/internal/link 47.244s
ok github.com/novox/mesh-controller/internal/lint 1.841s
ok github.com/novox/mesh-controller/internal/outward 1.042s
ok github.com/novox/mesh-controller/internal/overlay 1.026s
ok github.com/novox/mesh-controller/internal/secrets 1.397s
ok github.com/novox/mesh-controller/internal/store 3.153s
ok github.com/novox/mesh-controller/internal/testbus 1.167s
ok github.com/novox/mesh-controller/internal/token 1.019s
```
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Why
The live condition
mesh.release.held(kindrelease-held) read "Needs you: release them, or leave them held. Some module updates wait for a person to release them…" on 2026-10-08. It named neither the modules nor the machines held, and lacked the ADR 0258 words that say where a release is given ("from the mesh MCP server; this notification cannot do it.").Change
backlogObservationwords the condition where it is raised (releaseHeldWords): the modules waiting and the machines they wait on, e.g. "Updates of openrazer wait for your release" / "Needs you: release them from the mesh MCP server; this notification cannot do it. Updates of openrazer on g14 and shanks wait for a person to release them, because the last release failed its check. They are not delivered until then, and stay held if you leave them." The machines go inAlso. The kind's fallback inplainWordingsuses the same function.controller-deaf,self-check-silent,watchdogs-silent) missed the same suffix and now carry it: ADR 0258 §1 says release, stop, start and restart are said in words with where to give them.Tests
TestUpdatesHeldNameWhatWaitsAndWhereItIsReleased: the raised words, held to the plain rule.TestANeedNoNotificationAnswersNamesTheMeshMCPServer: every wording inplainWordings(each subject shape, both severities) and the ones worded where raised (waiting walk, module restart, stalled delivery, held release) — when its need opens with a verb only the mesh MCP server performs (release, stop, start, restart, restore) and offers no action, it must end withFromMeshMCPServer. It would have caughtrelease-heldand the controller restarts. A need such as "check the disks of ace" is not held to it, because the mesh MCP server is not where that is done.merge-check.shpasses locally.Delivery
novox/mesh-controller@298ec06ae0aa— delivered since 2026-10-08T15:27:23ZDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
e33da2dcmesh/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 passedDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on ace as
build-1791470666353208340(builds --log build-1791470666353208340).Review follow-up (
298ec06): the held-updates explanation now ends "…wait for a person to release them, because the last walk failed." In the glossary a check is a pull request's status, and the backlog is held after any failed walk, not only a release.TestUpdatesHeldSayTheWalkFailedcovers both the raised words and the fallback: it requires "the last walk failed" and rejects "release failed" and "check".merge-check.shpasses locally.Merge check at
298ec06amesh/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 passedDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Run by the build seat on g14 as
build-1791471764593443311(builds --log build-1791471764593443311).