Issue 087: a machine states its host only when the mesh sends it something #205

Merged
jschoubben merged 1 commits from issue/087-a-machine-says-its-host-only-when-asked into main 2026-09-30 07:09:17 +00:00
@@ -54,6 +54,38 @@ Two deliberate refusals to guess:
for a scheme where `10` sorts before `9`. Said in the code at the place that would have to learn, for a scheme where `10` sorts before `9`. Said in the code at the place that would have to learn,
rather than left as a surprise. rather than left as a surprise.
## Measured on the mesh, and one limitation it exposed
All four machines run the identical host binary — same digest, installed within eighteen seconds of each
other — and at first only one reported its version. The other three said *not reported*, which read as a
difference between machines where there was none.
**A machine states its host version only when the mesh sends it a declaration.** The report is published
after an apply; the periodic reconcile that runs every five minutes publishes nothing, because it is the
machine keeping itself as declared rather than answering anything. So a machine that is current and idle
never says, and the mesh cannot distinguish that from a machine running something ancient.
Confirmed by pushing: before, `not reported`; after, `04a27ca` — the same version the machine that had
been pushed already reported.
```
novox host 04a27ca
shanks host 04a27ca
g14 host 04a27ca
ace host not reported — this machine has not said since the mesh began keeping it
```
`ace` has not been pushed since the field existed; it is adopted and parked.
**This is enough for the purpose and not enough for the claim.** For deciding whether a new declaration
field is safe it is sufficient, because pushing is what the mesh is about to do anyway and the answer
arrives with the act. For *knowing what the mesh is running*, it is not: a long-idle machine's entry is
as old as its last push, and the honest reading of `not reported` is "nobody has asked recently" rather
than "this machine is silent". The words say the first, which is why they are those words.
Making a heartbeat carry it would close the gap and is a change to what a heartbeat is — a bare word
that the node is there, deliberately carrying nothing else. Left alone rather than widened in passing.
## The open questions, answered as far as they can be ## The open questions, answered as far as they can be
- *Should a node report the version of its host?* It already did. The gap was the reading. - *Should a node report the version of its host?* It already did. The gap was the reading.