8e9702d227
The session hygiene compression path tracked its per-session failure cooldown in an in-memory dict (_hygiene_compression_failure_cooldowns). When the gateway restarted, the dict was gone, so the next message re-triggered the same failing compression, wedging session storage. The state DB already has a persistent column (sessions.compression_failure_cooldown_until) and full read/write/clear methods (record_/get_/clear_compression_failure_cooldown in hermes_state.py) used by the in-conversation compression path (context_compressor.py) but not by the session hygiene path in gateway/run.py. Fix: replace the in-memory dict with calls to the persistent DB methods: - Cooldown check: use get_compression_failure_cooldown instead of dict lookup - Timeout failure: use record_compression_failure_cooldown instead of dict write - Abort failure: use record_compression_failure_cooldown instead of dict write After a restart, a session whose compression is in cooldown is now skipped for the cooldown's remaining duration rather than re-attempted immediately. Fixes #74136