diff --git a/04-ISSUES/163-a-delivered-host-stood-aside-on-every-push-and-reported-nothing/00-report.md b/04-ISSUES/163-a-delivered-host-stood-aside-on-every-push-and-reported-nothing/00-report.md new file mode 100644 index 0000000..6a1c04d --- /dev/null +++ b/04-ISSUES/163-a-delivered-host-stood-aside-on-every-push-and-reported-nothing/00-report.md @@ -0,0 +1,56 @@ +--- +status: resolved +opened: 2026-09-30 +located-in: [mesh-host cmd/mesh-host/main.go (the successor check after an apply)] +fixed-by: mesh-host PR 58 — the check asks with the running version, read from the binary's path, not the link-time stamp +amended-design: +--- + +# 163 — A delivered host stood aside on every push, and reported nothing + +## What was observed + +*2026-09-30, rolling the mesh-built host onto the last two machines.* + +Every push to a machine running a delivered host produced, in order: + +``` +host 093231796eb0 is delivered; standing aside so the launcher runs it +applied 333 resource(s) +applied, and could not tell the mesh: reporting: context canceled +nox-mesh-host-launch: the host exited cleanly; starting it again +nox-mesh-host-launch: running /usr/lib/nox-mesh-host/versions/093231796eb0/nox-mesh-host +``` + +— for the version it was **already running**. It restarted itself on every push, for ever, and the mesh +never received a single report from it: `node show` kept the version from before the crossover, and +the operator's push waited its full three minutes for an answer that was never coming. + +Read as healthy throughout: unit active, bus link up, "hearing what this node should be". + +## Why + +After an apply the host asks whether a newer host has been delivered than the one running, and the +question was asked with the **link-time version stamp**. Since +[issue 161](../161-a-delivered-host-carries-none-of-its-link-time-facts/01-resolution.md) a delivered +host's version comes from where it sits and its stamp is `development build` — so the comparison never +matched the newest delivered version, and "a newer host is waiting" was always true. + +Standing aside cancels the context the report is published with, so the report was lost on every one +of those applies. Two faults from one wrong argument. + +The change that moved the version to the path was applied to the report and to the known-good record, +and not here. Half a change, and the half left behind was the one that decides whether to exit. + +## Why the three-minute wait made it invisible + +The push's `--wait` timing out read as *slow*. It was not slow: **the report was never going to arrive.** +The operator put it exactly: *if you don't get a response in five seconds, something is wrong.* A wait +long enough to absorb a machine's whole apply is a wait long enough to hide that the machine never +answered. + +## How it is checked + +A machine running a delivered host is pushed a declaration that delivers nothing new; it applies, +reports, and does not stand aside. A machine running a delivered host is pushed a genuinely newer +version; it stands aside once, and the next push it does not.