Challenge 1: Scroll Position Preservation
The RG40XX-V d-pad/joystick scrolls by message index
(self.selected). When new messages append, the index of
existing messages doesn’t change, but the visual scroll offset
(self.scroll_offset) may need recalculation. If the user is
scrolled up, inserting/appending messages should not shift their view
unexpectedly.
Need: A clear definition of “user is at the bottom”
— is it selected == len(messages) - 1? Or is it
scroll_offset + msg_area_h >= total_msg_h - bubble_h?
The former is simpler but less robust.
Challenge 2: The “New Messages” Indicator
On a 640×480 screen, space is limited. A pill/badge must be small but readable. It needs to: - Not overlap with message bubbles - Not be confused with a message bubble - Be dismissible via gamepad - Show a count (e.g., “3 new”) or just an arrow