Deploy auf den Timer-Server / deploy (push) Successful in 18s
Auf dem Zielhost gibt es kein rsync (und im Runner-Container laeuft es wegen des Docker-Hosts ohnehin nicht). Der ausgerollte Commit steht jetzt in /opt/timer-app/.deploy-commit; die Aenderungsliste kommt aus git diff gegen diesen Stand. Das ist genauer als ein Zeitstempelvergleich: geloeschte Dateien sind als solche benannt und werden gezielt entfernt, und ob npm ci und ein Neustart noetig sind, entscheidet dieselbe Liste. Ist kein Vorgaengerstand bekannt, gilt alles als neu. Der Pruefschritt bricht jetzt ab, wenn der Deploy-Benutzer im Zielpfad nicht schreiben darf - das ist besser als ein halb ausgerollter Stand. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>