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

Freegle / Iznik / 24536
72%

Build:
DEFAULT BRANCH: master
Ran 03 Jul 2026 11:45AM UTC
Jobs 4
Files 1370
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

03 Jul 2026 11:20AM UTC coverage: 71.681% (+0.001%) from 71.68%
24536

push

circleci

invalid-email-address
fix(digest): bound getPostsForUser load so the daily digest can't OOM (DIGEST_LOAD_CAP)

The daily digest (mail:digest:unified --mode=daily) streams recipients with lazyById(500),
but getPostsForUser() loaded the ENTIRE backlog since a member's cursor in one unbounded
->get() with attachments/fromUser/groups eager-loaded, then filtered/scored/dedup'd in PHP
down to the 65 it renders. When the run fell behind, each stuck member's cursor went stale,
so the window grew to days × groups (worse after the rippling full-enable added groups per
member), the eager-loaded Collection blew the 1GB PHP memory_limit
("Allowed memory size ... exhausted" at Connection.php fetchAll), and the run died part-way
— leaving higher-id members unreached, their cursors stale, and the next window even bigger
(self-amplifying). Prod symptom: daily sends collapsed 38.6k/day (06-28) -> 12 (07-01);
~44k of 78k daily members stuck with lastsent before 06-29.

Cap the load at DIGEST_LOAD_CAP (500). Oldest-first + limit means a backlogged member drains
500 posts per run (updateDigestTracker already advances the cursor past exactly what's loaded)
until caught up — bounded per-member memory, no OOM, no posts lost. Normal daily volume is
well under the cap so steady-state digests are unchanged. Not a sharding problem; the per-
member load itself is now bounded. Verified end-to-end on a stuck member (1 sent, 0 errors).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_015DQRL5iGD71jNTgyokMpt9

12262 of 16215 branches covered (75.62%)

Branch coverage included in aggregate %.

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

130608 of 183099 relevant lines covered (71.33%)

37.82 hits per line

Jobs
ID Job ID Ran Files Coverage
24536 playwright - 24536 03 Jul 2026 11:45AM UTC 74
22.78
CircleCI Job 24536
24536 laravel - 24536 03 Jul 2026 11:45AM UTC 477
68.76
CircleCI Job 24536
24536 go - 24536 03 Jul 2026 11:45AM UTC 145
83.88
CircleCI Job 24536
24536 vitest - 24536 03 Jul 2026 11:45AM UTC 747
69.42
CircleCI Job 24536
Source Files on build 24536
  • Tree
  • List 1370
  • Changed 2
  • Source Changed 0
  • Coverage Changed 2
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • CircleCI Build #24536
  • 9da99421 on github
  • Prev Build on master (#24524)
  • Next Build on master (#24549)
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