<!-- this doc is generated by ./scripts/docs/post-moderation-behaviors.mjs -->

# Post moderation behaviors

This document is a reference for the expected behaviors for a post in the application based on some given scenarios. The <code>moderatePost()</code> command condense down to the following yes or no decisions:

- <code>res.content.filter</code> Do not show the post in feeds.
- <code>res.content.blur</code> Put the post behind a warning cover.
- <code>res.content.noOverride</code> Do not allow the post's blur cover to be lifted.
- <code>res.content.alert</code> Add a warning to the post but do not cover it.
- <code>res.avatar.blur</code> Put the avatar behind a cover.
- <code>res.avatar.noOverride</code> Do not allow the avatars's blur cover to be lifted.
- <code>res.avatar.alert</code> Put a warning icon on the avatar.
- <code>res.embed.blur</code> Put the embed content (media, quote post) behind a warning cover.
- <code>res.embed.noOverride</code> Do not allow the embed's blur cover to be lifted.
- <code>res.embed.alert</code> Put a warning on the embed content (media, quote post).

Key:

- ❌ = Filter Content
- 🚫 = Blur (no-override)
- ✋ = Blur
- 🪧 = Alert

## Scenarios

<table>

<tr><th>Scenario</th><th>Filter</th><th>Content</th><th>Avatar</th><th>Embed</th></tr>
<tr>
<td><strong>Imperative label ('!hide') on post</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!hide') on author profile</strong></td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!hide') on author account</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!hide') on quoted post</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Imperative label ('!hide') on quoted author account</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-promote') on post</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-promote') on author profile</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-promote') on author account</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-promote') on quoted post</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-promote') on quoted author account</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!warn') on post</strong></td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!warn') on author profile</strong></td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!warn') on author account</strong></td>
<td>

</td>
<td>
✋
</td>
<td>
✋
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!warn') on quoted post</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Imperative label ('!warn') on quoted author account</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on post when logged out</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on author profile when logged out</strong></td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on author account when logged out</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on quoted post when logged out</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on quoted author account when logged out</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on post when logged in</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on author profile when logged in</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on author account when logged in</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on quoted post when logged in</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Imperative label ('!no-unauthenticated') on quoted author account when logged in</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr><th>Scenario</th><th>Filter</th><th>Content</th><th>Avatar</th><th>Embed</th></tr>
<tr>
<td><strong>Blur label ('intolerant') on post (hide)</strong></td>
<td>
❌
</td>
<td>
✋
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on author profile (hide)</strong></td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on author account (hide)</strong></td>
<td>
❌
</td>
<td>
✋
</td>
<td>
✋
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on quoted post (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on quoted author account (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on post (warn)</strong></td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on author profile (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on author account (warn)</strong></td>
<td>

</td>
<td>
✋
</td>
<td>
✋
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on quoted post (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on quoted author account (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on post (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on author profile (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on author account (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on quoted post (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur label ('intolerant') on quoted author account (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr><th>Scenario</th><th>Filter</th><th>Content</th><th>Avatar</th><th>Embed</th></tr>
<tr>
<td><strong>Blur-media label ('porn') on post (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on author profile (hide)</strong></td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on author account (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>
✋
</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on quoted post (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on quoted author account (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on post (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on author profile (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on author account (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on quoted post (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on quoted author account (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on post (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on author profile (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on author account (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on quoted post (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Blur-media label ('porn') on quoted author account (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr><th>Scenario</th><th>Filter</th><th>Content</th><th>Avatar</th><th>Embed</th></tr>
<tr>
<td><strong>Notice label ('scam') on post (hide)</strong></td>
<td>
❌
</td>
<td>
🪧
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on author profile (hide)</strong></td>
<td>

</td>
<td>

</td>
<td>
🪧
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on author account (hide)</strong></td>
<td>
❌
</td>
<td>
🪧
</td>
<td>
🪧
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on quoted post (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🪧
</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on quoted author account (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🪧
</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on post (warn)</strong></td>
<td>

</td>
<td>
🪧
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on author profile (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>
🪧
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on author account (warn)</strong></td>
<td>

</td>
<td>
🪧
</td>
<td>
🪧
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on quoted post (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
🪧
</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on quoted author account (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
🪧
</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on post (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on author profile (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on author account (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on quoted post (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Notice label ('scam') on quoted author account (ignore)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr><th>Scenario</th><th>Filter</th><th>Content</th><th>Avatar</th><th>Embed</th></tr>
<tr>
<td><strong>Adult-only label on post when adult content is disabled</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Adult-only label on author profile when adult content is disabled</strong></td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Adult-only label on author account when adult content is disabled</strong></td>
<td>
❌
</td>
<td>

</td>
<td>
🚫
</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Adult-only label on quoted post when adult content is disabled</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Adult-only label on quoted author account when adult content is disabled</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr><th>Scenario</th><th>Filter</th><th>Content</th><th>Avatar</th><th>Embed</th></tr>
<tr>
<td><strong>Self-post: Imperative label ('!hide') on post</strong></td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!hide') on author profile</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!hide') on author account</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!hide') on quoted post</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!hide') on quoted author account</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!warn') on post</strong></td>
<td>

</td>
<td>
✋
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!warn') on author profile</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!warn') on author account</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!warn') on quoted post</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Self-post: Imperative label ('!warn') on quoted author account</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on post (hide)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on author profile (hide)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on author account (hide)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on quoted post (hide)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on quoted author account (hide)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on post (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on author profile (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on author account (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on quoted post (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Self-post: Blur-media label ('porn') on quoted author account (warn)</strong></td>
<td>

</td>
<td>

</td>
<td>

</td>
<td>

</td>
</tr>

<tr><th>Scenario</th><th>Filter</th><th>Content</th><th>Avatar</th><th>Embed</th></tr>
<tr>
<td><strong>Post with blocked author</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Post with blocked quoted author</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Post with author blocking user</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Post with quoted author blocking user</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Post with muted author</strong></td>
<td>
❌
</td>
<td>
✋
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Post with muted quoted author</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr>
<td><strong>Post with muted-by-list author</strong></td>
<td>
❌
</td>
<td>
✋
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Post with muted-by-list quoted author</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

<tr><th>Scenario</th><th>Filter</th><th>Content</th><th>Avatar</th><th>Embed</th></tr>
<tr>
<td><strong>Prioritization: post with blocking & blocked-by author</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Prioritization: post with blocking & blocked-by quoted author</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Prioritization: '!hide' label on post by blocked user</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>
🚫
</td>
<td>

</td>
</tr>

<tr>
<td><strong>Prioritization: '!hide' label on quoted post, post by blocked user</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>
🚫
</td>
<td>
🚫
</td>
</tr>

<tr>
<td><strong>Prioritization: '!hide' and 'intolerant' labels on post (hide)</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Prioritization: '!warn' and 'intolerant' labels on post (hide)</strong></td>
<td>
❌
</td>
<td>
✋
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Prioritization: '!hide' and 'porn' labels on post (hide)</strong></td>
<td>
❌
</td>
<td>
🚫
</td>
<td>

</td>
<td>

</td>
</tr>

<tr>
<td><strong>Prioritization: '!warn' and 'porn' labels on post (hide)</strong></td>
<td>
❌
</td>
<td>

</td>
<td>

</td>
<td>
✋
</td>
</tr>

</table>
