da302b5d54
Unit Tests / test (push) Successful in 7m32s
A stale or empty-token Caddyfile on disk caused Caddy to reject the /load request, so the Renew button appeared to do nothing. Now renew_cert() calls regenerate_with_installed([]) first, which writes a fresh Caddyfile from current identity/config before reloading Caddy. This ensures a broken on-disk file never blocks ACME renewal. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>