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

Freegle / Iznik / 28545
73%

Build:
DEFAULT BRANCH: master
Ran 24 Jul 2026 02:09PM UTC
Jobs 4
Files 1441
Run time 3min
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

24 Jul 2026 01:39PM UTC coverage: 72.752%. Remained the same
28545

push

circleci

invalid-email-address
fix(chat): bump latestmessage on delivery so replies to dormant rooms surface

A reply into a chat room dormant longer than the 31-day CHAT_ACTIVE_LIMIT did
not appear in the recipient's chat list for up to an hour, even though the
notification email fired within seconds. Freegle keeps one User2User room per
pair of members (reused across items), so a reply to a new post routinely lands
in a room whose last message was months/years ago.

ListForUser filters chat_rooms.latestmessage >= now - 31d, but neither
CreateChatMessage nor ChatProcessService bumped latestmessage - only the hourly
chats:update-counts recompute (ChatMaintenanceService) did. So the room stayed
outside the list window until that cron next ran; reload didn't help because the
backend genuinely omitted it. The email path keys off chat_messages.date, not
latestmessage, so it was unaffected - producing "email arrived but the chat
isn't showing" for ~43 min (real case: Torbrexbones, 2026-07-24).

Bump latestmessage when the message becomes deliverable, gated on the same
condition the email and in-app fetch use (not held for review, not spam):
- ChatProcessService::processIncoming - in the deliverable (!$review) branch.
- RippleReplyService::release - the rippling held-reply release path had the
  identical gap (release only set status='released').
GREATEST guards against moving latestmessage backwards. The hourly recompute
remains as a backfill; mod approval already bumps via updateMessageCounts.

Adds regression tests: deliverable reply bumps a dormant room's latestmessage;
a held-for-review reply does not.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01C8sWePQ4uPg39NoP3FcaJo

13383 of 17587 branches covered (76.1%)

Branch coverage included in aggregate %.

12 of 12 new or added lines in 2 files covered. (100.0%)

140586 of 194047 relevant lines covered (72.45%)

38.11 hits per line

Jobs
ID Job ID Ran Files Coverage
28545 go - 28545 24 Jul 2026 02:09PM UTC 162
83.44
CircleCI Job 28545
28545 vitest - 28545 24 Jul 2026 02:10PM UTC 770
70.72
CircleCI Job 28545
28545 playwright - 28545 24 Jul 2026 02:10PM UTC 75
21.95
CircleCI Job 28545
28545 laravel - 28545 24 Jul 2026 02:10PM UTC 508
70.26
CircleCI Job 28545
Source Files on build 28545
  • Tree
  • List 1441
  • Changed 5
  • Source Changed 0
  • Coverage Changed 5
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • CircleCI Build #28545
  • 54ad55bb on github
  • Prev Build on master (#28527)
  • Next Build on master (#28607)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc