• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

Freegle / Iznik / 25045
72%
master: 72%

Build:
Build:
LAST BUILD BRANCH: feat/ripple-reachable-node-gate
DEFAULT BRANCH: master
Ran 05 Jul 2026 10:32PM UTC
Jobs 4
Files 1369
Run time 2min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

05 Jul 2026 09:53PM UTC coverage: 71.823% (+0.003%) from 71.82%
25045

Pull #967

circleci

edwh
fix(microvolunteering): stop re-notifying users who already reviewed a post

Discourse 9856: a moderator kept being asked to check the same post - she
checks it, taps "Yes that looks ok", gets "Thanks", but the "post to check"
badge stays lit and the same post is presented again, for days, on app and web.

Root cause (confirmed against production: 100% of 50 stuck cases over 30 days
were notifications created AFTER the user's vote): MicrovolunteeringNotifyService
never consults the microactions table before inserting a new Exhort notification,
so it re-notifies users who have already reviewed a message. 88% of cases are
driven by rippling - ExpandService inserts a fresh messages_groups row with
arrival=NOW() each time the post ripples into another group, so the
"arrival > NOW()-1day" eligibility gate keeps re-selecting the same message on
later cron ticks; the remaining 12% is the 24h dedup window resetting the next
day. The Go handler's UPDATE seen=1 marks existing rows at vote time but cannot
mark a notification the cron inserts hours or days later, so the badge count
legitimately returns > 0. This is why PR #941 (client-side count refresh) and
PR #965 (window.open -> router) did not fix it: both targeted the wrong mechanism.

Fix: preload, once per run, the set of (msgid -> userids) that already have a
CheckMessage microaction, and skip those users in pickCandidates. Permanent
per-user suppression, independent of rippling frequency or group count.

Discourse: https://discourse.ilovefreegle.org/t/9856

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U3Hp9AG5RzAxVQVzXpkwgn
Pull Request #967: fix(microvolunteering): stop re-notifying users who already reviewed a post (Discourse 9856)

12359 of 16366 branches covered (75.52%)

Branch coverage included in aggregate %.

20 of 20 new or added lines in 1 file covered. (100.0%)

2 existing lines in 2 files now uncovered.

131504 of 183935 relevant lines covered (71.49%)

38.07 hits per line

Coverage Regressions

Lines Coverage ∆ File
1
94.77
0.0% iznik-batch/app/Services/AutoRepostService.php
1
94.12
-0.74% iznik-nuxt3/components/SpinButton.vue
Jobs
ID Job ID Ran Files Coverage
25045 playwright - 25045 05 Jul 2026 10:32PM UTC 74
22.54
CircleCI Job 25045
25045 laravel - 25045 05 Jul 2026 10:32PM UTC 477
68.87
CircleCI Job 25045
25045 go - 25045 05 Jul 2026 10:32PM UTC 145
84.22
CircleCI Job 25045
25045 vitest - 25045 05 Jul 2026 10:32PM UTC 746
69.52
CircleCI Job 25045
Source Files on build 25045
  • Tree
  • List 1369
  • Changed 4
  • Source Changed 0
  • Coverage Changed 4
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • CircleCI Build #25045
  • Pull Request #967
  • PR Base - master (#25006)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc