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;
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:
The controller promises the verb as optional.
Every holder serves it.
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.
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.
Deliverynovox/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`.
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.
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 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:
This happened three times on 2026-10-07:
checkson mesh-delivery: mesh-controller#117 and mesh-catalog#109;failedon node-service-manager: #114 and #105;resolversandlinkson 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 islocated, withamended-designpointing 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:
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'sseatentry 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
resolversandlinkswere 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.Checks: records, index (written with
--write), cycle and words pass, and so doessh merge-check.sh. The new text is also clean under the plural-aware words.py from #176.Delivery
novox/hq@91daabaa97c9— delivered since 2026-10-07T19:22:15ZDelivery plan — builds nothing: the change touches no module of the mesh's graph
Transitions
The commit's note under
refs/notes/mesh-plankeeps every transition:git log --notes=mesh-plan.