# Do not swap Approve / Reject buttons in the spam queue!

**URL:** <https://meta.discourse.org/t/do-not-swap-approve-reject-buttons-in-the-spam-queue/375951>\
**Category:** UX\
**Tags:** review-queue\
**Created:** [July 26, 2025, 12:29pm UTC](https://meta.discourse.org/t/do-not-swap-approve-reject-buttons-in-the-spam-queue/375951 "2025-07-26T12:29:54Z")\
**Posts on this page:** 1\
**Showing post:** 18

<div class="post-metadata">

**Author:** ![awesomerobot](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/awesomerobot/32/142900_2.png) [@awesomerobot](https://meta.discourse.org/u/awesomerobot)\
**Post date:** [November 9, 2026, 9:17pm UTC](https://meta.discourse.org/t/do-not-swap-approve-reject-buttons-in-the-spam-queue/375951/18 "2026-11-09T21:17:27Z")

</div>

I already had this started based on an earlier topic, completing it here:

> <https://github.com/discourse/discourse/pull/45915>
>
> This is enabled under a beta upcoming change \`Consistent review queue answers\` s…o sites that need adjustment time can opt-out if needed. 
> 
> Based on feedback in https://meta.discourse.org/t/do-not-swap-approve-reject-buttons-in-the-spam-queue/375951?u=awesomerobot and other similar topics linked within.
> 
> Previously we had a mix of directions for questions in the review queue: 
> 
> \* Approve this user? yes = approve  
> \* Is this post spam? yes = penalize
> 
> This can cause confusion and mental overhead in situations where moderators are quickly reviewing many items in the queue. As an alternative, this change re-frames all our questions in the direction of:
> 
> \* "Is there something wrong with this post / topic / account?
> 
> So "yes" always confirms a problem and there's no flip-flopping. 
> 
> \<img width="1380" height="260" alt="image" src="https://github.com/user-attachments/assets/086b2058-b36c-462c-885a-1e351f652216" /\>
> \<img width="1380" height="260" alt="image" src="https://github.com/user-attachments/assets/cb3d9d59-e17f-48fa-8366-87dbd589aa0d" /\>
> 
> 
> This also revises the badges and filters on reviewed content to share a single direction as well. Previously we had: 
> 
> \* Flag approved (which means there was something wrong) = green badge
> \* Post rejected (which also means there was something wrong) = red badge 
> 
> Instead we can apply 
> 
> \* "problem confirmed" = red
> \* "no problem found" = green 
> 
> \<img width="1380" height="254" alt="image" src="https://github.com/user-attachments/assets/107740d4-1dc7-4994-adcc-7bd49b3b9561" /\>
> \<img width="1380" height="266" alt="image" src="https://github.com/user-attachments/assets/48a97474-6c0c-4e7d-a35b-8cf93a13cb16" /\>
> 
> 
> Additionally:
> 
> \- "Yes" is always the first button
> \- Resolved approval items (e.g. a rejected queued post) no longer show the question... they show "Moderator actions" with an explicit "Approve post" button.
> \- The timeline matches the badge: "Problem confirmed by …" / "No problem found by …" instead of "Approved by" / "Rejected by".
> \- The status filter offers "Problem confirmed" / "No problem found" instead of "Approved" / "Rejected". 
> \- The labels use new i18n keys instead of editing the old "Yes"/"No" strings, so stale translations can't show the opposite meaning. 
> \- The questions are whole sentences per noun, which makes translation simpler for gendered languages

and a corresponding update for Akismet (just to fix specs based on the core change)

> <https://github.com/discourse/discourse-akismet/pull/223>
>
> This corresponds with core renaming of the review page object's status helpers b…y outcome rather than by status, because "approved" means opposite things for flags and for approval-style items (https://github.com/discourse/discourse/pull/45915)
> 
> \- \`have\_reviewable\_with\_approved\_status\` → \`have\_reviewable\_with\_problem\_confirmed\_status\`
> \- \`have\_reviewable\_with\_rejected\_status\` → \`have\_reviewable\_with\_no\_problem\_found\_status\`
> 
> All of this plugin's reviewables are flag-style: confirming spam sets \`approved\` (problem confirmed) and "not spam" sets \`rejected\` (no problem found). So they keep core's default \`approval\_style? = false\` and no model changes are needed.
> 
> The specs fall back to the old helper names when core doesn't have the new ones, following the existing \`confirm\_deletion\` pattern.

---

_[View the full topic](https://meta.discourse.org/t/do-not-swap-approve-reject-buttons-in-the-spam-queue/375951)._
