tests/gateway/test_background_process_notifications.py::TestLoadBackgroundNotificationsMode::test_defaults_to_all tests/gateway/test_background_process_notifications.py::TestLoadBackgroundNotificationsMode::test_reads_config_yaml tests/gateway/test_background_process_notifications.py::TestLoadBackgroundNotificationsMode::test_env_var_overrides_config tests/gateway/test_background_process_notifications.py::TestLoadBackgroundNotificationsMode::test_false_value_maps_to_off tests/gateway/test_background_process_notifications.py::TestLoadBackgroundNotificationsMode::test_invalid_value_defaults_to_all tests/gateway/test_background_process_notifications.py::test_run_process_watcher_respects_notification_mode[all-sessions0-1-is still running] tests/gateway/test_background_process_notifications.py::test_run_process_watcher_respects_notification_mode[result-sessions1-0-None] tests/gateway/test_background_process_notifications.py::test_run_process_watcher_respects_notification_mode[off-sessions2-0-None] tests/gateway/test_background_process_notifications.py::test_run_process_watcher_respects_notification_mode[result-sessions3-1-finished with exit code 0] tests/gateway/test_background_process_notifications.py::test_run_process_watcher_respects_notification_mode[error-sessions4-0-None] tests/gateway/test_background_process_notifications.py::test_run_process_watcher_respects_notification_mode[error-sessions5-1-finished with exit code 1] tests/gateway/test_background_process_notifications.py::test_run_process_watcher_respects_notification_mode[all-sessions6-1-finished with exit code 0] tests/gateway/test_background_process_notifications.py::test_thread_id_passed_to_send tests/gateway/test_background_process_notifications.py::test_no_thread_id_sends_no_metadata tests/gateway/test_background_process_notifications.py::test_inject_watch_notification_routes_from_session_store_origin tests/gateway/test_background_process_notifications.py::test_agent_notification_carries_message_id_reply_anchor tests/gateway/test_background_process_notifications.py::test_agent_notification_no_message_id_is_tolerated tests/gateway/test_background_process_notifications.py::test_inject_watch_notification_carries_message_id_reply_anchor tests/gateway/test_background_process_notifications.py::test_build_process_event_source_falls_back_to_session_key_chat_type tests/gateway/test_background_process_notifications.py::test_build_process_event_source_uses_cached_live_source_before_session_key_parse tests/gateway/test_background_process_notifications.py::test_inject_watch_notification_ignores_foreground_event_source tests/gateway/test_background_process_notifications.py::test_build_process_event_source_returns_none_for_empty_evt tests/gateway/test_background_process_notifications.py::test_build_process_event_source_returns_none_for_invalid_platform tests/gateway/test_background_process_notifications.py::test_build_process_event_source_returns_none_for_short_session_key tests/gateway/test_background_process_notifications.py::test_parse_session_key_valid tests/gateway/test_background_process_notifications.py::test_parse_session_key_with_extra_parts tests/gateway/test_background_process_notifications.py::test_parse_session_key_with_user_id_part tests/gateway/test_background_process_notifications.py::test_parse_session_key_dm_with_thread tests/gateway/test_background_process_notifications.py::test_parse_session_key_thread_chat_type tests/gateway/test_background_process_notifications.py::test_parse_session_key_too_short tests/gateway/test_background_process_notifications.py::test_parse_session_key_wrong_prefix