Fixes two bugs that left the sauna uncontrollable from Home Assistant.
A finished session silently gated every later write.
The controller's countdown is mirrored into the staged set_min while it runs,
and the mirror freezes the moment the controller stops — parking set_min on 0.
is_idle_target() then reported "nothing to do" forever, so mode and temperature
changes were staged and never sent. Selecting a heating mode now supplies the
default duration when no usable one is staged. It never overrides a duration you
chose, and never fills one in for "off", which would turn a stop into a start.
Unloading the integration raised TypeError.
async_shutdown awaited Debouncer.async_shutdown, which is a sync @callback
despite the name. The error fired inside async_unload_entry, so the unload
failed, the config entry was left half-torn-down and every entity went
unavailable until a restart — and reloading from the UI failed every time.
Also adds tests/test_source_guards.py. The existing tests are pure and never
execute coordinator.py, which is why the await slipped through; the new guard
parses the sources for awaits on known-sync helpers and carries a self-test so a
green run says something about the guard itself.