543b7c9508
Bug #1: _check_stall возвращался early если alive=False (pipeline ZMQ dead). Но pipeline может hung без exit'а (ffmpeg process жив но encoder deadlock): ZMQ не отвечает (alive=False), при этом encoder не emit'ит frames в mediamtx. Wrapper script не retry'ит (process не exited), никто не поднимает алерт. Fix: stall check работает ВНЕ зависимости от alive. Bug #2: _check_stall возвращался early если /live publish session отсутствует в mediamtx /v3/rtspsessions/list. Pipeline мог никогда не подключиться (или TCP push session дропнулся). Treat as "frozen at 0 bytes" — stall alert fire'ится через N polls. Bug #3 (bonus): _check_instance логировал "lost" но не emit'ил MQTT event. HA не видела алертов. Fix: добавлен on_event call для pipeline_lost и pipeline_restored (paired с уже существующими pipeline_stalled / pipeline_unstalled). Verified на сегодняшнем incident: pipeline encoder hung 4 hours, никто не реагировал. После fix monitor emit'ит lost+stalled события через 12 секунд → MQTT-listener (HA automation) может сделать docker restart cuda-grid-pipeline. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>