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

bleedingdeacons / reconcile / 31254513765
91%

Build:
DEFAULT BRANCH: main
Ran 08 Aug 2026 11:14AM UTC
Jobs 1
Files 25
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

08 Aug 2026 11:13AM UTC coverage: 91.263% (-0.2%) from 91.415%
31254513765

push

github

web-flow
fix: close null-safety gaps and raise PHPStan to level 8 (#54)

Level 8 checks calls and property reads against nullable types. Reconcile
reported 18 findings in four shapes.

Three identical normalise() methods (Member/Group/PositionColumnMapper)
declared `: string` but returned preg_replace()'s string|null. A PCRE
failure would have been a TypeError under strict_types; the lower-cased
value is now kept, rather than collapsing a column name to '' and silently
matching nothing.

MemberImporter, PositionImporter and MemberExporter read their nullable
Unity repository/factory in private helpers. import()/export() already
reject a null dependency before those helpers can run, but PHPStan cannot
carry narrowing across a method boundary. Added one private accessor per
dependency stating the invariant, and in MemberExporter a local held
across the two $this cache-building calls that discard the narrowing.
The public entry guards are untouched — they remain the user-facing path.

Plugin::addMenuPages() built callables from three nullable page
properties; it now returns early if init() never constructed them, since
menu entries pointing at nothing only produce blank screens.

registerHandlers() stored six handlers in nullable static properties and
called register() through them. Registering through the container result
directly exposed those properties as write-only, which they were: each
handler registers its own WordPress hooks and $wp_filter holds the
callable, so nothing kept them alive or read them back. Removed.

No baseline entries added. phpstan, phpcs and 308 tests green (the single
deprecation is the pre-existing PHP 8.5 finfo_close() noise; CI runs 8.1).

2371 of 2598 relevant lines covered (91.26%)

7.51 hits per line

Coverage Regressions

Lines Coverage ∆ File
19
92.53
-0.51% reconcile/reconcile/src/Position/PositionImporter.php
14
95.79
-0.42% reconcile/reconcile/src/Member/MemberImporter.php
6
91.4
0.09% reconcile/reconcile/src/Member/MemberExporter.php
1
98.61
-0.47% reconcile/reconcile/src/Plugin.php
Jobs
ID Job ID Ran Files Coverage
1 31254513765.1 08 Aug 2026 11:14AM UTC 25
91.26
GitHub Action Run
Source Files on build 31254513765
  • Tree
  • List 25
  • Changed 7
  • Source Changed 0
  • Coverage Changed 7
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #31254513765
  • 5e5f16f4 on github
  • Prev Build on main (#31226380179)
  • Next Build on main (#31332365331)
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