I think I've been struggling with this because I missed a second call-site (in textinput) where the viewport should be getting updated from the (editable) cursor pane.
One more note: Over the months I completely forgot about the list of manual tests! Utterly baffling, and also extremely important that that is possible.
This program definitely outgrew my brain, and it's only when sitting with it for a while with the prospect of reimplementing it that I was able to find the (gaping) flaw in the design.
(If, indeed, I'm right and I don't uncover some corner case. I've checked the commits of recent months for scenarios, and also the manual tests regarding panning.)
CSV2GBWMGLN6CR3FIUUQ3FTZAFJJFO7DTPNOKOY5IOXNFI4O67IAC
if not pane.editable then return true end
if options == nil then return true end
if not options.ignore_editable_cursor_pane then return true end
if not Editable_cursor_pane_updated_screen_top then return true end
return false
return not options.ignore_cursor_pane