Answer
After applying a wave, ArgoCD waits for those resources to become Healthy before starting the next wave, subject to timeouts. There's also a short delay (configurable) between waves. If a wave's resources never become Healthy, later waves won't proceed and the sync stalls.
Real-world example The next wave doesn't start until the database in the current wave reports Healthy.