diff --git a/CHANGELOG.md b/CHANGELOG.md index 117289f..dd0e87a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -9,6 +9,38 @@ 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-28 — Machines no longer flicker offline when they reconnect `api 0.97.0` + +**Only affects deployments running more than one copy of the api.** On Docker Compose one of these +could still happen — a machine reconnecting to the single container — and the fix applies there too, +but the wave of them does not. + +**The one to read if you run several replicas.** When something in front of Jarvis closes a batch of +agent connections at once — a rollout of your ingress controller, a proxy being replaced, a load +balancer reloading — every affected machine reconnects within a second. That is normal and the +agents handle it. Jarvis did not: the reconnections raced the bookkeeping for the connections they +were replacing, and machines that were connected and working were recorded as offline. Calls to them +were refused with "the agent is not connected" while a terminal to the same machine was open. + +Four things were wrong underneath, and all four are fixed: + +- **A connection that had already been replaced still did the bookkeeping for its own ending** — + including writing "offline" about a machine whose new connection was already live. +- **Two connections from the same machine to the same replica could not be told apart**, so the old + one's cleanup deleted the new one's registration, and the old one's keep-alive timer kept a dead + registration alive. +- **Registration was published without waiting**, leaving a moment where a replica held a working + connection that none of the others could see. +- **A command sent to the replica that held the machine a moment ago gave up** instead of asking + again where it had moved. It now retries once, so a reconnection costs a pause rather than an + error. + +**What you should see afterwards.** Reconnections still happen when proxies restart — that part is +not something Jarvis can prevent — but they stop producing false "offline" states, and commands in +flight during one survive it. + +**Nothing to do.** Take the build. + ## 2026-08-28 — Models other than OpenAI's work again `api 0.96.0` **Read this if you point Jarvis at anything other than OpenAI.** Self-hosted models, Qwen, Llama,