The installer's first user list (examples/foundation-first-node.lock, the bus-accounts seed) lets the controller publish two more buckets and two more events: $KV.mesh-controller_assignments.>, $KV.mesh-controller_declared-config.>, mesh.seat.mesh-controller.event.assignment-changed and mesh.seat.mesh-controller.event.declared-config-changed.
Why
Package F3 of design 57 (hq issue 652) makes the controller keep the assignments and each registered module's declared config on the bus as two record mirrors (ADR 0289, design 54). Its composed grant gains exactly these four subjects. mesh-controller's TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose holds this seed equal to that composition in both directions: narrower, the controller is refused at genesis; wider, genesis grants what the first push takes away.
Companion: mesh-controller pull request for the same package (branch pkg/57-f3-assignment-buckets), which captures this commit (c8920622) in testdata/beside. Merge the two together.
How it is proven
mesh-controller internal/brokerTestTheInstallersFirstUserListIsWhatTheControllerWouldCompose passes against this file (captured there).
sh merge-check.sh here: exit 0 (gofmt, go vet, every test; ./examples and ./internal/bootstrap included).
Reviewer's checklist
Does what issue 652 needs of this repository and nothing else: one line of one seed file. Yes.
Proof: the controller's genesis template test fails without this line and passes with it.
Nothing changes what composes for a module: no module's grant moves; only the controller's genesis seed.
No secret: the hash is the existing bootstrap one, unchanged. No database change.
No new manifest or declaration field.
gofmt, go vet, go test ./... via merge-check.sh: pass.
Words: record mirror (glossary), assignment, declared config.
## What changed
The installer's first user list (`examples/foundation-first-node.lock`, the `bus-accounts` seed) lets the controller publish two more buckets and two more events: `$KV.mesh-controller_assignments.>`, `$KV.mesh-controller_declared-config.>`, `mesh.seat.mesh-controller.event.assignment-changed` and `mesh.seat.mesh-controller.event.declared-config-changed`.
## Why
Package F3 of design 57 (hq issue 652) makes the controller keep the assignments and each registered module's declared config on the bus as two record mirrors (ADR 0289, design 54). Its composed grant gains exactly these four subjects. mesh-controller's `TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose` holds this seed equal to that composition in both directions: narrower, the controller is refused at genesis; wider, genesis grants what the first push takes away.
Companion: mesh-controller pull request for the same package (branch `pkg/57-f3-assignment-buckets`), which captures this commit (c8920622) in `testdata/beside`. Merge the two together.
## How it is proven
- mesh-controller `internal/broker` `TestTheInstallersFirstUserListIsWhatTheControllerWouldCompose` passes against this file (captured there).
- `sh merge-check.sh` here: exit 0 (gofmt, go vet, every test; `./examples` and `./internal/bootstrap` included).
## Reviewer's checklist
1. Does what issue 652 needs of this repository and nothing else: one line of one seed file. Yes.
2. Proof: the controller's genesis template test fails without this line and passes with it.
3. Nothing changes what composes for a module: no module's grant moves; only the controller's genesis seed.
4. No secret: the hash is the existing bootstrap one, unchanged. No database change.
5. No new manifest or declaration field.
6. gofmt, go vet, go test ./... via merge-check.sh: pass.
7. Words: record mirror (glossary), assignment, declared config.
The controller now keeps the assignments and each registered module's declared
config on the bus (hq issue 652, design 57 F3), so its composed grant gains the
two buckets and their two events. The installer's first user list must equal
that composition, or the controller is refused at genesis; mesh-controller's
genesis template test holds the two to each other.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Deliverynovox/mesh-host@c89206225165 — delivered since 2026-10-14T00:55:30Z
Delivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
2026-10-14 00:35 (new) → proposed (announced): novox/mesh-host#110's head announced
2026-10-14 00:36 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-14 00:36 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-14 00:55 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-14 00:55 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-host@c89206225165` — **delivered** since 2026-10-14T00:55:30Z
**Delivery plan** — builds nothing: the change touches no module of the mesh's graph
**Transitions**
- 2026-10-14 00:35 (new) → proposed (announced): novox/mesh-host#110's head announced
- 2026-10-14 00:36 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-14 00:36 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-14 00:55 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-14 00:55 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`.
Independent review of package F3's mesh-host half (issue 652) at head c892062251, with mesh-controller#315 at 8563b90918fb.
Checks I ran: gofmt -l clean; sh merge-check.sh exit 0, go vet clean, the suite under -race, and the bus tests against a throwaway nats-server v2.11.17 (built from mesh-controller's vendored server, since this machine has no nats-server binary). Forge statuses on this head: mesh/merge-gate success, mesh/repo-check success.
The change is correct and needed: examples/foundation-first-node.lock's controller grant gains exactly $KV.mesh-controller_assignments.>, $KV.mesh-controller_declared-config.> and the two events assignment-changed and declared-config-changed, which is what mesh-controller#315 composes. mesh-controller's TestTheInstallersFirstUserList... fails with this repository at origin/feat/57 and passes at c8920622 (I ran both). No secret is added: the bcrypt hash was already in the file.
Merge order: this pull request first (alone it only widens the genesis grant, harmless to the controller that runs today), then mesh-delivery.recheck mesh-controller#315, whose mesh/repo-check is red only because it clones this repository's feat/57 beside it; merge that one on the new verdict. mesh-controller's testdata/beside/CAPTURED names c8920622; this repository merges with merge commits, so that commit stays reachable.
mesh-controller#315 still has changes to make (see its review); this half needs none, but do not merge it before #315 is approved, so the two land together.
Verdict: APPROVE at c89206225165
Independent review of package F3's mesh-host half (issue 652) at head c89206225165, with mesh-controller#315 at 8563b90918fb.
Checks I ran: gofmt -l clean; `sh merge-check.sh` exit 0, go vet clean, the suite under -race, and the bus tests against a throwaway nats-server v2.11.17 (built from mesh-controller's vendored server, since this machine has no nats-server binary). Forge statuses on this head: mesh/merge-gate success, mesh/repo-check success.
1. The change is correct and needed: examples/foundation-first-node.lock's controller grant gains exactly `$KV.mesh-controller_assignments.>`, `$KV.mesh-controller_declared-config.>` and the two events `assignment-changed` and `declared-config-changed`, which is what mesh-controller#315 composes. mesh-controller's TestTheInstallersFirstUserList... fails with this repository at origin/feat/57 and passes at c8920622 (I ran both). No secret is added: the bcrypt hash was already in the file.
2. Merge order: this pull request first (alone it only widens the genesis grant, harmless to the controller that runs today), then `mesh-delivery.recheck` mesh-controller#315, whose mesh/repo-check is red only because it clones this repository's feat/57 beside it; merge that one on the new verdict. mesh-controller's testdata/beside/CAPTURED names c8920622; this repository merges with merge commits, so that commit stays reachable.
mesh-controller#315 still has changes to make (see its review); this half needs none, but do not merge it before #315 is approved, so the two land together.
mesh-admin
merged commit c18d5a8ff3 into feat/57-config-and-provisioning2026-10-14 00:55:01 +00:00
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.
What changed
The installer's first user list (
examples/foundation-first-node.lock, thebus-accountsseed) lets the controller publish two more buckets and two more events:$KV.mesh-controller_assignments.>,$KV.mesh-controller_declared-config.>,mesh.seat.mesh-controller.event.assignment-changedandmesh.seat.mesh-controller.event.declared-config-changed.Why
Package F3 of design 57 (hq issue 652) makes the controller keep the assignments and each registered module's declared config on the bus as two record mirrors (ADR 0289, design 54). Its composed grant gains exactly these four subjects. mesh-controller's
TestTheInstallersFirstUserListIsWhatTheControllerWouldComposeholds this seed equal to that composition in both directions: narrower, the controller is refused at genesis; wider, genesis grants what the first push takes away.Companion: mesh-controller pull request for the same package (branch
pkg/57-f3-assignment-buckets), which captures this commit (c8920622) intestdata/beside. Merge the two together.How it is proven
internal/brokerTestTheInstallersFirstUserListIsWhatTheControllerWouldComposepasses against this file (captured there).sh merge-check.shhere: exit 0 (gofmt, go vet, every test;./examplesand./internal/bootstrapincluded).Reviewer's checklist
Delivery
novox/mesh-host@c89206225165— delivered since 2026-10-14T00:55:30ZDelivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.Verdict: APPROVE at
c892062251Independent review of package F3's mesh-host half (issue 652) at head
c892062251, with mesh-controller#315 at 8563b90918fb.Checks I ran: gofmt -l clean;
sh merge-check.shexit 0, go vet clean, the suite under -race, and the bus tests against a throwaway nats-server v2.11.17 (built from mesh-controller's vendored server, since this machine has no nats-server binary). Forge statuses on this head: mesh/merge-gate success, mesh/repo-check success.$KV.mesh-controller_assignments.>,$KV.mesh-controller_declared-config.>and the two eventsassignment-changedanddeclared-config-changed, which is what mesh-controller#315 composes. mesh-controller's TestTheInstallersFirstUserList... fails with this repository at origin/feat/57 and passes atc8920622(I ran both). No secret is added: the bcrypt hash was already in the file.mesh-delivery.recheckmesh-controller#315, whose mesh/repo-check is red only because it clones this repository's feat/57 beside it; merge that one on the new verdict. mesh-controller's testdata/beside/CAPTURED names c8920622; this repository merges with merge commits, so that commit stays reachable.mesh-controller#315 still has changes to make (see its review); this half needs none, but do not merge it before #315 is approved, so the two land together.