The bus's user list grants what release 6 uses before the switch, so the new controller, node-engines, assigner and the operator's way back are not refused after it (issue 1945)
#456
Merged
jschoubbenmerged 4 commits from fix/1945-r6-grants-first into main2026-10-24 19:47:40 +00:00
Issue 1945, review finding A1 of milestone R6 (ADR 0539 §2, §7, §10, §13): the switch is today's controller's last plan, which composes the bus's user list with its own grants; without these, after the switch the new controller's composition writes, every node's watch of its wants and compositions, the assigner's read of the digests, the new controller's bucket-deleted event and the operator's hand path would all be refused, and nothing could deliver a new user list. This delivers them first, like mesh-controller #455: the controller writes $KV.composed-.> and $KV.mesh-controller_composed.>; a node reads its own composed- and want..>, calls node-backup now/backed-up for itself and hears restic's backed-up; mesh-controller_composed is asserted and announced readable; bucket-deleted is a controller event; the operator's administrator account writes wants, compositions, digests and its node file objects (with the object store's get and purge). Tests: TestTheUserListBeforeTheSwitchGrantsWhatReleaseSixUses, TestTheOperatorWritesTheHandPathAheadOfTheSwitch, and the integration test TestNatsTheOperatorWritesTheHandPathOnTheComposedUserList on an embedded bus with the composed user list. Try try-1792859165511298981 passed. Acceptance after delivery: a node user on the live bus holds want..>.
Reviewed-by: reviewer-r6@shanks at bd8ea8ad4f
Pushed-by: lead-47@shanks
Issue 1945, review finding A1 of milestone R6 (ADR 0539 §2, §7, §10, §13): the switch is today's controller's last plan, which composes the bus's user list with its own grants; without these, after the switch the new controller's composition writes, every node's watch of its wants and compositions, the assigner's read of the digests, the new controller's bucket-deleted event and the operator's hand path would all be refused, and nothing could deliver a new user list. This delivers them first, like mesh-controller #455: the controller writes $KV.composed-<node>.> and $KV.mesh-controller_composed.>; a node reads its own composed-<node> and want.<node>.>, calls node-backup now/backed-up for itself and hears restic's backed-up; mesh-controller_composed is asserted and announced readable; bucket-deleted is a controller event; the operator's administrator account writes wants, compositions, digests and its node file objects (with the object store's get and purge). Tests: TestTheUserListBeforeTheSwitchGrantsWhatReleaseSixUses, TestTheOperatorWritesTheHandPathAheadOfTheSwitch, and the integration test TestNatsTheOperatorWritesTheHandPathOnTheComposedUserList on an embedded bus with the composed user list. Try try-1792859165511298981 passed. Acceptance after delivery: a node user on the live bus holds want.<node>.>.
Reviewed-by: reviewer-r6@shanks at bd8ea8ad4f30846633b4b7d800490df4e08e7c14
Pushed-by: lead-47@shanks
The switch to release 6 is today's controller's last plan, and the bus runs the user list it composes until the new
controller writes one: so the new controller's writes of each node's compositions and their digests, each new
node-engine's reads of its own compositions and wants and its backup holder's verbs and word, and the assigner's read
of the digests must be granted by this controller already (ADR 0539 clauses 2, 6, 9 and 16; the review's A1).
The new controller says its first start's deletions as an event, a node-engine hears only its backup holder, and the
way back right after the switch, a want and a composition written at the terminal, runs on the user list today's
controller composes (ADR 0539 clauses 2, 10 and 13). The operator is the administrator person, the one second
writer ADR 0539 names.
The object store reads an object's metadata and purges its old chunks when it replaces one, so the hand path is
granted the direct and message gets and the purge of each node's object stream; a test on a bus running the composed
user list walks the hand path end to end.
Deliverynovox/mesh-controller@bd8ea8ad4f30 — delivered since 2026-10-24T19:51:20Z
Delivery plan — builds mesh-controller → novox; no bus step
tier 0: mesh-controller
novox: receives mesh-controller
Machines
mesh-controller on every machine running it: sent
Transitions
2026-10-24 16:37 (new) → proposed (announced): novox/mesh-controller#456's head announced
2026-10-24 16:39 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
2026-10-24 16:39 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
2026-10-24 19:47 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
2026-10-24 19:47 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
2026-10-24 19:51 delivering → delivered (done): its walk is done, carrying its own commit: 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@bd8ea8ad4f30` — **delivered** since 2026-10-24T19:51:20Z
**Delivery plan** — builds mesh-controller → novox; no bus step
- tier 0: mesh-controller
- novox: receives mesh-controller
**Machines**
- mesh-controller on every machine running it: sent
**Transitions**
- 2026-10-24 16:37 (new) → proposed (announced): novox/mesh-controller#456's head announced
- 2026-10-24 16:39 proposed → checked (checked): a verdict names this commit and the trunk's head as its trunk commit
- 2026-10-24 16:39 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
- 2026-10-24 19:47 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
- 2026-10-24 19:47 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 — not a failed walk that carried a later commit for it, after which it waits for a walk of its own commit
- 2026-10-24 19:51 delivering → delivered (done): its walk is done, carrying its own commit: 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`.
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.
Issue 1945, review finding A1 of milestone R6 (ADR 0539 §2, §7, §10, §13): the switch is today's controller's last plan, which composes the bus's user list with its own grants; without these, after the switch the new controller's composition writes, every node's watch of its wants and compositions, the assigner's read of the digests, the new controller's bucket-deleted event and the operator's hand path would all be refused, and nothing could deliver a new user list. This delivers them first, like mesh-controller #455: the controller writes $KV.composed-.> and $KV.mesh-controller_composed.>; a node reads its own composed- and want..>, calls node-backup now/backed-up for itself and hears restic's backed-up; mesh-controller_composed is asserted and announced readable; bucket-deleted is a controller event; the operator's administrator account writes wants, compositions, digests and its node file objects (with the object store's get and purge). Tests: TestTheUserListBeforeTheSwitchGrantsWhatReleaseSixUses, TestTheOperatorWritesTheHandPathAheadOfTheSwitch, and the integration test TestNatsTheOperatorWritesTheHandPathOnTheComposedUserList on an embedded bus with the composed user list. Try try-1792859165511298981 passed. Acceptance after delivery: a node user on the live bus holds want..>.
Reviewed-by: reviewer-r6@shanks at
bd8ea8ad4fPushed-by: lead-47@shanks
Delivery
novox/mesh-controller@bd8ea8ad4f30— delivered since 2026-10-24T19:51:20ZDelivery plan — builds mesh-controller → novox; no bus step
Machines
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.