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.