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

Freegle / Iznik / 24558
72%

Build:
DEFAULT BRANCH: master
Ran 03 Jul 2026 01:39PM UTC
Jobs 4
Files 1370
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

03 Jul 2026 01:13PM UTC coverage: 71.69% (-0.02%) from 71.705%
24558

push

circleci

invalid-email-address
feat(digest): shard the daily digest (hash key) so it covers the userbase in-window

The daily digest ran a single un-sharded worker gated to a 5-hour 07:00-12:00 window.
At full cutover (~78k daily members) one worker reaches only a fraction before the window
closes, so most members backlog for days. Shard it like immediate/reach.

- console.php: 4 parallel daily shards (everyThirtyMinutes, 07:00-12:00). Kept at 4, not 8:
  this 6-core host's per-user cost (spatial reach-gate + MJML render) makes the bottleneck
  largely shared/downstream, so more workers add contention/CPU rather than throughput —
  8 saturated the box.
- Shard key is CRC32(users.id) % shards, NOT MOD(users.id, shards): under Galera/Percona the
  auto-increment stride equals the cluster size (auto_increment_increment) with a per-node
  offset, so raw ids are non-contiguous and a MOD split skews hard when the shard count
  shares a factor with the cluster size. A hash is uniform for any count and immune to the
  stride / cluster-size changes.
- SendUnifiedDigestCommand::lockKeySuffix() now keys the per-shard flock by MODE too, so
  daily shard N and immediate shard N no longer share a lock file and block each other.

Builds on the DIGEST_LOAD_CAP memory bound (prior commit) which keeps each shard's per-user
load from OOMing regardless of backlog depth.

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

12266 of 16222 branches covered (75.61%)

Branch coverage included in aggregate %.

0 of 4 new or added lines in 2 files covered. (0.0%)

30 existing lines in 2 files now uncovered.

130644 of 183122 relevant lines covered (71.34%)

37.9 hits per line

Uncovered Changes

Lines Coverage ∆ File
3
54.26
-0.58% iznik-batch/app/Console/Commands/Mail/SendUnifiedDigestCommand.php
1
84.67
0.0% iznik-batch/app/Services/UnifiedDigestService.php

Coverage Regressions

Lines Coverage ∆ File
29
62.14
-3.03% iznik-nuxt3/components/PostMap.vue
1
94.77
0.0% iznik-batch/app/Services/AutoRepostService.php
Jobs
ID Job ID Ran Files Coverage
24558 go - 24558 03 Jul 2026 01:39PM UTC 145
83.89
CircleCI Job 24558
24558 laravel - 24558 03 Jul 2026 01:39PM UTC 477
68.75
CircleCI Job 24558
24558 vitest - 24558 03 Jul 2026 01:39PM UTC 747
69.43
CircleCI Job 24558
24558 playwright - 24558 03 Jul 2026 01:39PM UTC 74
22.75
CircleCI Job 24558
Source Files on build 24558
  • Tree
  • List 1370
  • 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 #24558
  • 2c10865c on github
  • Prev Build on master (#24549)
  • Next Build on master (#24596)
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