mesh-delivery-view places only its own command, not the shared /usr/local/bin (issue 1134) #2

Merged
mesh-tools merged 1 commits from fix/1134-cli-path into main 2026-10-18 22:45:09 +00:00
Member

Issue 1134, found by the merge gate after mesh-delivery #1 merged: 'mesh-cli and mesh-delivery-view both declare the path /usr/local/bin'. Two modules declaring the same path are refused when one node composes both (mesh-controller internal/catalogue/resolve.go:1128-1153), so the view could run on no machine that runs mesh-cli.

The view's cli archive now unpacks into its own directory, /usr/local/lib/mesh-delivery-view, and a file resource places only /usr/local/bin/mesh-delivery-cli, a small wrapper (files/mesh-delivery-cli) that execs the program there, as betterbird and claude-code do. The alias nox-delivery is unchanged. Test TestNoSharedDirectoryIsClaimed (1134/AC7) failed on the old manifest.

This merge is also the view's first build: mesh-controller #386 (delivered 00:35) asks the first builds of an approved merge into a repository nothing is built from (issue 1146), and the Approve registers them (ADR 0432). Try build-1792361659330665836 passed in 31 s.

Reviewed-by: reviewer-r12@shanks at 8a8cafd3db

Issue 1134, found by the merge gate after mesh-delivery #1 merged: 'mesh-cli and mesh-delivery-view both declare the path /usr/local/bin'. Two modules declaring the same path are refused when one node composes both (mesh-controller internal/catalogue/resolve.go:1128-1153), so the view could run on no machine that runs mesh-cli. The view's cli archive now unpacks into its own directory, /usr/local/lib/mesh-delivery-view, and a file resource places only /usr/local/bin/mesh-delivery-cli, a small wrapper (files/mesh-delivery-cli) that execs the program there, as betterbird and claude-code do. The alias nox-delivery is unchanged. Test TestNoSharedDirectoryIsClaimed (1134/AC7) failed on the old manifest. This merge is also the view's first build: mesh-controller #386 (delivered 00:35) asks the first builds of an approved merge into a repository nothing is built from (issue 1146), and the Approve registers them (ADR 0432). Try build-1792361659330665836 passed in 31 s. Reviewed-by: reviewer-r12@shanks at 8a8cafd3db98686262fe3eb82755855546ce55ec
mesh-tools added 1 commit 2026-10-18 22:41:00 +00:00
Place the view's command as one file in /usr/local/bin, not the directory mesh-cli declares (issue 1134)
mesh/merge-gate head 8a8cafd3db98 merged into trunk 0177ea7a7914 — pass: builds new: modules/mesh-delivery-view, sent nowhere; no bus step; every machine c…
mesh/repo-check head 8a8cafd3db98 merged into trunk 0177ea7a7914 — pass: its merge-check.sh passed
mesh/delivery delivered
8a8cafd3db
Author
Member

Delivery novox/mesh-delivery@8a8cafd3db98 — delivered since 2026-10-18T22:45:10Z

Delivery plan — builds new: modules/mesh-delivery-view, sent nowhere; no bus step

Transitions

  • 2026-10-18 22:41 (new) → proposed (announced): novox/mesh-delivery#2's head announced
  • 2026-10-18 22:43 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
  • 2026-10-18 22:43 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-18 22:45 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-18 22:45 published → delivered (done): nothing for a walk to move

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

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-delivery@8a8cafd3db98` — **delivered** since 2026-10-18T22:45:10Z **Delivery plan** — builds new: modules/mesh-delivery-view, sent nowhere; no bus step **Transitions** - 2026-10-18 22:41 (new) → proposed (announced): novox/mesh-delivery#2's head announced - 2026-10-18 22:43 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit - 2026-10-18 22:43 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-18 22:45 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-18 22:45 published → delivered (done): nothing for a walk to move The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
Author
Member

Merge check at 8a8cafd3
Judged: head 8a8cafd3db98 merged into trunk 0177ea7a7914; read beside it: mesh-catalog b4527d9091e9, mesh-controller cec26d859695, mesh-controller-main cec26d859695, mesh-host 89025ad004d4, mesh-tools 7412c5b6c9c5

  • mesh/merge-gate: PASS — every machine composes with the change as it did without (4 of 4 compose) (modules: new:modules/mesh-delivery-view)
  • mesh/repo-check: PASS — its merge-check.sh passed

Delivery plan — builds new: modules/mesh-delivery-view, sent nowhere; no bus step

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

--- the gate: new:modules/mesh-delivery-view
mesh-delivery-view: ok, reads mesh-controller.assignments, mesh-controller.builds, node-engine.have, ready: view by unit every 30s
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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-18T22:36:29Z says they run
composing every machine as the mesh is
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
composing every machine with the change
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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
HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus
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-18T22:36:29Z

modules the change moves:
  - mesh-delivery-view (added)

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-config, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-provisioner, 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 0 module(s) in 0 tier(s)
--- its merge-check.sh (go toolchain)
== ./modules/mesh-delivery-view: go vet and the unit tests
ok  	mesh-delivery-view	0.003s
ok  	mesh-delivery-view/cmd/mesh-delivery-cli	(cached)
ok  	mesh-delivery-view/cmd/mesh-delivery-view	(cached)
ok  	mesh-delivery-view/internal/view	(cached)
== ./modules/mesh-delivery-view: the integration tests (-tags integration)
ok  	mesh-delivery-view	0.003s
ok  	mesh-delivery-view/cmd/mesh-delivery-cli	(cached)
ok  	mesh-delivery-view/cmd/mesh-delivery-view	(cached)
ok  	mesh-delivery-view/internal/view	(cached)
**Merge check** at `8a8cafd3` Judged: head `8a8cafd3db98` merged into trunk `0177ea7a7914`; read beside it: mesh-catalog `b4527d9091e9`, mesh-controller `cec26d859695`, mesh-controller-main `cec26d859695`, mesh-host `89025ad004d4`, mesh-tools `7412c5b6c9c5` - `mesh/merge-gate`: **PASS** — every machine composes with the change as it did without (4 of 4 compose) (modules: new:modules/mesh-delivery-view) - `mesh/repo-check`: **PASS** — its merge-check.sh passed **Delivery plan** — builds new: modules/mesh-delivery-view, sent nowhere; no bus step Run by the build seat on ace as `build-1792363263862937480` (`builds --log build-1792363263862937480`). ``` --- the gate: new:modules/mesh-delivery-view mesh-delivery-view: ok, reads mesh-controller.assignments, mesh-controller.builds, node-engine.have, ready: view by unit every 30s 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 1 module(s) changed against 4 machine(s), as the snapshot of 2026-10-18T22:36:29Z says they run composing every machine as the mesh is HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus 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 HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus 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 HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus composing every machine with the change HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus 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 HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on idt; sealed by the controller until the vault holds it: mesh-provisioner-client — own/idt/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on ygcyr; sealed by the controller until the vault holds it: mesh-provisioner, mesh-provisioner-client, nats — own/ygcyr/mesh-provisioner/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus; own/ygcyr/nats/broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus 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 HELD: the vault did not answer for the core's credentials on yvbpsm; sealed by the controller until the vault holds it: mesh-provisioner-client — own/yvbpsm/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus HELD: the vault did not answer for the core's credentials on f35; sealed by the controller until the vault holds it: mesh-provisioner-client — own/f35/mesh-provisioner-client/provisioner-broker: this control plane has no MESH_BUS_NATS, so it cannot reach the mesh's bus 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-18T22:36:29Z modules the change moves: - mesh-delivery-view (added) 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-config, holds mesh-delivery, holds mesh-dns-resolver, holds mesh-provisioner, 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 0 module(s) in 0 tier(s) --- its merge-check.sh (go toolchain) == ./modules/mesh-delivery-view: go vet and the unit tests ok mesh-delivery-view 0.003s ok mesh-delivery-view/cmd/mesh-delivery-cli (cached) ok mesh-delivery-view/cmd/mesh-delivery-view (cached) ok mesh-delivery-view/internal/view (cached) == ./modules/mesh-delivery-view: the integration tests (-tags integration) ok mesh-delivery-view 0.003s ok mesh-delivery-view/cmd/mesh-delivery-cli (cached) ok mesh-delivery-view/cmd/mesh-delivery-view (cached) ok mesh-delivery-view/internal/view (cached) ```
mesh-tools merged commit 8ae804fe64 into main 2026-10-18 22:45:09 +00:00
mesh-tools deleted branch fix/1134-cli-path 2026-10-18 22:45:09 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-delivery#2