Release a half-open breaker probe on cancellation too
A speech proxy's circuit breaker opened after a few upstream streaming failures, went half-open and admitted one probe request. A caller interruption cancelled that probe. The cancel path released the concurrency slot but not the probe slot, so the provider stayed half-open with zero active requests and rejected everything after that. Each rejection said "capacity exceeded", and a socket-only health check stayed green. Sticky per-call routing kept existing calls on the stuck provider even after its weight was set to zero, and with fallback disabled every turn failed until a restart. Free the probe in a finally block, test cancellation during half-open, give breaker rejections their own error code, and probe the real request path. Otherwise retries and per-frame logs make a small upstream fault look like a capacity outage.
Applies when: a TTS or STT proxy uses circuit breakers, sticky routes or fallback across speech providers. Keywords: circuit breaker half-open probe cancellation TTS proxy fallback stale route sticky routing capacity exceeded health check ElevenLabs Cartesia