Design 33 implemented: the mesh's verbs answer through the console, and what shipped bent

This commit is contained in:
2026-09-30 18:18:44 +02:00
parent 90b44a48df
commit 214b486a50
2 changed files with 21 additions and 2 deletions
@@ -1,6 +1,6 @@
---
layer: to-be
status: in-progress
status: implemented
code: [mesh-controller, mesh-tools]
updated: 2026-09-30
decisions:
@@ -139,6 +139,24 @@ verb answers every seat's tools from the records, because the console cannot rea
console lists a role's tools beside the modules' own and resolves `<seat>.<verb>` to the seat when the
seat declares that verb. Which verbs each *other* seat serves stays a decision per seat, still untaken.
## What shipped, 2026-09-30
mesh-controller PRs 166 and 167, mesh-tools PR 21. Verified on the live mesh the same evening: the
console on a workstation lists the twelve verbs as `mesh-controller.<verb>` beside 67 module tools, and
`mesh-controller.nodes` and `mesh-controller.status` answer through it with what the commands print.
Two things shipped bent. **The grant arrived after the holder started**: the controller composes the
bus's user list and a push delivers it, so the first controller to serve its seat subscribed before
the broker's list named the grant, the server refused all twelve subscriptions, and the client never
retried — a holder now rebinds a refused subscription every thirty seconds (PR 167), and a controller
roll-out that adds a grant is followed by a push to the broker node. **A JSON verb's answer was parsed
from both output streams**, so `status --json`'s warnings hid the document as data; the answer is now
parsed from standard output alone (mesh-controller PR 168, pending). The `output` field carried it
either way.
What stays as designed and not built: which verbs any *other* seat serves, and §3 for module-declared
seats' schemas beyond the names their manifests already list.
## What this does not settle
- Which verbs each seat should serve. That is a decision per seat, and the reason to do it slowly: a