tests/gateway/test_discord_thread_persistence.py::TestDiscordThreadPersistence::test_starts_empty_when_no_state_file tests/gateway/test_discord_thread_persistence.py::TestDiscordThreadPersistence::test_track_thread_persists_to_disk tests/gateway/test_discord_thread_persistence.py::TestDiscordThreadPersistence::test_threads_survive_restart tests/gateway/test_discord_thread_persistence.py::TestDiscordThreadPersistence::test_duplicate_track_does_not_double_save tests/gateway/test_discord_thread_persistence.py::TestDiscordThreadPersistence::test_caps_at_max_tracked_threads tests/gateway/test_discord_thread_persistence.py::TestDiscordThreadPersistence::test_capacity_keeps_newest_thread_when_existing_state_is_full tests/gateway/test_discord_thread_persistence.py::TestDiscordThreadPersistence::test_corrupted_state_file_falls_back_to_empty tests/gateway/test_discord_thread_persistence.py::TestDiscordThreadPersistence::test_missing_hermes_home_does_not_crash