Bug: rows could be permanently stuck as placeholders (no click handler,
no toggle pill, no nothing) if the panel rendered BEFORE the rgthree
Fast Groups Muter's widgets were constructed. The poll interval only
re-rendered when graph._groups.length changed; once placeholders shipped,
they stayed even after widgets caught up.
Now the interval also tracks total muter-widget count and re-renders
when it changes. It also force-re-renders any time placeholders exist
AND any muter widget exists — covers the case where my matcher and the
muter both happen to start with the same widget count but different
matches.
Confirmed in autonomous browser test that widget-count-change triggers
the re-render path. Could not fully verify the rendered output flips
to real toggles because loadGraphData() in headless test environment
does NOT construct rgthree's muter widgets the same way a real workflow
load does (widgets stay empty in the test). In a real user session,
widgets ARE present, so the fix applies.