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

Freegle / Iznik / 4619
70%

Build:
DEFAULT BRANCH: master
Ran 17 Apr 2026 09:45AM UTC
Jobs 4
Files 974
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

17 Apr 2026 07:02AM UTC coverage: 70.874% (+0.08%) from 70.79%
4619

push

circleci

web-flow
feat: sanitize misleading display names for non-mod users (#165)

Non-moderator users whose display name trades on the Freegle brand or
poses as a generic authority persona ("Admin", "Prize Winner") now
have their name rewritten to "A freegler" on display. Storage is
untouched — the user receives no signal that their name has been
flagged.

Exempt: systemrole Moderator/Support/Admin, or Owner/Moderator on any
group (many volunteers legitimately use Freegle-themed names).

Detection rules (see iznik-server-go/user/namevalidation.go):
 1. Any token fuzzy-matches a Tier A brand word (Damerau-Levenshtein
    ≤ 2, bounded by length difference).
 2. Concatenated form (obfuscation-resistant) matches a Tier A word.
 3. Weak-brand token ("freegler") alongside a Tier B authority word.
 4. Every token is a Tier B authority word.

Normalisation handles NFKD (diacritics, ZWJ), leet-speak (0→o, 3→e…)
and non-alphanumeric stripping, so "Fr33gle Supp0rt", "i Love freegle
Team" and "free.cycle" all match.

Applied at two egress points:
 - Go API GetUserById (primary user fetch path)
 - Laravel batch User::display_name accessor (emails)

The frontend resolves display names via the user store, so the Go
sanitiser covers user-facing API responses. V2 API stays ID-only.

TDD: failing tests first, then implementation.

Addresses Discourse thread #9587.

13184 of 20169 branches covered (65.37%)

Branch coverage included in aggregate %.

243 of 328 new or added lines in 4 files covered. (74.09%)

456 existing lines in 6 files now uncovered.

94090 of 131189 relevant lines covered (71.72%)

20.3 hits per line

Uncovered Changes

Lines Coverage ∆ File
47
69.08
iznik-batch/app/Support/NameSanitiser.php
37
77.02
iznik-server-go/user/namevalidation.go
1
82.82
-0.09% iznik-batch/app/Models/User.php

Coverage Regressions

Lines Coverage ∆ File
247
82.68
-0.08% iznik-server-go/message/message.go
171
89.5
0.08% iznik-server-go/user/user.go
17
87.71
-0.17% iznik-nuxt3/modtools/components/ModMessage.vue
10
54.17
0.0% iznik-nuxt3/components/ChatPane.vue
10
76.32
0.0% iznik-nuxt3/components/LayoutCommon.vue
1
82.03
0.36% iznik-server-go/microvolunteering/microvolunteering.go
Jobs
ID Job ID Ran Files Coverage
4619 laravel - 4619 17 Apr 2026 09:45AM UTC 173
66.0
CircleCI Job 4619
4619 playwright - 4619 17 Apr 2026 09:45AM UTC 229
45.65
CircleCI Job 4619
4619 go - 4619 17 Apr 2026 09:45AM UTC 112
78.84
CircleCI Job 4619
4619 vitest - 4619 17 Apr 2026 09:45AM UTC 684
63.96
CircleCI Job 4619
Source Files on build 4619
  • Tree
  • List 974
  • Changed 33
  • Source Changed 0
  • Coverage Changed 33
Coverage ∆ File Lines Relevant Covered Missed Hits/Line Branch Hits Branch Misses
  • Back to Repo
  • CircleCI Build #4619
  • a5a42987 on github
  • Prev Build on master (#4385)
  • Next Build on master (#4706)
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