1.85.1
Alerts now know what losing a server means for each service. "postgresql is down to 1 of 3 servers" on a Patroni cluster is not a problem, it is the design — the health check is what does the routing, so exactly one server passing is healthy, and the alert cried wolf on every round. Each service now carries an Alert when setting beside its health check: a server is lost (the default), no server is left — only the outage is news, and recovery is worded "serving again" rather than falsely claiming every server passes — or never. The Patroni recipes set outage-only by themselves. Existing services keep the default; Edit the service to change it.
What a full review of the code turned up, worst first. Joining a cluster silently skipped two shared sections — a node that joined got services admitting sign-in groups it had never heard of (which fail closed and refuse everyone) and no notification settings, until the first push happened by; it now receives everything and lands on the cluster's own revision. Replacing the administrator record from another node claimed to invalidate sessions and never did — a stolen cookie outlived the password change; the session secret rotates now. The daily update check could silently revert an edit made during its network fetch. Two background loops swallowed every exception without a word. And the drift alert's all-clear had been silently undeliverable since the alert existed, due to a state-naming mismatch.
Every screenshot retaken against a three-node cluster running this version — the menu with Basic auth and History in it, traffic sparklines with a visible incident, the sign-in annotations — plus one new picture: the History page. The rig that produces them is a committed script now (tools/screenshots/demo-cluster.sh), so the pictures cannot drift a year behind the application again.
Also: stale menu paths in the documentation corrected (a System section renamed long ago, groups that no longer exist), and the guard that catches them now reads the documentation, not just the code.
Packages are attached below; the container image is at ghcr.io/avandeputte/haproxy-manager:1.85.1.