cde9ee7501
The first-result viewport-repaint gate assumed only streamed __partialJson placeholder shapes (SSH) could re-anchor; the write renderer's collapsed pending preview paints a tail window from decoded content, so its first partial result re-anchored to the top of the file and left the committed tail rows stale above the new frame. Resolve forceFirstResultViewportRepaint per renderer as a boolean or an (args, options) predicate evaluated at paint time: write opts in when a collapsed preview outgrew the streaming tail window, SSH stays scoped to the streamed-placeholder shape it always covered. Adopted from PR #4478 (roboomp) with an allocation-free line-count scan and terminal-buffer regression coverage. Fixes #4477