ecd6f608e5
The per-provider subagent limiter (providers.ollama-cloud.maxConcurrency) created a fresh Semaphore whenever the configured limit changed, orphaning in-flight slots on the old instance so a runtime or mixed limit value could exceed the cap. getProviderSemaphore now always hands out one shared limiter (Infinity when unlimited, so every run is still counted) and resizes it in place. Semaphore.release() decrements before admitting, and the new Semaphore.resize() raises the ceiling by admitting queued waiters while lowering it drains in-flight holders without admitting past the new cap. Refs #3464