A module's accounts are composed before everything else of the module (issue 213), so a file owned by the account finds it made. An account a module declares only to put in its daemon's group (no shell, home or lingering) would then be put in a group whose package is not installed yet: the first apply fails that resource, the second heals it.
accountsFirst now leaves such an account where the module wrote it, after the package that makes the group. An account that sets a shell or home still goes first.
Also corrects the comment in checkResources: the node-engine now takes back a group it added, when nothing declared still asks for it (mesh-host #54).
Test: TestAnAccountOnlyGivenGroupsKeepsItsWrittenPlace in internal/catalogue/shared_account_test.go. merge-check.sh passes locally (without a test store).
A module's accounts are composed before everything else of the module (issue 213), so a file owned by the account finds it made. An account a module declares only to put in its daemon's group (no shell, home or lingering) would then be put in a group whose package is not installed yet: the first apply fails that resource, the second heals it.
`accountsFirst` now leaves such an account where the module wrote it, after the package that makes the group. An account that sets a shell or home still goes first.
Also corrects the comment in `checkResources`: the node-engine now takes back a group it added, when nothing declared still asks for it (mesh-host #54).
Test: `TestAnAccountOnlyGivenGroupsKeepsItsWrittenPlace` in `internal/catalogue/shared_account_test.go`. `merge-check.sh` passes locally (without a test store).
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: judging — 0 healthy judging(s) so far
Transitions
2026-10-08 10:04 (new) → proposed (announced): novox/mesh-controller#139's head announced
2026-10-08 10:10 proposed → checked (checked): the verdict names this commit
2026-10-08 10:10 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-08 11:05 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 11:05 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 11:05 delivering → superseded (superseded): a newer delivery to the same trunk took over its walk
The commit's note under refs/notes/mesh-plan keeps every transition: git log --notes=mesh-plan.
<!-- mesh-delivery:view -->
**Delivery** `novox/mesh-controller@c43277f9c6e3` — **superseded** since 2026-10-08T11:05:46Z
**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: judging — 0 healthy judging(s) so far
**Transitions**
- 2026-10-08 10:04 (new) → proposed (announced): novox/mesh-controller#139's head announced
- 2026-10-08 10:10 proposed → checked (checked): the verdict names this commit
- 2026-10-08 10:10 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-08 11:05 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 11:05 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 11:05 delivering → superseded (superseded): a newer delivery to the same trunk took over its walk
The commit's note under `refs/notes/mesh-plan` keeps every transition: `git log --notes=mesh-plan`.
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…
Composed first, an account a module puts in its daemon's group was put in a group the package
had not made yet, and only the next apply healed it. An account that sets a shell or home still
goes first (issue 213).
mesh-admin
changed title from Compose an account given only groups where its module wrote it (hq ADR 0251, issue 247) to Compose an account given only groups where its module wrote it (hq ADR 0252, issue 247)2026-10-08 10:04:36 +00:00
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 shanks as build-1791453792006487527 (builds --log build-1791453792006487527).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 47 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-08T09:54:03Z 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-08T09:54:03Z
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 158.810s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.048s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.064s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.060s
ok github.com/novox/mesh-controller/examples/route-proxy 1.213s
ok github.com/novox/mesh-controller/internal/artifacts 1.081s
ok github.com/novox/mesh-controller/internal/broker 2.656s
ok github.com/novox/mesh-controller/internal/builder 1.844s
ok github.com/novox/mesh-controller/internal/catalogue 4.775s
ok github.com/novox/mesh-controller/internal/conditions 2.052s
ok github.com/novox/mesh-controller/internal/envfile 1.054s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 4.754s
ok github.com/novox/mesh-controller/internal/inventory 79.003s
ok github.com/novox/mesh-controller/internal/lease 17.715s
ok github.com/novox/mesh-controller/internal/licences 4.312s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.053s
ok github.com/novox/mesh-controller/internal/link 45.121s
ok github.com/novox/mesh-controller/internal/lint 2.049s
ok github.com/novox/mesh-controller/internal/outward 1.080s
ok github.com/novox/mesh-controller/internal/overlay 1.067s
ok github.com/novox/mesh-controller/internal/secrets 1.530s
ok github.com/novox/mesh-controller/internal/store 3.484s
ok github.com/novox/mesh-controller/internal/testbus 1.252s
ok github.com/novox/mesh-controller/internal/token 1.015s
**Merge check** at `dcd131f5`
- `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 shanks as `build-1791453792006487527` (`builds --log build-1791453792006487527`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 47 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-08T09:54:03Z 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-08T09:54:03Z
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 158.810s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.048s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.064s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.060s
ok github.com/novox/mesh-controller/examples/route-proxy 1.213s
ok github.com/novox/mesh-controller/internal/artifacts 1.081s
ok github.com/novox/mesh-controller/internal/broker 2.656s
ok github.com/novox/mesh-controller/internal/builder 1.844s
ok github.com/novox/mesh-controller/internal/catalogue 4.775s
ok github.com/novox/mesh-controller/internal/conditions 2.052s
ok github.com/novox/mesh-controller/internal/envfile 1.054s
ok github.com/novox/mesh-controller/internal/facts 1.065s
ok github.com/novox/mesh-controller/internal/identity 4.754s
ok github.com/novox/mesh-controller/internal/inventory 79.003s
ok github.com/novox/mesh-controller/internal/lease 17.715s
ok github.com/novox/mesh-controller/internal/licences 4.312s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.053s
ok github.com/novox/mesh-controller/internal/link 45.121s
ok github.com/novox/mesh-controller/internal/lint 2.049s
ok github.com/novox/mesh-controller/internal/outward 1.080s
ok github.com/novox/mesh-controller/internal/overlay 1.067s
ok github.com/novox/mesh-controller/internal/secrets 1.530s
ok github.com/novox/mesh-controller/internal/store 3.484s
ok github.com/novox/mesh-controller/internal/testbus 1.252s
ok github.com/novox/mesh-controller/internal/token 1.015s
```
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-1791453885892385900 (builds --log build-1791453885892385900).
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 47 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-08T10:04:03Z 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-08T10:04:03Z
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.044s
ok github.com/novox/mesh-controller/cmd/mesh-controller 177.116s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.021s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.028s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.026s
ok github.com/novox/mesh-controller/examples/route-proxy 1.119s
ok github.com/novox/mesh-controller/internal/artifacts 1.048s
ok github.com/novox/mesh-controller/internal/broker 2.689s
ok github.com/novox/mesh-controller/internal/builder 2.497s
ok github.com/novox/mesh-controller/internal/catalogue 5.012s
ok github.com/novox/mesh-controller/internal/conditions 2.087s
ok github.com/novox/mesh-controller/internal/envfile 1.029s
ok github.com/novox/mesh-controller/internal/facts 1.028s
ok github.com/novox/mesh-controller/internal/identity 5.004s
ok github.com/novox/mesh-controller/internal/inventory 86.336s
ok github.com/novox/mesh-controller/internal/lease 17.673s
ok github.com/novox/mesh-controller/internal/licences 4.559s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 45.838s
ok github.com/novox/mesh-controller/internal/lint 2.105s
ok github.com/novox/mesh-controller/internal/outward 1.040s
ok github.com/novox/mesh-controller/internal/overlay 1.026s
ok github.com/novox/mesh-controller/internal/secrets 1.495s
ok github.com/novox/mesh-controller/internal/store 3.412s
ok github.com/novox/mesh-controller/internal/testbus 1.202s
ok github.com/novox/mesh-controller/internal/token 1.016s
**Merge check** at `c43277f9`
- `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-1791453885892385900` (`builds --log build-1791453885892385900`).
```
--- the gate: build-agent, mesh-controller, route-proxy
mesh-controller: ok, 47 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-08T10:04:03Z 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-08T10:04:03Z
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.044s
ok github.com/novox/mesh-controller/cmd/mesh-controller 177.116s
ok github.com/novox/mesh-controller/examples/objectstore-provisioner 1.021s
ok github.com/novox/mesh-controller/examples/postgres-provisioner 1.028s
ok github.com/novox/mesh-controller/examples/redis-provisioner 1.026s
ok github.com/novox/mesh-controller/examples/route-proxy 1.119s
ok github.com/novox/mesh-controller/internal/artifacts 1.048s
ok github.com/novox/mesh-controller/internal/broker 2.689s
ok github.com/novox/mesh-controller/internal/builder 2.497s
ok github.com/novox/mesh-controller/internal/catalogue 5.012s
ok github.com/novox/mesh-controller/internal/conditions 2.087s
ok github.com/novox/mesh-controller/internal/envfile 1.029s
ok github.com/novox/mesh-controller/internal/facts 1.028s
ok github.com/novox/mesh-controller/internal/identity 5.004s
ok github.com/novox/mesh-controller/internal/inventory 86.336s
ok github.com/novox/mesh-controller/internal/lease 17.673s
ok github.com/novox/mesh-controller/internal/licences 4.559s
ok github.com/novox/mesh-controller/internal/licences/adapters 1.012s
ok github.com/novox/mesh-controller/internal/link 45.838s
ok github.com/novox/mesh-controller/internal/lint 2.105s
ok github.com/novox/mesh-controller/internal/outward 1.040s
ok github.com/novox/mesh-controller/internal/overlay 1.026s
ok github.com/novox/mesh-controller/internal/secrets 1.495s
ok github.com/novox/mesh-controller/internal/store 3.412s
ok github.com/novox/mesh-controller/internal/testbus 1.202s
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.
A module's accounts are composed before everything else of the module (issue 213), so a file owned by the account finds it made. An account a module declares only to put in its daemon's group (no shell, home or lingering) would then be put in a group whose package is not installed yet: the first apply fails that resource, the second heals it.
accountsFirstnow leaves such an account where the module wrote it, after the package that makes the group. An account that sets a shell or home still goes first.Also corrects the comment in
checkResources: the node-engine now takes back a group it added, when nothing declared still asks for it (mesh-host #54).Test:
TestAnAccountOnlyGivenGroupsKeepsItsWrittenPlaceininternal/catalogue/shared_account_test.go.merge-check.shpasses locally (without a test store).Delivery
novox/mesh-controller@c43277f9c6e3— superseded since 2026-10-08T11:05:46ZDelivery 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.dcd131f5f9toc43277f9c6Compose an account given only groups where its module wrote it (hq ADR 0251, issue 247)to Compose an account given only groups where its module wrote it (hq ADR 0252, issue 247)Merge check at
dcd131f5mesh/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 shanks as
build-1791453792006487527(builds --log build-1791453792006487527).Merge check at
c43277f9mesh/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-1791453885892385900(builds --log build-1791453885892385900).