c0a4535a26
Response to teknium1's hermes-sweeper review (keep_open, salvageability=medium). 1. Post-auth gate. The group-99 catch-all fired gateway_platform_event before the authorization boundary. Extract _is_source_authorized(source) from _is_user_authorized_from_message and add _source_from_reaction_for_auth; reactions whose actor the intake would reject no longer reach plugins. Fails closed if source extraction raises, so a future non-reaction event type cannot silently bypass auth before its own extraction is wired. 2. Shared registration. Extract _register_handlers(app) from connect() so the gateway_platform_event observer (group 99) is re-registered alongside the core handlers on any rebuild path. 3. Trim inert hook surface. Drop the three reserved gateway_* names from VALID_HOOKS (keep only gateway_platform_event). The others land with their real contracts and fire-sites when #64231 is finalized. Tests: unauthorized/authorized/open reaction gating, fail-closed for a future non-reaction event type, and _register_handlers re-registration. Ran /simplify and /code-review (high) before pushing.