set_summary replaced its count labels with label.setParent(None) while they
were visible - reparenting a visible widget to None promotes it to a real
top-level window, which Windows shows with full native decoration (app icon,
min/max/close, label-sized blank body) until the deferred deleteLater runs.
Every grid rebuild in every module flashed one such ghost per replaced label;
the DA-07 optimistic-apply change made it glaring (8 flashes per device-row
Active toggle, one per channel write). Fix: hide the dying label and let
deleteLater collect it while still parented.
Found via a live user session on DA-07 hardware: synthetic probes could not
reproduce it (offscreen platforms swallow the flash; QTest clicks missed the
toggle), so this adds an env-gated diagnostic - CIM_UI_SPY=<log path> installs
a window spy (core/ui/window_spy.py, hooked in shell/app.py) that logs every
top-level Show with the widget creation stack; the user's log produced 84 ghost
windows pointing at the exact line. Screenshot kept in docs/samples; session
write-up in docs/DA07-FIELD-NOTES.md.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>