This change improves performance during large scale-up operations by
creating ephemeral runners in parallel instead of sequentially.
Key improvements:
- Implement parallel runner creation using goroutines
- Add concurrency limit (10) via semaphore pattern to prevent API overload
- Maintain thread-safe error collection with mutex
- Use atomic counter for accurate progress tracking
- Preserve all existing error handling and logging behavior
Expected impact: 5-10x faster scale-up for large runner sets (e.g., 1→100 runners)
The implementation uses:
- sync.WaitGroup to coordinate goroutine completion
- Buffered channel as semaphore to limit concurrent API calls
- sync.Mutex to protect shared error slice
- sync/atomic for thread-safe progress counter
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Co-authored-by: Cory Miller <cory-miller@github.com>
Co-authored-by: Nikola Jokic <nikola-jokic@github.com>
Co-authored-by: Ava Stancu <AvaStancu@github.com>
Co-authored-by: Ferenc Hammerl <fhammerl@github.com>
Co-authored-by: Francesco Renzi <rentziass@github.com>
Co-authored-by: Bassem Dghaidi <Link-@github.com>