Approve threw NullReferenceException (user.Membership!) for a chat-tier account and
InvalidOperationException for an unknown id. It now refuses with the existing visible
notice and writes nothing; the docs say the chat tier holds no membership, so approval
does not invent one. Suspended rows with no stored reason show admins a fixed
"Suspended before reasons were recorded"; the old text is not read from the audit trail.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>