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>