Server-side capture layer for Feature 2 (login/IP audit) + base for Feature 3
(behavior analytics), on top of the already-deployed user_events table
(migration 184). record_event/schedule_event never raise into the caller —
audit logging must never break a real request.