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

bleedingdeacons / amber / 33351928210
92%

Build:
DEFAULT BRANCH: main
Ran 31 Aug 2026 02:53AM UTC
Jobs 1
Files 33
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 02:50AM UTC coverage: 92.819% (+0.3%) from 92.549%
33351928210

push

github

web-flow
feat(admin): split the committee screen into a tree pane and a member pane (#65)

* feat(admin): split the committee screen into a tree pane and a member pane

One column did not survive real data. Every committee's members rendered
inline read fine against a handful, but Unassigned alone holds ninety-odd
people and the tree disappeared underneath them.

Left pane is the hierarchy and nothing else, with connecting rules and a
selected state; right pane is the members of whichever committee is
selected. Members are dragged from the right onto a committee in the
left. Unassigned sits in its own tree rather than as a sibling of the
real roots, because it is not a committee.

Every panel ships in the document and selecting swaps visibility, so
switching is instant and needs no second endpoint. The selection is
recorded in the fragment and restored on load: without it every drag
bounced the user back to the first root, which is exactly where they are
not working. Arrow keys move between tree rows, Enter and Space select.

Two bugs found while building it, both by tests rather than by reading:

The member and unassigned caches were `static` locals. A static inside a
method is shared by every instance of the class, so a second
CommitteeTree would have served the first one's members -- and it leaked
between tests, which is how it surfaced. They are instance properties
now.

renderTreeNode() and flatten() walked the hierarchy unguarded. WordPress
lets a term tree be edited into a loop -- set A's parent to B and B's to
A and it saves without complaint -- and an unguarded walk does not
mis-draw the tree, it recurses until PHP dies and the screen returns
nothing. Both carry a visited set now, and pathLabel() keeps the depth
guard it already had.

458 tests, PHPCS clean, PHPStan level 8. Verified in wp-admin: selection,
selection surviving a reload, drag-to-move, and the keyboard select.

* feat(admin): place Committees directly after Intergroup Meetings

It was l... (continued)

3981 of 4289 relevant lines covered (92.82%)

4.19 hits per line

Coverage Regressions

Lines Coverage ∆ File
11
95.32
4.68% amber/amber/src/Admin/Committees/CommitteeTree.php
Jobs
ID Job ID Ran Files Coverage
1 33351928210.1 31 Aug 2026 02:53AM UTC 33
92.82
GitHub Action Run
Source Files on build 33351928210
  • Tree
  • List 33
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #33351928210
  • 1052acfe on github
  • Prev Build on main (#33348198546)
  • Next Build on main (#33970619343)
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