Cerramos la serie explorando qué implica migrar de CLI a TUI con ratatui: cómo cambia el modelo de interacción, qué fricciones introduce Rust con ownership y &mut en un event loop persistente, y por qué la arquitectura hexagonal absorbe el cambio sin cirugía.
Diseñamos la capa CLI con clap derive, parsing tipado de argumentos con ValueEnum y FromStr para UUIDs, subcomandos como enums, flag global –output para salida dual table/json, y errores propagados por capas hasta stderr.
Analizamos la estrategia de testing del repositorio: pruebas por comportamiento para cada adapter, aislamiento con tempdir, por qué no hay tests compartidos, y la deuda técnica que decidimos documentar en vez de esconder.
Tercera parte de la serie: definimos el contrato de persistencia con un trait genérico, implementamos dos adaptadores (in-memory y JSON a disco) y profundizamos en la diferencia entre interfaz e implementación como eje de la arquitectura hexagonal.