cc0e023941
run() now turns subprocess.TimeoutExpired into rc=124, so the poll loop and on_connect can no longer die on a stalled lgtv.sh (34adf28only guarded the command path). A failed ON/OFF publishes a fresh status probe instead of the requested state. Payload decode uses errors="replace"; safe_handle (34adf28) already kept bad bytes from killing paho's thread. tests/test_bridge.py replays the reviewer's three repros. Fixes-finding: uncaught-helper-timeout-stops-bridge Fixes-finding: failed-power-commands-publish-success-state Fixes-finding: malformed-mqtt-payload-kills-network-loop Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>