Behavior for optional alert delivery sinks.
Sinks receive severity-shaped envelopes so later plans can route incidents and notifications without hard vendor coupling.
@type envelope() :: map()
@type result() :: {:ok, map()} | {:error, term()}
@callback publish(envelope()) :: result()