tests/gateway/test_hooks.py::TestHookRegistryInit::test_empty_registry tests/gateway/test_hooks.py::TestDiscoverAndLoad::test_loads_valid_hook tests/gateway/test_hooks.py::TestDiscoverAndLoad::test_skips_missing_hook_yaml tests/gateway/test_hooks.py::TestDiscoverAndLoad::test_skips_missing_handler_py tests/gateway/test_hooks.py::TestDiscoverAndLoad::test_skips_no_events tests/gateway/test_hooks.py::TestDiscoverAndLoad::test_skips_no_handle_function tests/gateway/test_hooks.py::TestDiscoverAndLoad::test_nonexistent_hooks_dir tests/gateway/test_hooks.py::TestDiscoverAndLoad::test_multiple_hooks tests/gateway/test_hooks.py::TestEmit::test_emit_calls_sync_handler tests/gateway/test_hooks.py::TestEmit::test_emit_calls_async_handler tests/gateway/test_hooks.py::TestEmit::test_wildcard_matching tests/gateway/test_hooks.py::TestEmit::test_no_handlers_for_event tests/gateway/test_hooks.py::TestEmit::test_handler_error_does_not_propagate tests/gateway/test_hooks.py::TestEmit::test_emit_default_context tests/gateway/test_hooks.py::TestEmitCollect::test_collects_sync_return_values tests/gateway/test_hooks.py::TestEmitCollect::test_collects_async_return_values tests/gateway/test_hooks.py::TestEmitCollect::test_drops_none_return_values tests/gateway/test_hooks.py::TestEmitCollect::test_handler_exception_does_not_abort_chain tests/gateway/test_hooks.py::TestEmitCollect::test_wildcard_match_also_collected tests/gateway/test_hooks.py::TestEmitCollect::test_no_handlers_returns_empty_list tests/gateway/test_hooks.py::TestEmitCollect::test_default_context