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

bleedingdeacons / reach / 33415488055
86%

Build:
DEFAULT BRANCH: main
Ran 31 Aug 2026 04:45PM UTC
Jobs 1
Files 95
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

31 Aug 2026 04:41PM UTC coverage: 86.3% (+0.04%) from 86.257%
33415488055

push

github

web-flow
fix(alerts): tell a pushed alert that it has contact details (#105)

An alert carrying contact details never offered Show contact on a
handset that learned of it by push - which on Android is nearly always,
because push is the fast path. The audited caller-details flow, which
Reach's README argues for at length, was reachable only on the pull-only
heads or when a push failed.

Two causes, both here.

AlertDispatcher::dispatch() builds the alert from the request and writes
the contact row a moment later, so the value handed to the transports
said hasContact: false however many details were supplied. The poll got
it right because it joins the contacts table; the push had no way to.
The alert is now told, via a new Alert::withContact() - a new instance,
because Alert is readonly and should stay that way.

And FcmTransport::data() did not carry the flag at all, so even a correct
alert would have said nothing. It is now sent as "1"/"0", always present
rather than only when true: a handset can distinguish "no contact" from
"a server too old to say" only if the field is always there.

The flag, never the details. Whether a contact exists is not personal
data; the contact itself still requires a separate authenticated request
that Reach audits, and it stays out of toArray() and therefore out of
both the push and the poll. There is a test asserting exactly that, and
another that a plugin's payload cannot forge the flag - the alert's own
fields win on a key collision.

Found on a Pixel 6a against the test bed: the server reported
has_contact=true for alert 64 while the handset showed no button.

6312 of 7314 relevant lines covered (86.3%)

14.14 hits per line

Jobs
ID Job ID Ran Files Coverage
1 33415488055.1 31 Aug 2026 04:45PM UTC 95
86.3
GitHub Action Run
Source Files on build 33415488055
  • Tree
  • List 95
  • Changed 3
  • Source Changed 0
  • Coverage Changed 3
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #33415488055
  • 594ea1f7 on github
  • Prev Build on main (#33367259862)
  • Next Build on main (#33536198530)
  • Delete
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