Issue 298 and ADR 0246: a seat's new verb is promised before it is required #178

Merged
mesh-admin merged 2 commits from issues/298-a-new-seat-verb-deadlocks into main 2026-10-07 19:21:53 +00:00
Contributor

Issue 298. Design 33 §7 says a seat's verbs change additively, but §3 makes every verb a condition of holding the seat. When a mesh seat is defined in the controller and its holder lives in the catalogue, an added verb can land in neither order:

  • the new controller refuses the old holder, because the holder does not serve the verb;
  • the old controller refuses the new holder, because the holder claims a verb the controller does not promise.

This happened three times on 2026-10-07:

  • checks on mesh-delivery: mesh-controller#117 and mesh-catalog#109;
  • failed on node-service-manager: #114 and #105;
  • resolvers and links on node-uplink: #116 and #107.

It was unblocked by Verb.Optional. #114 also keeps the mark when a seat row is read back from the store. The issue's status is located, with amended-design pointing at design 33. One thing is still unchecked: nothing makes sure the optional mark is ever removed.

ADR 0246. An added verb lands in three steps:

  1. The controller promises the verb as optional.
  2. Every holder serves it.
  3. The controller requires it.

Design 33 §7 is amended to say this. How it is checked names the controller's claim check, which runs at registration, at handover and in module check, which the catalogue's merge check runs. It also names the tests from #114 and #117. The glossary's seat entry says the same in one line.

The uplink verbs were not staged. ADR 0241 rule 8 (and its check-table row) and to-be 48 §10 said resolvers and links were staged and never stored in the seat's row. What merged (mesh-controller#116) has no staged seat: it marks both verbs optional, seeds them into the row, and reads them back optional.

  • ADR 0241 is corrected as a dated progressive insight. The decision is unchanged and the body text is left as it was.
  • To-be 48 is corrected in place.
  • Both point at ADR 0246 and issue 298.

Checks: records, index (written with --write), cycle and words pass, and so does sh merge-check.sh. The new text is also clean under the plural-aware words.py from #176.

**Issue 298.** Design 33 §7 says a seat's verbs change additively, but §3 makes every verb a condition of holding the seat. When a mesh seat is defined in the controller and its holder lives in the catalogue, an added verb can land in neither order: - the new controller refuses the old holder, because the holder does not serve the verb; - the old controller refuses the new holder, because the holder claims a verb the controller does not promise. This happened three times on 2026-10-07: - `checks` on mesh-delivery: mesh-controller#117 and mesh-catalog#109; - `failed` on node-service-manager: #114 and #105; - `resolvers` and `links` on node-uplink: #116 and #107. It was unblocked by `Verb.Optional`. #114 also keeps the mark when a seat row is read back from the store. The issue's status is `located`, with `amended-design` pointing at design 33. One thing is still unchecked: nothing makes sure the optional mark is ever removed. **ADR 0246.** An added verb lands in three steps: 1. The controller promises the verb as optional. 2. Every holder serves it. 3. The controller requires it. **Design 33 §7** is amended to say this. **How it is checked** names the controller's claim check, which runs at registration, at handover and in `module check`, which the catalogue's merge check runs. It also names the tests from #114 and #117. The glossary's `seat` entry says the same in one line. **The uplink verbs were not staged.** ADR 0241 rule 8 (and its check-table row) and to-be 48 §10 said `resolvers` and `links` were *staged* and never stored in the seat's row. What merged (mesh-controller#116) has no staged seat: it marks both verbs optional, seeds them into the row, and reads them back optional. - ADR 0241 is corrected as a dated progressive insight. The decision is unchanged and the body text is left as it was. - To-be 48 is corrected in place. - Both point at ADR 0246 and issue 298. Checks: records, index (written with `--write`), cycle and words pass, and so does `sh merge-check.sh`. The new text is also clean under the plural-aware words.py from #176.
mesh-admin added 1 commit 2026-10-07 19:14:29 +00:00
Issue 298 and ADR 0246: a seat's new verb is promised before it is required
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery superseded: a newer head of the same pull request
e6a17b8bf6
Design 33 said a seat's verbs change additively, and section 3 made each
one a condition of holding, so a verb added in the controller and served
from the catalogue could land in neither order. It happened three times on
2026-10-07. Section 7 now says the three steps and how each is checked.
Author
Contributor

Delivery novox/hq@91daabaa97c9 — delivered since 2026-10-07T19:22:15Z

Delivery plan — builds nothing: the change touches no module of the mesh's graph

Transitions

  • 2026-10-07 19:18 (new) → proposed (announced): novox/hq#178's head announced
  • 2026-10-07 19:19 proposed → checked (checked): the verdict names this commit
  • 2026-10-07 19:19 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail
  • 2026-10-07 19:22 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move
  • 2026-10-07 19:22 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/hq@91daabaa97c9` — **delivered** since 2026-10-07T19:22:15Z **Delivery plan** — builds nothing: the change touches no module of the mesh's graph **Transitions** - 2026-10-07 19:18 (new) → proposed (announced): novox/hq#178's head announced - 2026-10-07 19:19 proposed → checked (checked): the verdict names this commit - 2026-10-07 19:19 checked → ready (accepted): the gate passed or warned, and the repository's own check did not fail - 2026-10-07 19:22 ready → published (merged): on the trunk its modules follow: merged there, and its walk opened — or nothing for a walk to move - 2026-10-07 19:22 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`.
jschoubben added 1 commit 2026-10-07 19:18:13 +00:00
Say the uplink verbs shipped optional, not staged: a progressive insight in ADR 0241, corrected in to-be 48
mesh/merge-gate pass: the change touches no module of the mesh's graph
mesh/repo-check pass: its merge-check.sh passed
mesh/delivery delivered
91daabaa97
The controller that merged (mesh-controller #116) dropped the staged seat and
marked both verbs optional, stored in the seat's row and read back optional.
mesh-admin merged commit 0bd12fc777 into main 2026-10-07 19:21:53 +00:00
mesh-admin deleted branch issues/298-a-new-seat-verb-deadlocks 2026-10-07 19:21:53 +00:00
Sign in to join this conversation.
No Reviewers
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: novox/hq#178