Each service wait loop now fails after 30 retries (~60s) instead of spinning forever when a port is occupied by a stuck process. Also added cleanup label that kills partially-started services on failure.