I think the issue is that somewhere along the way (maybe the V1 → V2 change?) the way that machines respond to flyctl deploy --remote-only --auto-confirm (running on CI) changed: V1 machines would always run on deploy, then run according to their schedule, meaning that the deploy command would successfully complete.
But this is no longer happening: once the image is deployed, the machine doesn’t start automatically, so the deploy times out after 60 seconds and I get a failure report.
But it turns out that the new machine is fine: I can run it using fly m start [id] and it behaves exactly as it’s supposed to (starts up, talks to db, exits with 0). I can also list its schedule, and it’s also correct.
So maybe I’m missing a fly.toml entry telling the machine what to do when it’s deployed, or I need to change my CI deploy command (although I can’t see anything obvious I can change in the fly deploy command.