buscompose: the controller's bus composer in the SDK, byte-equal to the controller's, with the mesh-grants grant (ADR 0547) #85

Merged
jschoubben merged 3 commits from fix/1945-memberships into main 2026-10-25 22:43:57 +00:00
Member

ADR 0547 milestone 1: the grants part composes the bus user list and memberships without the controller.

  • go/buscompose: the composer half of the controller's internal/broker at 7cd4d18b (no bus client, no environment read), plus the one grant the operator allowed (mesh-grants publishes mesh.assignment.*.* and direct-gets its last membership).
  • TestTheCopiedComposerComposesAsTheControllers: user lists for five meshes (empty to full, and the controller's golden server configuration) and every membership, compared with what the controller's own code writes (lists byte for byte, memberships as parsed JSON). It fails if either composer changes without the other.

Group with mesh-control and mesh-delivery PRs of the same branch name.

Checked: go test -race, go vet -tags integration in go/buscompose. One new top-level test (a table); the repository stays within its budget.

Review: round 1 blocked (the direct get missing; no membership fixture), round 2 approved.

Reviewed-by: review-grants@shanks at b7b5c6ef27

ADR 0547 milestone 1: the grants part composes the bus user list and memberships without the controller. - go/buscompose: the composer half of the controller's internal/broker at 7cd4d18b (no bus client, no environment read), plus the one grant the operator allowed (mesh-grants publishes `mesh.assignment.*.*` and direct-gets its last membership). - TestTheCopiedComposerComposesAsTheControllers: user lists for five meshes (empty to full, and the controller's golden server configuration) and every membership, compared with what the controller's own code writes (lists byte for byte, memberships as parsed JSON). It fails if either composer changes without the other. Group with mesh-control and mesh-delivery PRs of the same branch name. Checked: go test -race, go vet -tags integration in go/buscompose. One new top-level test (a table); the repository stays within its budget. Review: round 1 blocked (the direct get missing; no membership fixture), round 2 approved. Reviewed-by: review-grants@shanks at b7b5c6ef27a0e81163f6e0b4f1febff5284a7791
mesh-tools added 3 commits 2026-10-25 21:56:58 +00:00
The grants part composes the bus's user list with the composer the controller uses (ADR 0547 §5), copied rather than
moved: the controller is not changed and keeps its own until it loses the lease. Left out: the bus client, the broker's
address from the environment and the client's two methods; the lease's two subjects are copied in.

One table test holds the copy to four meshes' lists and the server golden, written by the controller's own
internal/broker from the same fixtures (testdata/controller-user-lists.json).
The same line as mesh-controller f67d1553; the fixtures name a mesh-grants module and the lists were written again by
the controller's own composer on that branch, so the copy is held byte-equal to it.
The copied composer grants the grants part reading every membership, and its memberships are held to the controller's too (ADR 0547 §5, review of mesh-grants)
mesh/delivery merged: source.main moved to novox/mesh-sdk@095d41fa3e81
mesh/delivery-group group fix/1945-memberships merged: every member is merged
mesh/check failed: integration: github.com/novox/mesh-controller/cmd/mesh-controller.TestTheDeclarationsStreamGoesOnceEveryNodeRunsTheNewEngine: with …
b7b5c6ef27
The grants part reads each module's last membership before it publishes, so it needs the direct get on every
membership subject, as the controller's composer now grants (fix/1945-mesh-grants-publishes-memberships). The equality
test compares every membership the fixtures issue with the controller's MembershipFor, written by its own code.
Author
Member

Delivery novox/mesh-sdk@b7b5c6ef27a0 — merged since 2026-10-25T22:43:59Z

Source — source.main moved to novox/mesh-sdk@095d41fa3e. Whether it reached the machines is mesh-delivery-view's, derived from source.main, the wants and the haves.

Group fix/1945-memberships: novox/mesh-controller@a81717e53c, novox/mesh-delivery@26ba7404bf, novox/mesh-sdk@b7b5c6ef27

  • composed together: fail — the checker's verdict at the members' heads (925f92f35382): integration: github.com/novox/mesh-controller/cmd/mesh-controller.TestTheDeclarationsStreamGoesOnceEveryNodeRunsTheNewEngine

Transitions

  • 2026-10-25 21:57 (new) → proposed (announced): novox/mesh-sdk#85's head announced
  • 2026-10-25 22:13 proposed → rejected (refused): a verdict names this commit and the trunk's head as its trunk commit, and the gate failed or could not run, or the repository's own check failed
  • 2026-10-25 22:26 rejected → proposed (recheck): the check gates no merge (check-gates-merge false): its verdict is shown, not waited on
  • 2026-10-25 22:26 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false)
  • 2026-10-25 22:43 ready → merged (merged): on the trunk its modules follow: merged there

The commit's note under refs/notes/mesh-plan keeps every transition of this change up to its merge: git log --notes=mesh-plan.

<!-- mesh-delivery:view --> **Delivery** `novox/mesh-sdk@b7b5c6ef27a0` — **merged** since 2026-10-25T22:43:59Z **Source** — source.main moved to novox/mesh-sdk@095d41fa3e81. Whether it reached the machines is `mesh-delivery-view`'s, derived from `source.main`, the wants and the haves. **Group** `fix/1945-memberships`: novox/mesh-controller@a81717e53cf4, novox/mesh-delivery@26ba7404bfc4, novox/mesh-sdk@b7b5c6ef27a0 - composed together: fail — the checker's verdict at the members' heads (925f92f35382): integration: github.com/novox/mesh-controller/cmd/mesh-controller.TestTheDeclarationsStreamGoesOnceEveryNodeRunsTheNewEngine **Transitions** - 2026-10-25 21:57 (new) → proposed (announced): novox/mesh-sdk#85's head announced - 2026-10-25 22:13 proposed → rejected (refused): a verdict names this commit and the trunk's head as its trunk commit, and the gate failed or could not run, or the repository's own check failed - 2026-10-25 22:26 rejected → proposed (recheck): the check gates no merge (check-gates-merge false): its verdict is shown, not waited on - 2026-10-25 22:26 proposed → ready (accepted): a verdict names this commit and the trunk's head as its trunk commit, the gate passed or warned, and the repository's own check did not fail; or the check gates no merge (check-gates-merge false) - 2026-10-25 22:43 ready → merged (merged): on the trunk its modules follow: merged there The commit's note under `refs/notes/mesh-plan` keeps every transition of this change up to its merge: `git log --notes=mesh-plan`.
Author
Member

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.

mesh-delivery: the operator's Approve of this pull request's merge into main is ended: a head it covers moved on: the heads it covers are no longer the group's heads. Nothing is merged on it. The operator is asked again once the checks pass at the new head.
jschoubben merged commit 095d41fa3e into main 2026-10-25 22:43:57 +00:00
jschoubben deleted branch fix/1945-memberships 2026-10-25 22:43:57 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/mesh-sdk#85