El problema fundamental que Manyana busca resolver es la naturaleza disruptiva y a menudo opaca de los conflictos de fusión en los sistemas de control de versiones distribuidos actuales, como Git. Estos sistemas, basados en la reconstrucción del historial a través de DAGs y fusiones de tres vías, fallan en proporcionar una resolución de conflictos determinista y una presentación clara de las divergencias, especialmente en escenarios de rebase agresivo o edición altamente concurrente. La tesis es que al adoptar CRDTs, se puede lograr un sistema donde las fusiones son inherentemente exitosas y el historial es una estructura de datos inmutable que encapsula todas las ediciones, permitiendo una presentación de conflictos más granular y una gestión del historial más robusta.

La relevancia de este enfoque radica en la creciente complejidad de los flujos de trabajo de desarrollo de software, donde la colaboración distribuida y las operaciones de rebase son comunes. Los sistemas actuales a menudo obligan a los desarrolladores a dedicar tiempo significativo a la resolución manual de conflictos o a la reconstrucción mental del historial, lo que introduce fricción y errores. Manyana propone un cambio de paradigma donde el sistema asume la responsabilidad de la coherencia, permitiendo a los desarrolladores centrarse en la lógica de negocio en lugar de en la mecánica del control de versiones. Esto es particularmente pertinente en un contexto donde la automatización y las herramientas de IA podrían generar grandes volúmenes de cambios, haciendo que la gestión de conflictos tradicional sea insostenible.

Arquitectura del Sistema

Manyana se basa en la aplicación de Conflict-Free Replicated Data Types (CRDTs) para la representación del estado de los archivos. A diferencia de los sistemas basados en deltas o instantáneas con un DAG de commits, Manyana concibe el historial de un archivo como un 'weave' — una estructura de datos única que contiene todas las líneas que han existido en el archivo, junto con metadatos sobre su adición y eliminación. Esta estructura inherente a los CRDTs garantiza la consistencia eventual y la idempotencia de las fusiones: el resultado de una fusión es siempre el mismo, independientemente del orden en que se apliquen los cambios.

La clave de la arquitectura es que los CRDTs manejan la ordenación de líneas de forma permanente. Cuando dos ramas insertan código en el mismo punto, el CRDT resuelve la ordenación de manera determinista y esta se mantiene. Esto elimina la necesidad de encontrar un ancestro común o de recorrer el DAG para realizar fusiones, simplificando drásticamente la lógica de fusión. Los conflictos, en lugar de bloquear la operación, se identifican cuando las ediciones concurrentes ocurren 'demasiado cerca' entre sí. El sistema utiliza la información detallada de las operaciones (quién hizo qué y dónde) para generar marcadores de conflicto informativos, que describen la acción (ej. 'deleted left', 'added right') en lugar de solo mostrar los bloques de texto divergentes.

Para el rebase, Manyana propone una solución donde la operación no destruye el historial. Al mantener la historia completa en el 'weave' y añadir una anotación de 'primary ancestor' en el DAG, se puede lograr el efecto de rebase (reproducir commits sobre una nueva base) sin perder la trazabilidad original de los cambios. Esto es crucial para manejar topologías de fusión complejas donde los sistemas tradicionales fallan debido a la ausencia de un ancestro común único. Aunque el prototipo actual es una implementación en Python de 470 líneas que opera sobre archivos individuales, la visión arquitectónica se extiende a la gestión de operaciones como cherry-picking y deshacer local, integrándolas en el marco de los CRDTs.

Flujo de Resolución de Conflictos con CRDTs

  1. 1 Edición Concurrente Dos usuarios modifican el mismo archivo en ramas separadas.
  2. 2 Generación de Cambios CRDT Las ediciones se transforman en operaciones CRDT (inserciones, eliminaciones ...
  3. 3 Fusión de Ramas Las operaciones CRDT de ambas ramas se combinan en una única estructura 'weave'.
  4. 4 Resolución Determinista El algoritmo CRDT aplica las operaciones, garantizando un estado final consis...
  5. 5 Detección de Proximidad El sistema identifica si las ediciones concurrentes ocurrieron 'demasiado cer...
  6. 6 Presentación de Conflictos Si hay proximidad, se generan marcadores de conflicto informativos, sin bloqu...
  7. 7 Revisión del Usuario El usuario revisa los conflictos informados y realiza ajustes si es necesario.

Fundamentos Teóricos

La base teórica de Manyana reside en los Conflict-Free Replicated Data Types (CRDTs), un concepto que ha sido objeto de investigación académica intensiva en el campo de los sistemas distribuidos. Los CRDTs fueron formalizados por Marc Shapiro, Nuno Preguiça, Carlos Baquero y Marek Zawirski en su paper seminal "A comprehensive study of Convergent and Commutative Replicated Data Types" (2011). Estos tipos de datos están diseñados para ser replicados en múltiples nodos y permitir actualizaciones concurrentes sin necesidad de coordinación centralizada, garantizando la consistencia eventual sin conflictos lógicos.

La aplicación de CRDTs al control de versiones aborda directamente los desafíos de la consistencia en sistemas distribuidos, un problema central en la informática desde los trabajos de Leslie Lamport sobre la ordenación de eventos en sistemas distribuidos ("Time, Clocks, and the Ordering of Events in a Distributed System", 1978). Mientras que los sistemas de control de versiones tradicionales como Git se basan en un modelo de "última escritura gana" o fusiones manuales para resolver divergencias, los CRDTs ofrecen un enfoque matemático para garantizar que todas las réplicas converjan al mismo estado final. Esto se logra mediante propiedades como la conmutatividad y la asociatividad de las operaciones, o mediante el uso de estructuras de datos que encapsulan la historia de las operaciones, como los G-sets o los LWW-elements, extendidos aquí a una "weave" para el contenido de archivos.