When a spam or rude/abusive flag is raised on a post, a downvote is automatically applied from the Community user. This downvote immediately affects the post's score upon the flag being raised.

When a moderator clears (disputes) the spam and rude/abusive flags on a post, the downvotes from the flags are immediately removed, a score recalculation is triggered, and the new score is sent out to the SE WebSocket for all users who have the question page open to get an updated score.

Bug: Declining a spam or rude/abusive flag doesn't trigger post score recalculation

Unfortunately, when a moderator declines a spam or rude/abusive flag, while the downvote is immediately removed in the system, a score recalculation is not triggered for the post. The post's denormalized score is not changed. The new score is not sent out via the WebSocket (there is no new score to send, because it hasn't been updated). If you reload the page, you still see the score with the downvote from the declined spam and/or rude/abusive flag(s) applied. If nothing is done, then it can take many hours prior to the score being updated. I've personally seen it take 12+ hours for the score to be updated by the system. This is inconsistent with the behavior for clearing (disputing) red flags, which immediately updates the denormalized score.

A score recalculation for the post should be triggered immediately when a spam or rude/abusive flag is declined.

Not immediately updating the post's denormalized score allows some of the harm from the declined spam or rude/abusive flag(s) to continue. This seems to be a bug, as there doesn't appear to be a reason why the score wouldn't be immediately recalculated when a spam or rude/abusive flag is declined.

Workarounds: load the score breakdown or quickly vote then unvote on the post

If someone loads the score breakdown, or votes-up/down the post, then the post's score is immediately recalculated, no longer including the downvote(s) from the declined spam and rude/abusive flag(s). So, in order to immediately remove the lingering downvote from a declined spam or rude/abusive flag, then you can click on the post's score to load the score breakdown or vote. If loading the score breakdown doesn't cause a recalculation and you don't want to leave an upvote or downvote, then you can click on either the upvote or downvote button and quickly click on the same button again to return your vote to what it was. Having your vote briefly applied/removed will still result in the post's score being recalculated without the declined spam and/or rude/abusive flag(s). Voting, of course, requires that your up/downvote for the post is not locked in.

  • 1
    A better workaround is to load the score breakdown for the post, which forces a score recalculation as well. Afaik this was intentional, though, because invalidating votes can trigger race conditions. If there are multiple spam flags being declined causing multiple downvotes to be invalidated at once, it would attempt to update the post score multiple times simultaneously.
    – animuson StaffMod
    Feb 23, 2021 at 6:05
  • 1
    Re: the 12+ hours to be corrected... Post scores are recalculated for all posts once a day (last I checked at 0:00 UTC) for all posts in the system, which is what fixes scores for all vote invalidations too.
    – animuson StaffMod
    Feb 23, 2021 at 6:07
  • 5
    @animuson That same argument in your first comment can also be applied to clearing (disputing) red flags, but it works just fine for that case. What's different in declining them instead? Feb 23, 2021 at 6:13
  • @animuson Yeah, I'd assumed it was a once a day recalculation, based on when it happened, but I didn't do enough testing to be sure it wasn't twice a day. As to loading the score breakdown, that does sound better, but I thought I'd tried that first and it didn't work. OTOH, I have a userscript which may have interfered with that, but shouldn't have interfered on SO where I have the native privilege. As to no recalc being intentional: The operation is different between disputing (removed; recalc immediately) and declining (removed, but no score recalc). At a minimum, it should be consistent.
    – Makyen
    Feb 23, 2021 at 6:16
  • 1
    @Sonic Good question. I've no idea. Declining is probably a much lazier version of the clear functionality that was never updated.
    – animuson StaffMod
    Feb 23, 2021 at 6:18
  • 2
    @animuson If the issue is concern over a race condition between potential immediate subsequent flag declines, how about a recount that's after a short timer expires? Having the recalculation even a minute or two after the decline would be dramatically better than up to 24 hours later. From a moderator's POV the existing workaround is substantial extra time/effort and must be remembered. Many/most of declined flags are going to be from the flag dashboard, which removes the post from the dashboard immediately upon the flags being declined, making doing something to the post afterwards difficult.
    – Makyen
    Feb 23, 2021 at 6:42
  • 1
    I imagine trying to make it work how the clear flags option works is probably the most viable option. I don't know if it's possible but it's worth investigating. It's not quite as simple as just setting up another timer to fix post scores.
    – animuson StaffMod
    Feb 23, 2021 at 21:23
  • 3
    "Clear flags" rewrites history; it probably should not be used under normal circumstances. For timing concerns, the sensible option is probably to mark posts as needing a recalc and then do them on schedule, same as is done for users.
    – Shog9
    Feb 24, 2021 at 0:18
  • 3
    We've added this to our list of items to be taken care of during our regular bug duty work.
    – Catija
    Mar 15, 2021 at 17:42

1 Answer 1


A fix for this has gone live today, Feb 7th, 2023.

A recalculation is now triggered after any flag type is cleared that deletes a downvote, which now includes spam and rude/abusive flags.

  • This will be quite helpful. Thanks for working on it and getting it pushed out.
    – Makyen
    Feb 7 at 16:33

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .