v0.9.0
What's Changed
forceOpen()andforceClose()skipped the transition lock and the same-state guard, so a repeatedfuse:openre-firedCircuitBreakerOpenedevery time. Both now take the same path as automatic transitions. Thanks @SeadSilajdzic (#20).- Run
fuse:openorfuse:closeagainst a circuit that's already in that state and it says "was already open" instead of claiming it opened something. - New README sections: listener examples for Slack, Prometheus and Laravel Pulse, a Stripe outage walkthrough from first failure to recovery, and how to isolate one customer's broken webhook using per-entity circuit names.
Upgrading
forceOpen() and forceClose() return bool now rather than void. Ignore it and nothing changes; override either one in a subclass and you'll need to update the signature.
The one thing to watch: fuse:open on an already-open circuit no longer resets opened_at. If you were leaning on that to keep a circuit held open, it will now recover on schedule.
Full Changelog: v0.8.0...v0.9.0