Pre-existing gap (flagged in #612's review): ClipPointerHandler and AnnotationDragHandler have no dispose/cancel hook wired into <daw-editor>.disconnectedCallback. A drag interrupted by editor removal — when pointer capture failed and no pointercancel is delivered — leaves the handler mid-drag: stale listeners and, worst case, a wedged in-progress-drag guard silently blocking future interactions.
TrackReorderHandler.cancel() (added in #612: public method delegating to the private cleanup, called from disconnectedCallback, safe when idle) is the template — replicate for both handlers plus a regression test each.
Pre-existing gap (flagged in #612's review):
ClipPointerHandlerandAnnotationDragHandlerhave no dispose/cancel hook wired into<daw-editor>.disconnectedCallback. A drag interrupted by editor removal — when pointer capture failed and nopointercancelis delivered — leaves the handler mid-drag: stale listeners and, worst case, a wedged in-progress-drag guard silently blocking future interactions.TrackReorderHandler.cancel()(added in #612: public method delegating to the private cleanup, called fromdisconnectedCallback, safe when idle) is the template — replicate for both handlers plus a regression test each.