You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Update notice shows "1.14.7 is available" on a server that already runs 1.14.7 #552
Checked against main (eb6aa69). The notice comes from a stored check result that outlives the upgrade:
The check compares correctly at the time it runs: newerThan() in apps/server/src/updates/check.ts returns a release only if compareSemver(version, running) > 0. On the instance it last ran while 1.14.6 (or older) was running, so it stored latest = 1.14.7 in instance_settings.
The job (apps/server/src/updates/job.ts) runs hourly but asks GitHub only about once a day, at a random hour per instance (updateCheckDue). After the upgrade, nothing re-evaluates the stored result until that next run.
readUpdateCheck() returns stored.latest as it is, with no comparison against the running KEPT_VERSION.
UpdateLine (apps/web/src/components/ops/update-line.tsx) shows the notice whenever updates.latest is set, and prints the running version from the status right next to it — hence "1.14.7 is available … this server runs 1.14.7".
So it heals itself at the next daily check, but for up to a day after every upgrade the notice offers the version that is already installed.
Possible fix: in readUpdateCheck() drop latest unless compareSemver(stored.latest.version, KEPT_VERSION) > 0 (the read already knows the running version), or have the job re-run the check once at start when the stored result is not newer than the running version. A test: store latest = X, run with KEPT_VERSION = X, expect latest: null.
Confirmed on the instance: clicking Check now (Admin → Status → Updates) cleared the notice immediately — the card now reads "Up to date", checked just now, release 1.14.7 (database at migration 0176). That matches the analysis above: the stored result from before the upgrade was only replaced by a fresh check. Until a fix lands, Check now after an upgrade is the workaround.
Activity
strausmann commentedon Nov 13, 2026
Checked against
main(eb6aa69). The notice comes from a stored check result that outlives the upgrade:newerThan()inapps/server/src/updates/check.tsreturns a release only ifcompareSemver(version, running) > 0. On the instance it last ran while 1.14.6 (or older) was running, so it storedlatest = 1.14.7ininstance_settings.apps/server/src/updates/job.ts) runs hourly but asks GitHub only about once a day, at a random hour per instance (updateCheckDue). After the upgrade, nothing re-evaluates the stored result until that next run.readUpdateCheck()returnsstored.latestas it is, with no comparison against the runningKEPT_VERSION.UpdateLine(apps/web/src/components/ops/update-line.tsx) shows the notice wheneverupdates.latestis set, and prints the running version from the status right next to it — hence "1.14.7 is available … this server runs 1.14.7".So it heals itself at the next daily check, but for up to a day after every upgrade the notice offers the version that is already installed.
Possible fix: in
readUpdateCheck()droplatestunlesscompareSemver(stored.latest.version, KEPT_VERSION) > 0(the read already knows the running version), or have the job re-run the check once at start when the stored result is not newer than the running version. A test: storelatest = X, run withKEPT_VERSION = X, expectlatest: null.strausmann commentedon Nov 13, 2026
Confirmed on the instance: clicking Check now (Admin → Status → Updates) cleared the notice immediately — the card now reads "Up to date", checked just now, release 1.14.7 (database at migration 0176). That matches the analysis above: the stored result from before the upgrade was only replaced by a fresh check. Until a fix lands, Check now after an upgrade is the workaround.