6edf4ac9de
on_no_runnable now dispatches on why every source was rejected instead of falling through two serial branches. Under wait, a fully open circuit sleeps out the cooldown and comes back for another round; the breaker's protection is untouched (still not a single request leaves during the wait, so no quota or money burns) -- what changes is whether the caller dies on the spot or queues. Dispatching is not cosmetic. Left serial, wait would fall into the quota branch and a caller with quota_full=fail_fast would get a quota_exhausted error while its quota was in fact fine. _nap sleeps to the cooldown deadline rather than polling every 10ms, which for a 60s cooldown is 6000 round trips per in-flight call on the Redis backend. Jitter is added on top instead of scaling the wait, since waking early before a known deadline just earns another rejection. Both arms clamp to the remaining stall budget, so the worst case per call is stall_window plus one poll and does not drift with max_cooldown_s. The clamp's lower bound is the jitter itself, not poll_interval -- the latter would have lifted the existing [0.5p, 1.0p] quota polling.