One best-practice check from an insights report. id is an open set (the catalog grows across score versions), and severity/status are plain strings so future wire values never break decoding. detail is free-form JSON (a map) or nil.
id
severity
status
detail
nil
@type t() :: %MillionSend.Emails.Insights.Check{ detail: term(), id: term(), penalty: term(), severity: term(), status: term() }