bcrypt uses a random salt, so hashing the basic auth password on every run changed the Caddyfile each time and triggered the Caddy restart handler. Reuse the deployed hash while it still matches the vault password, and only make a new one when it doesn't (or on a fresh host). The old awk also turned htpasswd's trailing blank line into a stray line in the Caddyfile; the next deploy removes it once. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>