57/F3: Let genesis's controller write its record mirrors (issue 652) #110

Merged
mesh-admin merged 1 commits from pkg/57-f3-controller-mirror-grants into feat/57-config-and-provisioning 2026-10-14 00:55:01 +00:00
Contributor

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.
## 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.
mesh-admin added 1 commit 2026-10-14 00:35:05 +00:00
Let genesis's controller write its record mirrors
mesh/merge-gate head c89206225165 merged into trunk 6b54fed706f0 — pass: the change touches no module of the mesh's graph
mesh/repo-check head c89206225165 merged into trunk 6b54fed706f0 — pass: its merge-check.sh passed
mesh/delivery delivered
c892062251
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>
Author
Contributor

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.

<!-- 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`.
mesh-admin left a comment
Author
Contributor

Verdict: APPROVE at c892062251

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.

  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.

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-provisioning 2026-10-14 00:55:01 +00:00
mesh-admin deleted branch pkg/57-f3-controller-mirror-grants 2026-10-14 00:55:01 +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-host#110