Defdelegates with same arity but different argument name for different argument types

I think it’s fine to delegate to a function with multiple heads and to just use an argument name that is clear. The name event_or_user_id is pretty obvious. As an aside, I wonder if you might consider whether it is more explicit at the callsite to have separate function names like agent_registered and agent_registered_by_id. Sometimes it’s nice having a function that can handle either a struct or an ID. Other times it can lead to a lack of clarity of what you’re dealing with and a whole bunch of functions needing to handle both data types rather than just always sticking with one or the other.