From 8f133b1be10cf88b18b4245efcefa2c0015755dd Mon Sep 17 00:00:00 2001 From: rcourtman Date: Sat, 18 Apr 2026 20:42:12 +0100 Subject: [PATCH] Fix agent infinite update loop on dev builds MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The /api/agent/version endpoint was returning the git-describe version (e.g. 6.0.0-rc.2+git.58.g53a9339.dirty) for dev builds, which is always semantically newer than the binary's embedded version (v6.0.0-rc.1). This caused agents to loop: check version → see "newer" → self-update → restart → still same binary version → loop again. The agent's guard ("skip if server reports 'dev'") only fires for the literal string "dev". Fix: return "dev" whenever IsDevelopment is true, which covers all git-built/dirty dev instances. --- internal/api/router.go | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/internal/api/router.go b/internal/api/router.go index cd7f8af21..6e20488e0 100644 --- a/internal/api/router.go +++ b/internal/api/router.go @@ -4866,9 +4866,11 @@ func (r *Router) handleAgentVersion(w http.ResponseWriter, req *http.Request) { return } - // Return the server version - all agents should match the server version + // Return the server version - all agents should match the server version. + // Dev/git builds return "dev" so agents don't enter an infinite update loop + // (the agent skips updates when the server reports "dev"). version := "dev" - if versionInfo, err := updates.GetCurrentVersion(); err == nil { + if versionInfo, err := updates.GetCurrentVersion(); err == nil && !versionInfo.IsDevelopment { version = versionInfo.Version }