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
jschoubben merged 4 commits from fix/1945-r6-grants-first into main 2026-10-24 19:47:40 +00:00
Member

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
mesh-tools added 4 commits 2026-10-24 16:37:26 +00:00
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.
Format the hand path's live test (issue 1945)
mesh/delivery delivered
mesh/check failed: integration: github.com/novox/mesh-controller/cmd/mesh-controller.TestAPlanPassesATierWhoseMachineNeverReportsAfterTheBoundAndSends…
bd8ea8ad4f
Author
Member

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.

<!-- 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`.
jschoubben merged commit f4998a7266 into main 2026-10-24 19:47:40 +00:00
jschoubben deleted branch fix/1945-r6-grants-first 2026-10-24 19:47:40 +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-controller#456