Issue 087: what I shipped first said the opposite of the truth
It reported "N machines run an older host than another" by comparing versions as strings. A host reports its version as a commit, and commits have no order. On the live mesh it named the three machines running the NEWER host as the ones behind — ced54d4 sorts above 04a27ca and that is all it means. The code even 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: enough for timestamps, meaningless for commits, and the mesh reports commits. It now reports the split and claims no ordering, which is more useful as well as more honest — the reader sees who is on which side, and that is what decides whether a field can be sent. Ordering is left with the host, which would have to report something ordered for anybody to have it. This is issue 145 arriving by my own door an hour after I closed it: a report that confidently says the opposite of the truth is worse than one that says less.
This commit is contained in:
@@ -2,7 +2,7 @@
|
|||||||
status: resolved
|
status: resolved
|
||||||
opened: 2026-09-22
|
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)]
|
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:
|
amended-design:
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -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,
|
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.
|
||||||
|
|
||||||
|
## 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
|
## 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
|
All four machines run the identical host binary — same digest, installed within eighteen seconds of each
|
||||||
|
|||||||
Reference in New Issue
Block a user