From 91273ebb08fa8701635155728bb98506a3b9fac4 Mon Sep 17 00:00:00 2001 From: Luxit Date: Thu, 27 Aug 2026 22:38:30 +0200 Subject: [PATCH] Sync the self-hosting stack --- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8000c57..87bb8b7 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,36 @@ one of them changed. An entry says which artefact and which version, so `web 0.1 Every version published to a channel appears here. Nothing is written from memory afterwards: a build cannot be published without its entry. +## 2026-08-27 — A machine could show Offline while you were using it `api 0.95.0` `web 0.121.0` + +**Only affects deployments running more than one copy of the api.** On Docker Compose this cannot +happen and there is nothing here for you beyond taking the build. + +An agent could sit in the list marked **Offline** while its last heartbeat was seconds old and a +terminal was open on it. The machine was fine throughout — it was the row that was wrong, and it +stayed wrong until that machine happened to reconnect, which for one that never drops is never. + +It took a restart to start. When an api replica stops it closes its agents' sockets and records +them as offline, which is true of the sockets it just closed. An agent notices immediately and +reconnects to another replica in milliseconds, and that replica records it as online — then the +stopping one's bookkeeping ran and overwrote it. Whichever machines happened to reconnect inside +that window were left marked offline for good. + +Two things changed so that it cannot stick. A replica shutting down now checks whether each machine +has already been picked up elsewhere and leaves those alone. And a heartbeat arriving on a socket +repairs a row that claims the machine is gone — so any window left over closes itself within the +minute, without restarting anything. + +**A machine that is revoked or waiting for approval is never changed by this.** Those are decisions +you made, and a heartbeat is not one. + +**And the list no longer disagrees with the machine's own page.** The page has always reported +whether a socket is attached right now; the list printed the stored status instead, so the two could +say different things about the same machine. When they disagree the list now leads with the live +connection and marks the row as catching up. The opposite case is unchanged: a machine that claims +to be online with no socket attached still reads **Online · reconnecting**, because there the stored +value is the one over-promising and you want to see it. + ## 2026-08-27 — Redis can survive losing a node `api 0.94.0` **Nothing to do on Docker Compose.** Every setting below is optional and absent by default, and an