Acho que encontrei o problema. Quando faço uma reconstrução, nunca reinicio o Caddy. A partir de agora, vou fazer isso:
./launcher rebuild app && systemctl reload caddy
Suspeito que o Caddy use o cache de soquetes ou algo semelhante após uma reconstrução. Mas isso geralmente não acontece imediatamente após a reconstrução. Vamos ver.