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

Freegle / Iznik / 27871
72%
master: 72%

Build:
Build:
LAST BUILD BRANCH: fix/matched-posts-similarity-floor
DEFAULT BRANCH: master
Ran 19 Jul 2026 03:34PM UTC
Jobs 4
Files 1428
Run time 1min
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

19 Jul 2026 03:06PM UTC coverage: 72.467%. First build
27871

Pull #1122

circleci

edwh
feat(matched): one-click relevantallowed opt-out + reach-exact matching

Implements the two Future Improvements from this PR.

Targeted opt-out (Future 1):
- apiv2 GET|POST /user/relevantoff?u=&k= sets relevantallowed=0,
  key-authenticated by the user's users_logins Link key — a one-click
  List-Unsubscribe (RFC 8058) and footer link that stop ONLY these
  suggestion emails, not the whole account.
- LoginLinkService mints/reuses the Link key; MatchedPosts points its
  List-Unsubscribe header and a visible footer link at the endpoint.
- Also fixes a latent gap: MatchedPosts was missing configureMessage(),
  so it had no X-Freegle-* tracking or List-Unsubscribe headers at all.

Reach-exact (Future 2):
- MatchedPostsService::verifyReach keeps a shown match only if it is in
  apiv2's matchesForPost for the recipient's OWN matched post (which
  reach-filters against that post's owner). Direction (i) is free;
  direction (ii) costs one extra apiv2 call per surviving recipient post,
  dropping matches that haven't rippled out instead of mailing on bbox
  proximity.

Tests: 3 Go relevantoff cases; LoginLinkService get-or-create; a
reach-drop service case + updated fixtures; integration assertions for
the opt-out link + List-Unsubscribe header. Go 3526 + Laravel 4865 green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013YqwEGSmzjUbHM3QinYAxX
Pull Request #1122: feat: matched-posts email (vector-based resurrection of "Any of these take your fancy?")

13221 of 17420 branches covered (75.9%)

Branch coverage included in aggregate %.

438 of 538 new or added lines in 10 files covered. (81.41%)

138689 of 192207 relevant lines covered (72.16%)

37.85 hits per line

Uncovered Changes

Lines Coverage ∆ File
29
12.58
iznik-batch/app/Console/Commands/Mail/TestMailCommand.php
26
74.76
iznik-server-go/message/postmatches.go
24
78.95
iznik-batch/app/Mail/Matched/MatchedPosts.php
16
89.87
iznik-batch/app/Services/MatchedPostsService.php
2
95.92
iznik-batch/app/Console/Commands/Message/NotifyMatchedPostsCommand.php
2
72.27
iznik-batch/app/Services/FreegleApiClient.php
1
97.3
iznik-server-go/user/relevantoff.go
Jobs
ID Job ID Ran Files Coverage
27871 vitest - 27871 19 Jul 2026 03:35PM UTC 764
70.56
CircleCI Job 27871
27871 playwright - 27871 19 Jul 2026 03:35PM UTC 75
22.08
CircleCI Job 27871
27871 go - 27871 19 Jul 2026 03:34PM UTC 160
83.48
CircleCI Job 27871
27871 laravel - 27871 19 Jul 2026 03:34PM UTC 503
69.39
CircleCI Job 27871
Source Files on build 27871
  • Tree
  • List 1428
  • Changed 0
  • Source Changed 0
  • Coverage Changed 0
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • CircleCI Build #27871
  • Pull Request #1122
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