tests/gateway/test_channel_directory.py::TestLoadDirectory::test_missing_file tests/gateway/test_channel_directory.py::TestLoadDirectory::test_valid_file tests/gateway/test_channel_directory.py::TestLoadDirectory::test_corrupt_file tests/gateway/test_channel_directory.py::TestBuildChannelDirectoryWrites::test_failed_write_preserves_previous_cache tests/gateway/test_channel_directory.py::TestResolveChannelName::test_exact_match tests/gateway/test_channel_directory.py::TestResolveChannelName::test_case_insensitive tests/gateway/test_channel_directory.py::TestResolveChannelName::test_guild_qualified_match tests/gateway/test_channel_directory.py::TestResolveChannelName::test_prefix_match_unambiguous tests/gateway/test_channel_directory.py::TestResolveChannelName::test_prefix_match_ambiguous_returns_none tests/gateway/test_channel_directory.py::TestResolveChannelName::test_no_channels_returns_none tests/gateway/test_channel_directory.py::TestResolveChannelName::test_no_match_returns_none tests/gateway/test_channel_directory.py::TestResolveChannelName::test_topic_name_resolves_to_composite_id tests/gateway/test_channel_directory.py::TestResolveChannelName::test_id_match_takes_precedence_over_name tests/gateway/test_channel_directory.py::TestResolveChannelName::test_display_label_with_type_suffix_resolves tests/gateway/test_channel_directory.py::TestBuildFromSessions::test_builds_from_sessions_json tests/gateway/test_channel_directory.py::TestBuildFromSessions::test_missing_sessions_file tests/gateway/test_channel_directory.py::TestBuildFromSessions::test_deduplication_by_chat_id tests/gateway/test_channel_directory.py::TestBuildFromSessions::test_keeps_distinct_topics_with_same_chat_id tests/gateway/test_channel_directory.py::TestFormatDirectoryForDisplay::test_empty_directory tests/gateway/test_channel_directory.py::TestFormatDirectoryForDisplay::test_telegram_display tests/gateway/test_channel_directory.py::TestFormatDirectoryForDisplay::test_discord_grouped_by_guild tests/gateway/test_channel_directory.py::TestLookupChannelType::test_forum_channel tests/gateway/test_channel_directory.py::TestLookupChannelType::test_regular_channel tests/gateway/test_channel_directory.py::TestLookupChannelType::test_unknown_chat_id_returns_none tests/gateway/test_channel_directory.py::TestLookupChannelType::test_unknown_platform_returns_none tests/gateway/test_channel_directory.py::TestLookupChannelType::test_channel_without_type_key_returns_none tests/gateway/test_channel_directory.py::TestBuildSlack::test_no_team_clients_falls_back_to_sessions tests/gateway/test_channel_directory.py::TestBuildSlack::test_lists_channels_from_users_conversations tests/gateway/test_channel_directory.py::TestBuildSlack::test_paginates_via_response_metadata_cursor tests/gateway/test_channel_directory.py::TestBuildSlack::test_per_workspace_error_does_not_block_others tests/gateway/test_channel_directory.py::TestBuildSlack::test_session_dms_merged_when_not_in_api_results tests/gateway/test_channel_directory.py::TestBuildSlack::test_skips_channels_with_no_id_or_name tests/gateway/test_channel_directory.py::TestBuildSlack::test_response_not_ok_breaks_pagination_for_that_workspace tests/gateway/test_channel_directory.py::TestChannelAliases::test_alias_renames_existing_entry_on_load tests/gateway/test_channel_directory.py::TestChannelAliases::test_alias_injects_undiscovered_group tests/gateway/test_channel_directory.py::TestChannelAliases::test_no_alias_file_is_noop tests/gateway/test_channel_directory.py::TestChannelAliases::test_corrupt_alias_file_is_ignored tests/gateway/test_channel_directory.py::TestChannelAliases::test_alias_persists_through_rebuild tests/gateway/test_channel_directory.py::TestChannelAliases::test_apply_aliases_handles_malformed_map