Every enforcement action now requires two pieces of text:
- Reason — user-facing. Emailed to the target and shown on
/bannedor/suspended. - Moderator note — internal only. Written to the Moderator Notes panel on the user's admin page via
ModNote::create. Never shown to the target.
Without a note the form is rejected with a clear flash. Also applies in the moderation queue at /admin/moderation/{id}. The shadow-ban toggle on the user-page sidebar prompts for a note via window.prompt when enabling (removing a shadow ban doesn't require one).
Why this exists. The user-facing reason is often a template citation — accurate but thin on specifics. Without a mod note, the "why this, not something lighter" context vanishes the moment the mod who pressed the button logs off. Sysops auditing the mod log need a paper trail; appeal reviewers need it even more.
Session invalidation confirmed in the flash. "User suspended for 3 days and logged out of all active sessions." Keeps everyone honest about what the button actually does.