All checks were successful
continuous-integration/drone/push Build is passing
docker stack deploy doesn't prune services the head compose dropped (discourse PR#4 drops sidekiq), leaving them orphaned on the base image. perform_upgrade now reconciles the live stack to the head compose service set (lifecycle.prune_orphan_services). Makes the deployed stack faithfully reflect the head — no test weakened. No-op when service sets match / compose unresolvable.