From 5cac2684575458f712e61c1f6fd864e2b317e3f4 Mon Sep 17 00:00:00 2001 From: jochen Date: Sun, 27 Sep 2026 18:57:49 +0200 Subject: [PATCH] Two checks were wrong about where a seat is judged MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correcting design 26 to match what the merged code does, and fixing issue 112's status, which used a word the vocabulary does not have. A claim on a seat the manifest does not itself declare is refused at registration rather than by the parser. A module may hold a seat another module declared — that is why ADR 0126 has a caller name the seat and not its provider — so whether the name exists is a fact about the whole catalogue. And a declared seat may promise nothing. That is a marker seat, and most node-scoped seats are markers: which module is this machine's packet filter. ADR 0126's "a declared seat carries a protocol" says what a holder must satisfy, not that every seat offers something. `records.py` still fails on ADR 0120 resting on a proposed ADR 0112, which is not this branch's and not mine to decide. --- 03-DESIGN/01-to-be/26-the-seats.md | 11 ++++++++++- .../00-report.md | 2 +- 2 files changed, 11 insertions(+), 2 deletions(-) diff --git a/03-DESIGN/01-to-be/26-the-seats.md b/03-DESIGN/01-to-be/26-the-seats.md index 60d71c7..f6c1cd1 100644 --- a/03-DESIGN/01-to-be/26-the-seats.md +++ b/03-DESIGN/01-to-be/26-the-seats.md @@ -149,6 +149,15 @@ moves that to a host port requirement. ## A seat that delivers nothing +**A module's declared seat may promise nothing too, and that is a marker seat.** Correction of fact, +2026-09-27: [ADR 0126](../../02-DECISIONS/0126-a-module-declares-its-own-seats.md)'s "a declared seat +carries a protocol" governs what a *holder* must satisfy, not that every seat offers something. A +marker seat's protocol is satisfied by holding it, which is the whole of what a marker says. Refusing +an empty one would refuse most of the node-scoped set, the showcase module's own seat included. +Nothing reaches that state by accident: an unknown manifest field is refused outright, so an empty +protocol was written as one. Checked by a registration test accepting a node seat with no protocol +and by the showcase manifest, which declares one. + Most node seats deliver nothing. They say which module is this machine's packet filter, or which of two alternative resolver configurations it runs, and a second holder is refused. That is the whole of their job, and it is a real one: it is the mesh saying what a machine is, in words a person can read. @@ -193,7 +202,7 @@ checked as their tables say: | Rule | Checked by | |---|---| -| The set is closed, and every mesh entry names its decision | 0118: a unit test on the mesh's own entries; manifest tests refusing an unknown seat or the wrong scope. | +| The set is closed, and every mesh entry names its decision | 0118: a unit test on the mesh's own entries. **The refusal of an unknown seat is at registration, not in the parser** — correction of fact, 2026-09-27: a module may hold a seat *another* module declares, which is the point of naming the seat and not its provider, so whether a claimed name exists is a fact about the whole catalogue and a manifest in isolation cannot be judged on it. Registration tests cover an invented name and a name another module declares; the parser still refuses a claim on the mesh's own `mesh-*`/`node-*` namespace and a scope that disagrees with a declaration in the same manifest. | | The set is derived, and enumerating it is a query | 0118: the overview lists the mesh's own plus every registered module's, asserted against a fixture mesh. | | `mesh-*` is the mesh's, and a module may not declare one | 0118: a registration test refusing a manifest that declares any `mesh-*` seat, naming the prefix. | | Two modules cannot declare the same seat | 0118: a registration test; the second is refused and the first untouched. | diff --git a/04-ISSUES/112-adopting-a-tunnel-gives-the-mesh-addresses-without-names/00-report.md b/04-ISSUES/112-adopting-a-tunnel-gives-the-mesh-addresses-without-names/00-report.md index 0a9a223..a36fde6 100644 --- a/04-ISSUES/112-adopting-a-tunnel-gives-the-mesh-addresses-without-names/00-report.md +++ b/04-ISSUES/112-adopting-a-tunnel-gives-the-mesh-addresses-without-names/00-report.md @@ -1,5 +1,5 @@ --- -status: fixed +status: resolved opened: 2026-09-24 located-in: [mesh-controller internal/inventory, mesh-controller internal/catalogue, mesh-controller cmd/mesh-controller, mesh-catalog modules/dnsmasq] fixed-by: [mesh-controller#73 overlay-name + namesInTheMesh, mesh-catalog#106 dnsmasq daemon.json merge]