You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
holoviz/holoviews#6988 was fixed upstream on 2026-08-19. The fix is not in a release yet: the latest is v1.23.1 (2026-07-02), and we pin holoviews==1.23.1.
The bug: _WeakSubscriber.__bool__ returns False for param-method subscribers, which defeats Plot.cleanup()'s owner filter, so cleanup severs every weakly-wrapped plot-refresh subscriber on the streams it touches, not just its own.
We do not have a workaround for this in the sense of extra code -- we have a constraint on the order of operations, plus comments explaining it. Once a release carries the fix and we bump the pin:
Drop the ordering caveat from CellWidget.dispose's docstring in src/ess/livedata/dashboard/widgets/cell.py ("Any change to teardown must keep that order (sever first, render the replacement after) until #6988 is fixed"). Teardown of a displaced cell would no longer be able to sever a survivor's subscriptions, so the invariant stops being load-bearing.
Revisit the same reasoning in Pop a cell's plot out into a floating window #1152 (pop-out windows), which has to argue the same all-or-nothing severing in plot_popout.py, plot_grid_tabs.py and .claude/rules/dashboard-widgets.md. Closing a pop-out unsubscribing the grid cell behind it is exactly the failure #6988 causes.
Explicitly not in scope: the plot.cleanup() block in CellWidget.dispose itself stays. That exists because of holoviz/panel#8710 (GridSpec never cleans up removed children), which is still open, and its TODO is already pointed there.
holoviz/holoviews#6988 was fixed upstream on 2026-08-19. The fix is not in a release yet: the latest is v1.23.1 (2026-07-02), and we pin
holoviews==1.23.1.The bug:
_WeakSubscriber.__bool__returns False for param-method subscribers, which defeatsPlot.cleanup()'s owner filter, so cleanup severs every weakly-wrapped plot-refresh subscriber on the streams it touches, not just its own.We do not have a workaround for this in the sense of extra code -- we have a constraint on the order of operations, plus comments explaining it. Once a release carries the fix and we bump the pin:
CellWidget.dispose's docstring insrc/ess/livedata/dashboard/widgets/cell.py("Any change to teardown must keep that order (sever first, render the replacement after) until #6988 is fixed"). Teardown of a displaced cell would no longer be able to sever a survivor's subscriptions, so the invariant stops being load-bearing.plot_popout.py,plot_grid_tabs.pyand.claude/rules/dashboard-widgets.md. Closing a pop-out unsubscribing the grid cell behind it is exactly the failure #6988 causes.Explicitly not in scope: the
plot.cleanup()block inCellWidget.disposeitself stays. That exists because of holoviz/panel#8710 (GridSpecnever cleans up removed children), which is still open, and itsTODOis already pointed there.