Loro introduce los Mergeable Containers para resolver la creación concurrente de contenedores hijos en CRDTs

Fuentes: Mergeable Containers: Fixing Concurrent Child Creation – Loro
Imagen generada por IA con el prompt: Editorial illustration of two abstract user nodes merging into a single shared document tree, with intertwined glowing lines and geometric shapes, soft blue and amber palette, technical minimal style.
Imagen generada con IA

Loro, una biblioteca de CRDT (tipo de数据结构 que permite la edición colaborativa sin conflictos) para aplicaciones colaborativas, presenta los Mergeable Containers, una solución a un problema clásico de los CRDT basados en JSON: la creación concurrente de un contenedor hijo por parte de dos usuarios que editan sin conexión. Hasta ahora, si dos pares añadían contenido al mismo campo de un documento vacío, sus operaciones generaban identificadores de contenedor distintos, y el mecanismo de resolución de conflictos del Map mostraba solo uno de ellos, aparentando una pérdida de datos. El texto, la lista o el mapa creados por el otro usuario quedaba en el historial pero fuera del estado visible del documento.

La nueva API, basada en métodos como ensureMergeableText, ensureMergeableMap o ensureMergeableList, hace que la identidad del contenedor hijo derive de su posición lógica dentro del Map y no de la operación que lo creó. Así, dos pares que accedan a la misma clave terminan modificando el mismo contenedor y sus ediciones se fusionan sin pérdidas. El cambio es compatible con setContainer y se aplica solo cuando se desea un contenedor compartido por posición, como ocurre en calendarios, índices dinámicos o migraciones de esquema.

El diseño interno combina un identificador sintético determinista, calculado a partir del Map padre, la clave y el tipo, con un marcador binario en la ranura del Map que controla la visibilidad. Esta separación permite que cambios de tipo entre pares se resuelvan con la regla habitual del Map, conservando el estado del contenedor no visible. La codificación del identificador, introducida antes del lanzamiento, usa un camino plano lineal en la profundidad lógica para evitar crecimiento recursivo. Loro agradece a Alexis Williams, de Synapdeck, por la implementación y el diseño de esta funcionalidad, y aporta scripts reproducibles del problema en Loro, Yjs y Automerge.