* ♻️ refactor(worker): decouple state management using command-query pattern
This commit eliminates all uses of sync.Mutex across the `worker.go` and `client.go`
components, changing how mutable state is accessed and modified. Single Owner
Principle is now enforced.
- Guarantees thread safety and prevents data races by ensuring that only one goroutine
ever modifies or reads state.
Impact: Improves application concurrency, reliability, and maintainability by isolating state
concerns.
* 🐛 fix(worker): fix race condition when closing
The use of select/default is wrong for mandatory shutdown signals.
* 🐛 fix(worker): do not get tickers in every iteration
* 🐛 fix(worker): fix race condition when closing pt 2
refactor `handleOutgoing` to mirror the non-blocking logic of `handleIncoming`
* address comments
* To ensure stream errors are always processed, the send should be blocking.
* avoid blocking the manager loop while waiting for tasks to complete
---------
Co-authored-by: Chris Lu <chrislusf@users.noreply.github.com>
Co-authored-by: Chris Lu <chris.lu@gmail.com>