From a2542e51f8d149e62efb6e5f8e608efd4849ab9d Mon Sep 17 00:00:00 2001 From: jochen Date: Wed, 30 Sep 2026 10:36:40 +0200 Subject: [PATCH] A machine says little about itself, and only when the mesh asks it something MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Filed as a to-do. Nothing is broken by it: every machine here is amd64 and reports so, and one architecture is enough for now. When a machine joins, the mesh should collect what it reasonably can about it and refresh that daily. It already asks what a machine can do; what it is made of is the same question one level down. More is already collected than it looks — eight capabilities, the links that face outside, the host version, and on an adopted machine what it holds, what is reachable and the firewall and tunnel it was found with. The architecture and the kernel are in there too, and nothing reads either: measured, all four machines report amd64 and linux, and node show prints the capabilities beside them without printing them. Missing: memory, disk, the processor beyond its architecture, the distribution and its version, virtual or physical, cores, uptime. Several are what somebody wants when deciding where a module goes, and the placement code's own comment already imagines them. Also missing: the refresh. A machine publishes after an apply, and the five-minute reconcile publishes nothing, so the mesh's picture is as old as the last push. Same mechanism 087 wanted. This is the third thing in one day found to be collected and read nowhere, after held resources and the host version. Whatever gets added should say in the same breath which surface shows it, or it will be the fourth. 159 gains the note that the architecture is already reported, so matching an artifact to a machine needs no new fact — only the comparison and a compiler told what to target. --- .../00-report.md | 18 ++++ .../00-report.md | 92 +++++++++++++++++++ 2 files changed, 110 insertions(+) create mode 100644 04-ISSUES/160-a-machine-says-little-about-itself-and-only-when-asked/00-report.md diff --git a/04-ISSUES/159-an-artifacts-system-is-checked-and-then-ignored/00-report.md b/04-ISSUES/159-an-artifacts-system-is-checked-and-then-ignored/00-report.md index d20a5dc..9744b97 100644 --- a/04-ISSUES/159-an-artifacts-system-is-checked-and-then-ignored/00-report.md +++ b/04-ISSUES/159-an-artifacts-system-is-checked-and-then-ignored/00-report.md @@ -62,6 +62,24 @@ you it works. today and nothing will be until a machine differs — which is exactly how long a field like this stays invisible. +## The machine already says what it is + +Found while filing [issue 160](../160-a-machine-says-little-about-itself-and-only-when-asked/00-report.md): +every machine reports its architecture and kernel in the same profile that carries its capabilities, and +the mesh keeps them. + +``` + ace | amd64 | linux + g14 | amd64 | linux + novox | amd64 | linux + shanks | amd64 | linux +``` + +Nothing in the control plane reads either, and `node show` prints the capabilities beside them without +printing them. **So a fix does not need a new fact from the machine** — matching an artifact's declared +system against what a machine reported is possible today, and the missing piece is only the comparison +and a compiler told what to target. + ## Where to look The compile invocation is assembled in `mesh-controller internal/builder`, and for Go it would need diff --git a/04-ISSUES/160-a-machine-says-little-about-itself-and-only-when-asked/00-report.md b/04-ISSUES/160-a-machine-says-little-about-itself-and-only-when-asked/00-report.md new file mode 100644 index 0000000..0db7b01 --- /dev/null +++ b/04-ISSUES/160-a-machine-says-little-about-itself-and-only-when-asked/00-report.md @@ -0,0 +1,92 @@ +--- +status: open +opened: 2026-09-30 +located-in: + - mesh-host internal/profile (what a machine collects about itself) + - mesh-controller internal/inventory (what the mesh keeps of it) + - mesh-controller cmd/mesh-controller (node show, which displays a part of it) +fixed-by: +amended-design: +--- + +# 160 — A machine says little about itself, and only when the mesh asks it something + +*Filed as a to-do rather than a fault: nothing is broken by it today. `open` is the status this +repository has for "written down, nobody has started" — there is no `todo`.* + +## What is wanted + +**When a machine joins, the mesh should collect as much as it reasonably can about it**, and refresh +that daily or thereabouts. It already asks what the machine *can do*; what it is made of is the same +question one level down, and the mesh has no habit of asking it. + +## What is already collected, which is more than it looks + +A machine reports, and the mesh keeps: + +| | | +|---|---| +| eight capabilities | container-runtime, firewall, graphical-session, overlay, package-manager, privileged, seat, service-manager — each with a version or a reason it is absent | +| **its architecture and kernel** | in the same profile, beside the capabilities | +| which links face outside it | read from its own routing table on every apply | +| the version of the host running on it | added 2026-09-30 | +| what it found and is holding | on an adopted machine | +| what is reachable on it | every listening socket and published port, on an adopted machine | +| the firewall it was found with, and the tunnel it carried | on an adopted machine | + +**The architecture and the kernel are already there and nothing reads them.** Measured on the mesh: + +``` + ace | amd64 | linux + g14 | amd64 | linux + novox | amd64 | linux + shanks | amd64 | linux +``` + +`node show` prints the capabilities and not these two. No code in the control plane reads either. + +## What is missing + +**The facts.** Nothing is collected about memory, disk, the processor beyond its architecture, the +distribution and its version, whether the machine is virtual or physical, its uptime, its timezone, how +many cores it has. Several of those are what somebody actually wants when deciding where a module +should go, and the comment on module placement already imagines them: *"`seat: card1-DP-1`, an +architecture, an amount of memory"*. + +**The refresh.** A machine publishes what it knows about itself **after an apply**, and the five-minute +reconcile publishes nothing. So the mesh's picture of a machine is as old as the last time it sent that +machine something — found the same day while checking host versions, where three machines read as +having said nothing until each was pushed +([issue 087](../087-the-controller-cannot-tell-a-host-is-too-old/01-resolution.md)). A daily refresh is +the same missing mechanism: a machine saying something on its own schedule rather than only when spoken +to. + +**Somewhere to read it.** Whatever is collected has to be visible, or it joins the architecture in +being true and unread. + +## The pattern this is the third instance of + +Three times in one day the mesh was found to be collecting something and reading it nowhere: + +- what an adopted machine holds — reported since the adoption work, and no surface counted it until + [issue 125](../125-a-hold-is-not-a-line-in-the-apply-report/01-resolution.md); +- the host version — reported for a week, and the control plane's own copy of the report did not have + the field ([issue 087](../087-the-controller-cannot-tell-a-host-is-too-old/00-report.md)); +- the architecture and kernel — collected, stored, read by nothing, found today by being asked whether + the host is built for more than one processor + ([issue 159](../159-an-artifacts-system-is-checked-and-then-ignored/00-report.md)). + +**Collecting is the easy half and it is the half that gets done.** Whatever this issue adds should say, +in the same breath, which surface shows it — or it will be the fourth. + +## Why it is not urgent + +Every machine in this mesh is `amd64` and every one reports so. One architecture is enough for now, and +that is a decision rather than an oversight: a second processor is a second build of every component, +and nothing needs one. + +## How a fix is checked + +A machine's own account of itself is visible in one place; it names at least what is listed as missing +above; the newest of it is no older than a day on a machine nobody has pushed to; and a machine that +cannot determine one of them says so rather than reporting a zero. -- 2.54.0