From 941b920bd75e3ddc9b8fda9eaa2f00cb4537b998 Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 30 Sep 2026 09:09:10 +0200 Subject: [PATCH] Issue 087: a machine states its host only when the mesh sends it something MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Measured live. All four machines run the identical host binary — same digest, installed within eighteen seconds — and at first only one reported a version, which read as a difference where there was none. A machine publishes a report after an apply. The five-minute reconcile publishes nothing, because it is the machine keeping itself as declared rather than answering anything. So a current, idle machine never says, and the mesh cannot tell that from a machine running something ancient. Confirmed by pushing: not reported, then 04a27ca. Enough for the purpose, not enough for the claim. For deciding whether a new declaration field is safe it is sufficient — pushing is what the mesh is about to do, and the answer arrives with the act. For knowing what the mesh runs it is not, and "not reported" is worded as "nobody has asked recently" for that reason. Making a heartbeat carry it would close the gap and would change what a heartbeat is — a bare word that the node is there, deliberately carrying nothing else. Left alone rather than widened in passing. --- .../01-resolution.md | 32 +++++++++++++++++++ 1 file changed, 32 insertions(+) diff --git a/04-ISSUES/087-the-controller-cannot-tell-a-host-is-too-old/01-resolution.md b/04-ISSUES/087-the-controller-cannot-tell-a-host-is-too-old/01-resolution.md index 436b06d..16e88dd 100644 --- a/04-ISSUES/087-the-controller-cannot-tell-a-host-is-too-old/01-resolution.md +++ b/04-ISSUES/087-the-controller-cannot-tell-a-host-is-too-old/01-resolution.md @@ -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, 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 - *Should a node report the version of its host?* It already did. The gap was the reading.