The triage processor was kicking off all eligible tasks simultaneously, queuing them all on the semaphore regardless of available slots. Now it checks semaphore.availableCount first and only starts as many triage tasks as there are free slots. Remaining tasks get picked up on the next poll cycle (default 10-15s) as slots free up. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>