Design 26: which assignment holds a seat is on record, and changes as one act #153

Merged
jschoubben merged 1 commits from design/26-a-seat-is-held-on-record into main 2026-09-27 21:22:57 +00:00
Owner

The mechanism behind design 28 task 5.3, under ADR 0131.

Until now the holder of a seat was derived — the module that is assigned and claims it — and a second eligible assignment was refused. So a seat could not pass from one holder to the next without a moment in which nobody held it, and the controller finds its own bus through one of these seats. That moment was tonight's outage.

The holder is now one row the controller keeps, written by seat <name> --to <node>/<module> in the same write that replaces the previous holder. No row means the old rule, so a mesh that has never handed a seat over behaves exactly as before. With a row, any other assignment whose module could hold the seat is eligible and silent — neither refused nor holding — which is what lets the next holder run beside the current one until the switch. A holding belongs to the assignment and goes when it does.

Three new rows in the checked-by table, each naming its test. Pairs with mesh-controller feat/seat-handover.

The mechanism behind design 28 task 5.3, under ADR 0131. Until now the holder of a seat was derived — the module that is assigned and claims it — and a second eligible assignment was refused. So a seat could not pass from one holder to the next without a moment in which nobody held it, and the controller finds its own bus through one of these seats. That moment was tonight's outage. The holder is now one row the controller keeps, written by `seat <name> --to <node>/<module>` in the same write that replaces the previous holder. No row means the old rule, so a mesh that has never handed a seat over behaves exactly as before. With a row, any other assignment whose module could hold the seat is eligible and silent — neither refused nor holding — which is what lets the next holder run beside the current one until the switch. A holding belongs to the assignment and goes when it does. Three new rows in the checked-by table, each naming its test. Pairs with mesh-controller `feat/seat-handover`.
jschoubben added 1 commit 2026-09-27 21:20:52 +00:00
Until now the holder was derived — assigned and claiming — and a second eligible
assignment was refused, so a seat could not pass from one holder to the next
without a moment where nobody held it. The controller finds its own bus through
one of these seats, and that moment took the control plane down on 2026-09-27.

The holder is now a row the controller keeps, written by `seat <name> --to
<node>/<module>` in the same write that removes the previous one. No row means the
old rule, so nothing changes for a mesh that never hands a seat over; with a row,
another eligible assignment is silent rather than refused, which is what lets the
next holder run beside the current one until the switch. A holding is the
assignment's and goes when it does. Each rule names the test that checks it.

Under ADR 0131; design 28 task 5.3 is the work.
jschoubben merged commit 694555214a into main 2026-09-27 21:22:57 +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/hq#153