When content disappears silently — no email, no notification, no reason given — users experience it as arbitrary punishment. DSA Art. 17 requires that platforms communicate content removal decisions to affected users with the reasons cited. Beyond compliance, transparent moderation builds user trust: users who understand why content was removed can correct behavior, appeal wrongful decisions, or accept enforcement as legitimate. Platforms that hide moderation reasoning generate more appeals and more user churn than those that explain decisions clearly.
Medium because silent moderation actions create DSA compliance exposure and drive user churn through perceived arbitrariness, but do not directly expose data or enable attacks.
Send notifications whenever moderation actions are taken against a user's content. Extend src/lib/moderation.ts to trigger a notification on every enforcement action:
async function notifyModerationAction(
userId: string,
action: 'removed' | 'hidden' | 'warned',
reason: string,
category: string
) {
await db.notifications.create({
userId,
type: 'moderation',
title: `Your content was ${action}`,
body: `Reason: ${reason} (${category}). Review our community guidelines or submit an appeal.`,
createdAt: new Date(),
});
// Also send email if user has email notifications enabled
}
A generic 'content removed' notice without a stated reason does not satisfy this check — the notification must include both the reason and the violation category.
ID: community-moderation-safety.policy-transparency.moderation-transparency
Severity: medium
What to look for: Check if users are notified when content is removed or actions are taken. Look for notification emails, in-app messages, or dashboard alerts. Verify that the reason for removal is communicated.
Pass criteria: When content is removed or a user is punished, they receive a notification (email, in-app, or dashboard alert) that includes at least 2 pieces of information: the reason for the action and the violation category. On pass, enumerate all notification channels used (email, in-app, push) and report the ratio of moderation actions that trigger notifications.
Fail criteria: Users are not notified of moderation actions. Content disappears silently. A generic "content removed" notice without a reason does not count as pass.
Skip (N/A) when: Platform has fewer than 100 active users or is internal-only with no external accounts.
Detail on fail: "When posts are deleted, users receive no notification. They have no idea why their content was removed."
Remediation: Send users notifications when their content is removed. Add to src/lib/moderation.ts:
async function notifyUser(userId, action, reason, category) {
await db.notifications.create({
userId, type: 'moderation',
title: `Content ${action}`,
body: `Your content was ${action} for: ${reason} (${category})`,
createdAt: new Date()
});
}