mesh-cli: build on the SDK that reads the engine's refusal after a failed write (hq issue 444) #198

Merged
mesh-admin merged 1 commits from fix/444-mesh-cli-hears-the-refusal into main 2026-10-11 01:04:53 +00:00
Contributor

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-admin added 1 commit 2026-10-11 00:57:09 +00:00
mesh-cli: build on the SDK that reads the engine's refusal after a failed write, so a caller hears busy, not broken pipe (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)
mesh/repo-check pass: its merge-check.sh passed, each part in its toolchain: merge-check.sh (go), merge-check-typescript.sh (typescript)
mesh/delivery delivered
4870c9171e
Author
Contributor

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-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`.
Author
Contributor

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)
**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) ```
mesh-admin merged commit ebd940fcd0 into main 2026-10-11 01:04:53 +00:00
mesh-admin deleted branch fix/444-mesh-cli-hears-the-refusal 2026-10-11 01:04:53 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-catalog#198