Issue 444 in novox/hq: when mesh-cli's request write failed, the client gave up without reading the refusal the node-engine had already written. A caller over the engine's bound then heard "broken pipe" instead of "busy". The fix is in mesh-sdk #19 (merge ee1e1a83, go/cli/cli.go, cli.AskWith). It reaches nobody until mesh-cli is built on it.
Change:modules/mesh-cli raises git.novox.be/novox/mesh-sdk/go from v0.1.11-0.20261009143344-f047d0a4a970 to v0.1.14-0.20261011005601-ee1e1a830347 (the merge commit). Only go.mod and go.sum change. The module does not vendor, and the SDK's own go.mod is unchanged (same go.sum hash), so no new dependencies come in.
What else the bump brings in: these SDK commits on go/ fall between the old pin and the new one:
24f5ee8, b4900f5: the issue 444 fix in go/cli. After a failed write, the client reads the answer and passes it on only when it is a refusal. Otherwise it reports the write error together with why no answer came.
c58ce2c, 9c54875: KeptState.Increment in the root package (hq research 042).
4f3efc9: asks.Ask gains Whole and Details (hq issue 383). The digest is unchanged for an ask without them.
622b6b4, 33917f9: a new package, go/health (hq ADR 0283, issue 386).
mesh-cli imports only go/cli, so the 444 fix is the only one of these that changes how mesh-cli behaves.
Tests: in modules/mesh-cli, go vet ./... is clean and go test ./... -count=1 passes. The catalogue's words check passes (none in 39428 strings of 654 files). The new client behaviour is covered by go/cli/refusal_test.go in mesh-sdk.
Machines: mesh-cli is the operator's command on every node (hq ADR 0272), so a merge rebuilds the mesh-cli bundle and places the new /usr/local/bin/mesh-cli on every node. mesh/merge-gate names the exact nodes.
Refs novox/hq issue 444.
Issue 444 in novox/hq: when mesh-cli's request write failed, the client gave up without reading the refusal the node-engine had already written. A caller over the engine's bound then heard "broken pipe" instead of "busy". The fix is in mesh-sdk #19 (merge ee1e1a83, `go/cli/cli.go`, `cli.AskWith`). It reaches nobody until mesh-cli is built on it.
**Change:** `modules/mesh-cli` raises `git.novox.be/novox/mesh-sdk/go` from `v0.1.11-0.20261009143344-f047d0a4a970` to `v0.1.14-0.20261011005601-ee1e1a830347` (the merge commit). Only go.mod and go.sum change. The module does not vendor, and the SDK's own go.mod is unchanged (same go.sum hash), so no new dependencies come in.
**What else the bump brings in:** these SDK commits on `go/` fall between the old pin and the new one:
- 24f5ee8, b4900f5: the issue 444 fix in `go/cli`. After a failed write, the client reads the answer and passes it on only when it is a refusal. Otherwise it reports the write error together with why no answer came.
- c58ce2c, 9c54875: `KeptState.Increment` in the root package (hq research 042).
- 4f3efc9: `asks.Ask` gains `Whole` and `Details` (hq issue 383). The digest is unchanged for an ask without them.
- 622b6b4, 33917f9: a new package, `go/health` (hq ADR 0283, issue 386).
mesh-cli imports only `go/cli`, so the 444 fix is the only one of these that changes how mesh-cli behaves.
**Tests:** in modules/mesh-cli, `go vet ./...` is clean and `go test ./... -count=1` passes. The catalogue's words check passes (none in 39428 strings of 654 files). The new client behaviour is covered by `go/cli/refusal_test.go` in mesh-sdk.
**Machines:** mesh-cli is the operator's command on every node (hq ADR 0272), so a merge rebuilds the mesh-cli bundle and places the new `/usr/local/bin/mesh-cli` on every node. `mesh/merge-gate` names the exact nodes.
Refs novox/hq issue 444.
mesh/merge-gate pass: builds mesh-cli → ace, g14, novox, shanks; no bus step; every machine composes with the change as it did without (4 of 4 compose)
Deliverynovox/mesh-catalog@4870c9171e6e — delivered since 2026-10-11T01:21:17Z
Delivery plan — builds mesh-cli → ace, g14, novox, shanks; no bus step
tier 0: mesh-cli
ace: receives mesh-cli
g14: receives mesh-cli
novox: receives mesh-cli
shanks: receives mesh-cli
Machines
build-agent on ace: passed — carried by plan-1791680682337359832
mesh-cli on ace: passed — healthy 3 times over 2m28s
mesh-cli on the rest running it: sent
Transitions
2026-10-11 00:57 (new) → proposed (announced): novox/mesh-catalog#198's head announced
2026-10-11 00:59 proposed → checked (checked): the verdict names this commit
2026-10-11 00:59 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-11 01:17 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-11 01:17 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-11 01:21 delivering → delivered (done): its walk is done, carrying its own commit: 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-catalog@4870c9171e6e` — **delivered** since 2026-10-11T01:21:17Z
**Delivery plan** — builds mesh-cli → ace, g14, novox, shanks; no bus step
- tier 0: mesh-cli
- ace: receives mesh-cli
- g14: receives mesh-cli
- novox: receives mesh-cli
- shanks: receives mesh-cli
**Machines**
- build-agent on ace: passed — carried by plan-1791680682337359832
- mesh-cli on ace: passed — healthy 3 times over 2m28s
- mesh-cli on the rest running it: sent
**Transitions**
- 2026-10-11 00:57 (new) → proposed (announced): novox/mesh-catalog#198's head announced
- 2026-10-11 00:59 proposed → checked (checked): the verdict names this commit
- 2026-10-11 00:59 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-11 01:17 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-11 01:17 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-11 01:21 delivering → delivered (done): its walk is done, carrying its own commit: 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/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-cli)
mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
Delivery plan — builds mesh-cli → ace, g14, novox, shanks; no bus step
tier 0: mesh-cli
ace: receives mesh-cli
g14: receives mesh-cli
novox: receives mesh-cli
shanks: receives mesh-cli
Run by the build seat on g14 as build-1791680241179121142 (builds --log build-1791680241179121142).
--- the gate: mesh-cli
mesh-cli: ok
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
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-11T00:51:25Z 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-11T00:51:25Z
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 1 module(s) in 1 tier(s): mesh-cli
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.003s
words: 12 retired words and 70 daemons' lines, none in the 39428 strings of 654 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.009s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/paths 0.005s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 69, as kept
testing modules/mesh-cli
ok mesh-cli/cmd/mesh-cli 1.015s
--- its merge-check-typescript.sh (typescript toolchain)
**Merge check** at `4870c917`
- `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-cli)
- `mesh/repo-check`: **PASS** — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
**Delivery plan** — builds mesh-cli → ace, g14, novox, shanks; no bus step
- tier 0: mesh-cli
- ace: receives mesh-cli
- g14: receives mesh-cli
- novox: receives mesh-cli
- shanks: receives mesh-cli
Run by the build seat on g14 as `build-1791680241179121142` (`builds --log build-1791680241179121142`).
```
--- the gate: mesh-cli
mesh-cli: ok
long-running resources without health: 0
files asking for a setting without saying whether it is trusted: 0
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-11T00:51:25Z 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-11T00:51:25Z
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 1 module(s) in 1 tier(s): mesh-cli
--- its merge-check.sh (go toolchain)
ok git.novox.be/novox/mesh-catalog/checks/words 0.003s
words: 12 retired words and 70 daemons' lines, none in the 39428 strings of 654 files
ok git.novox.be/novox/mesh-catalog/checks/agenthome 0.009s
agent-home: no archive and no file written into under the agent's home
ok git.novox.be/novox/mesh-catalog/checks/paths 0.005s
paths: no module names another's state on its machine (3 known, listed to go)
long-running resources without health: 69, as kept
testing modules/mesh-cli
ok mesh-cli/cmd/mesh-cli 1.015s
--- its merge-check-typescript.sh (typescript toolchain)
```
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.
Issue 444 in novox/hq: when mesh-cli's request write failed, the client gave up without reading the refusal the node-engine had already written. A caller over the engine's bound then heard "broken pipe" instead of "busy". The fix is in mesh-sdk #19 (merge ee1e1a83,
go/cli/cli.go,cli.AskWith). It reaches nobody until mesh-cli is built on it.Change:
modules/mesh-cliraisesgit.novox.be/novox/mesh-sdk/gofromv0.1.11-0.20261009143344-f047d0a4a970tov0.1.14-0.20261011005601-ee1e1a830347(the merge commit). Only go.mod and go.sum change. The module does not vendor, and the SDK's own go.mod is unchanged (same go.sum hash), so no new dependencies come in.What else the bump brings in: these SDK commits on
go/fall between the old pin and the new one:go/cli. After a failed write, the client reads the answer and passes it on only when it is a refusal. Otherwise it reports the write error together with why no answer came.KeptState.Incrementin the root package (hq research 042).asks.AskgainsWholeandDetails(hq issue 383). The digest is unchanged for an ask without them.go/health(hq ADR 0283, issue 386).mesh-cli imports only
go/cli, so the 444 fix is the only one of these that changes how mesh-cli behaves.Tests: in modules/mesh-cli,
go vet ./...is clean andgo test ./... -count=1passes. The catalogue's words check passes (none in 39428 strings of 654 files). The new client behaviour is covered bygo/cli/refusal_test.goin mesh-sdk.Machines: mesh-cli is the operator's command on every node (hq ADR 0272), so a merge rebuilds the mesh-cli bundle and places the new
/usr/local/bin/mesh-clion every node.mesh/merge-gatenames the exact nodes.Refs novox/hq issue 444.
Delivery
novox/mesh-catalog@4870c9171e6e— delivered since 2026-10-11T01:21:17ZDelivery plan — builds mesh-cli → 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
4870c917mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: mesh-cli)mesh/repo-check: PASS — its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)Delivery plan — builds mesh-cli → ace, g14, novox, shanks; no bus step
Run by the build seat on g14 as
build-1791680241179121142(builds --log build-1791680241179121142).