diff --git a/04-ISSUES/087-the-controller-cannot-tell-a-host-is-too-old/00-report.md b/04-ISSUES/087-the-controller-cannot-tell-a-host-is-too-old/00-report.md index 28d2ee0..a59c887 100644 --- a/04-ISSUES/087-the-controller-cannot-tell-a-host-is-too-old/00-report.md +++ b/04-ISSUES/087-the-controller-cannot-tell-a-host-is-too-old/00-report.md @@ -2,7 +2,7 @@ status: resolved opened: 2026-09-22 located-in: [mesh-controller internal/link/protocol.go (the report field that was missing), internal/inventory, cmd/mesh-controller (node show and status)] -fixed-by: mesh-controller 7683ba8 +fixed-by: mesh-controller 7683ba8, corrected by 1d9c102 amended-design: --- 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 16e88dd..a200dd1 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,49 @@ 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. +## What I shipped first was wrong, and the mesh said so within the hour + +The first version reported *"N machine(s) run an older host than another machine does"* and worked out +which by comparing versions as strings. **A host reports its version as a commit, and commits have no +order.** + +On the live mesh, with the adopted machine pushed for the first time: + +``` +3 machine(s) run an older host than another machine does: + g14 04a27ca + novox 04a27ca + shanks 04a27ca +``` + +Those three run the **newer** host — installed 09:18, against the adopted machine's 01:13. `ced54d4` +sorts above `04a27ca` and that is all it means. An arbitrary lexicographic result, presented as a fact, +about the one thing this record exists to make trustworthy. + +The code carried a caveat saying versions compare as strings and that this "is enough for the timestamps +and commits this mesh uses". That was the error, written down and not noticed: it is enough for +timestamps and it is **meaningless** for commits, and the mesh reports commits. + +It now reports the split and claims no ordering: + +``` +4 machine(s) do not all run the same host: + 04a27ca g14, novox, shanks + ced54d4 ace + + a host refuses a declaration carrying a field it does not know, whole — so the mesh may + send only what every one of these understands. Which of them is newer is not readable + from a commit; that needs a version the host reports as ordered +``` + +More useful as well as more honest — the reader sees who is on which side of the split, which is what +decides whether a field can be sent — and it leaves the ordering where it belongs: with the host, which +would have to report something ordered for anybody to have it. + +**This is [issue 145](../145-a-machine-reads-healthy-while-its-modules-cannot-reach-each-other/00-report.md) +arriving by my own door**, an hour after closing it: a report that confidently says the opposite of the +truth is worse than one that says less, because it trains a reader to distrust the whole surface. + ## 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