What
First: verify whether this is already complete. v0.1.0 shipped "dirty-region rendering — skip screen_clear on cursor movement + button toggle". Check whether the full spec below is implemented before writing any new code. Close this issue if it is.
Full spec:
- Each widget exposes a dirty flag (or the app loop tracks it centrally) so
shellframe_screen_clear is only called when a full repaint is needed — not on every key event.
- Render functions continue writing directly to
/dev/tty — no API break. Framebuffer migration is task F.
- The
shellframe_shell main loop checks dirty state before triggering re-render; a no-op key event that changes no state should not cause a screen repaint.
Files
src/screen.sh — dirty flag helpers if not already present
src/shell.sh — conditional re-render in main loop
- Widget render functions — mark dirty on meaningful state changes (selection move, scroll, text edit)
Done criteria
IO/timing note (CLAUDE.md §5)
"What sets dirty" and "what triggers redraws" are terminal behavior claims. Write a test that confirms a no-op key event does not invoke shellframe_screen_clear — do not rely on code inspection alone.
Effort
M (~half day) — or XS if already done in v0.1.0
Deps
What
First: verify whether this is already complete. v0.1.0 shipped "dirty-region rendering — skip
screen_clearon cursor movement + button toggle". Check whether the full spec below is implemented before writing any new code. Close this issue if it is.Full spec:
shellframe_screen_clearis only called when a full repaint is needed — not on every key event./dev/tty— no API break. Framebuffer migration is task F.shellframe_shellmain loop checks dirty state before triggering re-render; a no-op key event that changes no state should not cause a screen repaint.Files
src/screen.sh— dirty flag helpers if not already presentsrc/shell.sh— conditional re-render in main loopDone criteria
shellframe_screen_clearis NOT called on every key event — only when a full repaint is neededIO/timing note (CLAUDE.md §5)
"What sets dirty" and "what triggers redraws" are terminal behavior claims. Write a test that confirms a no-op key event does not invoke
shellframe_screen_clear— do not rely on code inspection alone.Effort
M (~half day) — or XS if already done in v0.1.0
Deps