A machine that shares folders with the mesh, and a machine that mounts them, each get a role the mesh defines (hq ADR 0263, design 52; the operator chose one share per folder, mesh machines only, over the private network).
What
internal/catalogue/shares.go: NFSServerSeat (node-nfs-server) and MountsSeat (node-mounts), both node-scoped, delivering nothing (the provision nfs-share is provided at the mesh's scope by the nfs-server module; provisions need no controller registry), with their verbs.
seats.go: both added to the closed set after node-resolver. seats_test.go: the set is 40 (was 38).
shares_test.go: both seats exist at node scope under ADR 0263 with every verb required, described, schema'd and saying what it replaces; both adopt verbs require their path and are dry runs without confirm; a holder serving every verb holds the seat, one naming an extra verb, leaving adopt out, or claiming at mesh scope is refused.
Verbs
node-nfs-server: exports (exportfs -v, cat /etc/exports, zfs get sharenfs), clients (ss -tn sport = :2049, /proc/fs/nfsd/clients), test {share, node?} (showmount -e), reload (exportfs -ra), adopt {path, confirm, why} (zfs set sharenfs=off).
node-mounts: list (cat /etc/fstab, findmnt, systemctl list-units --type=mount), test {name} (showmount -e, ping), mount {name} (mount), unmount {name} (umount), adopt {mountpoint, confirm, why} (sed -i /etc/fstab).
Seeding adds the two rows on the next controller start (SeedSeats, insert-if-absent); nothing else in the controller lists seats.
Tests
sh merge-check.sh locally: gofmt clean, go vet clean, go test -race -count=1 ./... all packages ok.
**Not to be merged before review.**
A machine that shares folders with the mesh, and a machine that mounts them, each get a role the mesh defines (hq ADR 0263, design 52; the operator chose one share per folder, mesh machines only, over the private network).
## What
- `internal/catalogue/shares.go`: `NFSServerSeat` (`node-nfs-server`) and `MountsSeat` (`node-mounts`), both node-scoped, delivering nothing (the provision `nfs-share` is provided at the mesh's scope by the nfs-server module; provisions need no controller registry), with their verbs.
- `seats.go`: both added to the closed set after node-resolver. `seats_test.go`: the set is 40 (was 38).
- `shares_test.go`: both seats exist at node scope under ADR 0263 with every verb required, described, schema'd and saying what it replaces; both adopt verbs require their path and are dry runs without `confirm`; a holder serving every verb holds the seat, one naming an extra verb, leaving `adopt` out, or claiming at mesh scope is refused.
## Verbs
- `node-nfs-server`: `exports` (exportfs -v, cat /etc/exports, zfs get sharenfs), `clients` (ss -tn sport = :2049, /proc/fs/nfsd/clients), `test` {share, node?} (showmount -e), `reload` (exportfs -ra), `adopt` {path, confirm, why} (zfs set sharenfs=off).
- `node-mounts`: `list` (cat /etc/fstab, findmnt, systemctl list-units --type=mount), `test` {name} (showmount -e, ping), `mount` {name} (mount), `unmount` {name} (umount), `adopt` {mountpoint, confirm, why} (sed -i /etc/fstab).
Seeding adds the two rows on the next controller start (SeedSeats, insert-if-absent); nothing else in the controller lists seats.
## Tests
`sh merge-check.sh` locally: gofmt clean, go vet clean, `go test -race -count=1 ./...` all packages ok.
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…
A machine sharing folders and a machine mounting them each need one holder
per machine, with verbs an agent calls instead of exportfs, fstab edits or
zfs set. Both seats deliver nothing: nfs-share is provided at the mesh's
scope. The two adopt verbs are dry runs unless confirmed.
mesh-controller on novox: passed — healthy 3 times over 3m2s
mesh-controller on the rest running it: sent
build-agent on ace: passed — healthy 3 times over 3m36s
build-agent on the rest running it: sent
route-proxy on ace: passed — healthy 3 times over 3m32s
route-proxy on the rest running it: sent
Transitions
2026-10-08 18:12 (new) → proposed (announced): novox/mesh-controller#163's head announced
2026-10-08 18:16 proposed → checked (checked): the verdict names this commit
2026-10-08 18:16 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-08 18:39 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 18:39 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 19:07 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@d7fab82a8980` — **delivered** since 2026-10-08T19:07:18Z
**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
**Group** `feat/mounts-module`, in order: novox/hq@d05c9d7ca4c7 → novox/mesh-controller@d7fab82a8980 → novox/mesh-catalog@29ac6ee16a35
- novox/mesh-controller@d7fab82a8980 before novox/mesh-catalog@29ac6ee16a35: version skew
**Machines**
- mesh-controller on novox: passed — healthy 3 times over 3m2s
- mesh-controller on the rest running it: sent
- build-agent on ace: passed — healthy 3 times over 3m36s
- build-agent on the rest running it: sent
- route-proxy on ace: passed — healthy 3 times over 3m32s
- route-proxy on the rest running it: sent
**Transitions**
- 2026-10-08 18:12 (new) → proposed (announced): novox/mesh-controller#163's head announced
- 2026-10-08 18:16 proposed → checked (checked): the verdict names this commit
- 2026-10-08 18:16 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-08 18:39 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 18:39 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 19:07 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 novox as build-1791476709810894406 (builds --log build-1791476709810894406).
--- 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-08T16:16: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-08T16:16: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.041s
ok github.com/novox/mesh-controller/cmd/mesh-controller 207.144s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.141s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/route-proxy 1.454s
ok github.com/novox/mesh-controller/internal/artifacts 1.185s
ok github.com/novox/mesh-controller/internal/broker 4.389s
ok github.com/novox/mesh-controller/internal/builder 5.990s
ok github.com/novox/mesh-controller/internal/catalogue 4.927s
ok github.com/novox/mesh-controller/internal/conditions 2.563s
ok github.com/novox/mesh-controller/internal/envfile 1.141s
ok github.com/novox/mesh-controller/internal/facts 1.022s
ok github.com/novox/mesh-controller/internal/identity 6.434s
ok github.com/novox/mesh-controller/internal/inventory 93.370s
ok github.com/novox/mesh-controller/internal/lease 17.729s
ok github.com/novox/mesh-controller/internal/licences 5.726s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 48.176s
ok github.com/novox/mesh-controller/internal/lint 2.030s
ok github.com/novox/mesh-controller/internal/outward 1.041s
ok github.com/novox/mesh-controller/internal/overlay 1.028s
ok github.com/novox/mesh-controller/internal/secrets 1.492s
ok github.com/novox/mesh-controller/internal/store 3.385s
ok github.com/novox/mesh-controller/internal/testbus 1.203s
ok github.com/novox/mesh-controller/internal/token 1.027s
**Merge check** at `59fdffb9`
- `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 novox as `build-1791476709810894406` (`builds --log build-1791476709810894406`).
```
--- 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-08T16:16: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-08T16:16: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.041s
ok github.com/novox/mesh-controller/cmd/mesh-controller 207.144s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.017s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.141s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.018s
ok github.com/novox/mesh-controller/examples/route-proxy 1.454s
ok github.com/novox/mesh-controller/internal/artifacts 1.185s
ok github.com/novox/mesh-controller/internal/broker 4.389s
ok github.com/novox/mesh-controller/internal/builder 5.990s
ok github.com/novox/mesh-controller/internal/catalogue 4.927s
ok github.com/novox/mesh-controller/internal/conditions 2.563s
ok github.com/novox/mesh-controller/internal/envfile 1.141s
ok github.com/novox/mesh-controller/internal/facts 1.022s
ok github.com/novox/mesh-controller/internal/identity 6.434s
ok github.com/novox/mesh-controller/internal/inventory 93.370s
ok github.com/novox/mesh-controller/internal/lease 17.729s
ok github.com/novox/mesh-controller/internal/licences 5.726s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 48.176s
ok github.com/novox/mesh-controller/internal/lint 2.030s
ok github.com/novox/mesh-controller/internal/outward 1.041s
ok github.com/novox/mesh-controller/internal/overlay 1.028s
ok github.com/novox/mesh-controller/internal/secrets 1.492s
ok github.com/novox/mesh-controller/internal/store 3.385s
ok github.com/novox/mesh-controller/internal/testbus 1.203s
ok github.com/novox/mesh-controller/internal/token 1.027s
```
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…
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-1791477285788664785 (builds --log build-1791477285788664785).
--- 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-08T16:26: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-08T16:26: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 180.036s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/route-proxy 1.121s
ok github.com/novox/mesh-controller/internal/artifacts 1.099s
ok github.com/novox/mesh-controller/internal/broker 2.560s
ok github.com/novox/mesh-controller/internal/builder 1.916s
ok github.com/novox/mesh-controller/internal/catalogue 4.359s
ok github.com/novox/mesh-controller/internal/conditions 2.235s
ok github.com/novox/mesh-controller/internal/envfile 1.055s
ok github.com/novox/mesh-controller/internal/facts 1.082s
ok github.com/novox/mesh-controller/internal/identity 4.365s
ok github.com/novox/mesh-controller/internal/inventory 77.469s
ok github.com/novox/mesh-controller/internal/lease 17.620s
ok github.com/novox/mesh-controller/internal/licences 3.988s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.050s
ok github.com/novox/mesh-controller/internal/link 44.945s
ok github.com/novox/mesh-controller/internal/lint 2.058s
ok github.com/novox/mesh-controller/internal/outward 1.079s
ok github.com/novox/mesh-controller/internal/overlay 1.070s
ok github.com/novox/mesh-controller/internal/secrets 1.466s
ok github.com/novox/mesh-controller/internal/store 3.405s
ok github.com/novox/mesh-controller/internal/testbus 1.259s
ok github.com/novox/mesh-controller/internal/token 1.018s
**Merge check** at `2b01f878`
- `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-1791477285788664785` (`builds --log build-1791477285788664785`).
```
--- 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-08T16:26: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-08T16:26: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 180.036s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.016s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/route-proxy 1.121s
ok github.com/novox/mesh-controller/internal/artifacts 1.099s
ok github.com/novox/mesh-controller/internal/broker 2.560s
ok github.com/novox/mesh-controller/internal/builder 1.916s
ok github.com/novox/mesh-controller/internal/catalogue 4.359s
ok github.com/novox/mesh-controller/internal/conditions 2.235s
ok github.com/novox/mesh-controller/internal/envfile 1.055s
ok github.com/novox/mesh-controller/internal/facts 1.082s
ok github.com/novox/mesh-controller/internal/identity 4.365s
ok github.com/novox/mesh-controller/internal/inventory 77.469s
ok github.com/novox/mesh-controller/internal/lease 17.620s
ok github.com/novox/mesh-controller/internal/licences 3.988s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.050s
ok github.com/novox/mesh-controller/internal/link 44.945s
ok github.com/novox/mesh-controller/internal/lint 2.058s
ok github.com/novox/mesh-controller/internal/outward 1.079s
ok github.com/novox/mesh-controller/internal/overlay 1.070s
ok github.com/novox/mesh-controller/internal/secrets 1.466s
ok github.com/novox/mesh-controller/internal/store 3.405s
ok github.com/novox/mesh-controller/internal/testbus 1.259s
ok github.com/novox/mesh-controller/internal/token 1.018s
```
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…
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-1791483125141242288 (builds --log build-1791483125141242288).
--- 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-08T18:08:48Z 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-08T18:08:48Z
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.033s
ok github.com/novox/mesh-controller/cmd/mesh-controller 161.482s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.020s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.011s
ok github.com/novox/mesh-controller/examples/route-proxy 1.111s
ok github.com/novox/mesh-controller/internal/artifacts 1.037s
ok github.com/novox/mesh-controller/internal/broker 2.444s
ok github.com/novox/mesh-controller/internal/builder 1.810s
ok github.com/novox/mesh-controller/internal/catalogue 4.106s
ok github.com/novox/mesh-controller/internal/conditions 2.200s
ok github.com/novox/mesh-controller/internal/envfile 1.042s
ok github.com/novox/mesh-controller/internal/facts 1.048s
ok github.com/novox/mesh-controller/internal/identity 4.120s
ok github.com/novox/mesh-controller/internal/inventory 71.633s
ok github.com/novox/mesh-controller/internal/lease 17.715s
ok github.com/novox/mesh-controller/internal/licences 3.755s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.072s
ok github.com/novox/mesh-controller/internal/link 43.869s
ok github.com/novox/mesh-controller/internal/lint 1.939s
ok github.com/novox/mesh-controller/internal/outward 1.102s
ok github.com/novox/mesh-controller/internal/overlay 1.053s
ok github.com/novox/mesh-controller/internal/secrets 1.415s
ok github.com/novox/mesh-controller/internal/store 3.257s
ok github.com/novox/mesh-controller/internal/testbus 1.207s
ok github.com/novox/mesh-controller/internal/token 1.016s
**Merge check** at `d7fab82a`
- `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-1791483125141242288` (`builds --log build-1791483125141242288`).
```
--- 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-08T18:08:48Z 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-08T18:08:48Z
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.033s
ok github.com/novox/mesh-controller/cmd/mesh-controller 161.482s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.012s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.020s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.011s
ok github.com/novox/mesh-controller/examples/route-proxy 1.111s
ok github.com/novox/mesh-controller/internal/artifacts 1.037s
ok github.com/novox/mesh-controller/internal/broker 2.444s
ok github.com/novox/mesh-controller/internal/builder 1.810s
ok github.com/novox/mesh-controller/internal/catalogue 4.106s
ok github.com/novox/mesh-controller/internal/conditions 2.200s
ok github.com/novox/mesh-controller/internal/envfile 1.042s
ok github.com/novox/mesh-controller/internal/facts 1.048s
ok github.com/novox/mesh-controller/internal/identity 4.120s
ok github.com/novox/mesh-controller/internal/inventory 71.633s
ok github.com/novox/mesh-controller/internal/lease 17.715s
ok github.com/novox/mesh-controller/internal/licences 3.755s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.072s
ok github.com/novox/mesh-controller/internal/link 43.869s
ok github.com/novox/mesh-controller/internal/lint 1.939s
ok github.com/novox/mesh-controller/internal/outward 1.102s
ok github.com/novox/mesh-controller/internal/overlay 1.053s
ok github.com/novox/mesh-controller/internal/secrets 1.415s
ok github.com/novox/mesh-controller/internal/store 3.257s
ok github.com/novox/mesh-controller/internal/testbus 1.207s
ok github.com/novox/mesh-controller/internal/token 1.016s
```
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.
Not to be merged before review.
A machine that shares folders with the mesh, and a machine that mounts them, each get a role the mesh defines (hq ADR 0263, design 52; the operator chose one share per folder, mesh machines only, over the private network).
What
internal/catalogue/shares.go:NFSServerSeat(node-nfs-server) andMountsSeat(node-mounts), both node-scoped, delivering nothing (the provisionnfs-shareis provided at the mesh's scope by the nfs-server module; provisions need no controller registry), with their verbs.seats.go: both added to the closed set after node-resolver.seats_test.go: the set is 40 (was 38).shares_test.go: both seats exist at node scope under ADR 0263 with every verb required, described, schema'd and saying what it replaces; both adopt verbs require their path and are dry runs withoutconfirm; a holder serving every verb holds the seat, one naming an extra verb, leavingadoptout, or claiming at mesh scope is refused.Verbs
node-nfs-server:exports(exportfs -v, cat /etc/exports, zfs get sharenfs),clients(ss -tn sport = :2049, /proc/fs/nfsd/clients),test{share, node?} (showmount -e),reload(exportfs -ra),adopt{path, confirm, why} (zfs set sharenfs=off).node-mounts:list(cat /etc/fstab, findmnt, systemctl list-units --type=mount),test{name} (showmount -e, ping),mount{name} (mount),unmount{name} (umount),adopt{mountpoint, confirm, why} (sed -i /etc/fstab).Seeding adds the two rows on the next controller start (SeedSeats, insert-if-absent); nothing else in the controller lists seats.
Tests
sh merge-check.shlocally: gofmt clean, go vet clean,go test -race -count=1 ./...all packages ok.Delivery
novox/mesh-controller@d7fab82a8980— delivered since 2026-10-08T19:07:18ZDelivery plan — builds build-agent, mesh-controller, route-proxy → ace, g14, novox, shanks; no bus step
Group
feat/mounts-module, in order: novox/hq@d05c9d7ca4 → novox/mesh-controller@d7fab82a89 → novox/mesh-catalog@29ac6ee16aMachines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Merge check at
59fdffb9mesh/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 novox as
build-1791476709810894406(builds --log build-1791476709810894406).Merge check at
2b01f878mesh/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-1791477285788664785(builds --log build-1791477285788664785).Merge check at
d7fab82amesh/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-1791483125141242288(builds --log build-1791483125141242288).