The rat serves the last course. We fix input lag with non-blocking event polling, add the edit feature as a full vertical slice from application layer to TUI, watch the state machine grow from 3 to 4 variants with compiler-guided safety, and close with the key takeaways from the entire migration.
The rat learns to plate. Five UX improvements transform a monochrome prototype into a scannable, responsive tool: color coding, positive feedback, empty state guidance, transient messages, and a visual cursor. Then we replace the cramped command bar input with a centered modal popup.
The rat wires up the ears. We implement mode-specific event handlers with crossterm, redesign the key mapping to use a toggle instead of separate keys, solve the terminal restore problem with a capture-cleanup-return pattern, and run cargo test to discover that zero lines changed outside the adapter.
The rat starts painting. We implement the rendering layer: immediate-mode drawing, a three-zone layout with Layout::vertical, a task table with StatefulWidget and row highlighting, a context-sensitive command bar that changes with InputMode, and the subtle Block gotcha that cost a few minutes of debugging.
We start a new series by migrating the CLI adapter to a ratatui TUI. We set up the new dependencies, design the module structure under adapters/tui/, model the interaction modes as an enum to make invalid states unrepresentable, and solve the ownership puzzle of cloning a repository in a persistent session.
We close the series by exploring what it means to migrate from CLI to TUI with ratatui: how the interaction model changes, what frictions Rust introduces with ownership and &mut in a persistent event loop, and why hexagonal architecture absorbs the change without surgery.