Creo que he encontrado el problema. Si realizo una reconstrucción, nunca reinicio Caddy. A partir de ahora, voy a hacer esto:
./launcher rebuild app && systemctl reload caddy
Sospecho que Caddy utiliza la caché de sockets o algo similar después de una reconstrucción. Pero normalmente no ocurre inmediatamente después de una reconstrucción. Ya veremos.