--- 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.