A single-file bind mount pins the inode present at container start. ansible.builtin.copy replaces the file by rename, so the running container kept executing the previous kuma-setup.js: the #1358 deploy ran the old admin-only script (host md5 8d77..., container 55a2...) and created no notification, status page or metrics key. The script now lives in {{ uptime_kuma_dir }}/setup/, mounted read-only at /app/setup; the compose change recreates the container once. The old file path is removed. Verified on a local 2.5.6 container: a file replaced by rename in the mounted directory is visible inside, and the script run from /app/setup resolves socket.io-client and converges. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>