[claude] Sync: duplicated ClientId causes silent, permanent divergence — add detection and reconciliation
Los mantenedores suelen responder en 1 día
Nadie ha tomado este issue todavía.
Evaluación
- Dificultad
- 5/5
- Tiempo estimado
- Más de una semana
- Aptitud para principiantes
- 30/100
- Tipo de issue
- Error
- Claridad
- Necesita aclaración
- Estado de actividad
- Tranquilo
- Stack tecnológico
- csharp, sqlite
- Área
- databases, distributed-systems
Línea de trabajo
Empieza leyendo SyncState y QueryHelpers.GetMissingCommits para entender el intercambio basado en marcas de tiempo; después, sigue AddRangeFromSync y SnapshotWorker hasta el fallo notificado. El issue propone detectar y reconciliar ClientIds duplicados, pero deja abierta la política de reparación; la tarea estará terminada cuando exista un comportamiento acordado que detecte la divergencia y evite el fallo de los commits varados.
Escrito por el modelo de indexación a partir del texto del issue.
Descripción
[Claude-drafted]
Sync exchanges commits purely on (ClientId → latest commit timestamp) (SyncState, QueryHelpers.GetMissingCommits). This assumes each ClientId is a single writer with append-only history. If two replicas ever write under the same ClientId (copied SQLite file, restored device backup), their histories fork and commits are permanently stranded in both directions — each side believes the other already has everything below its head. Nothing detects this: commit hashes never cross the wire ([JsonIgnore]), hash only id + parentHash, and are rewritten locally.
Repro: copy a project DB to a second client, edit + sync on both. The project eventually becomes unsyncable: an edit arrives for an entity whose creating commit is stranded, and SnapshotWorker throws on every subsequent sync.
Proposal (layered):
- Tripwire: in
AddRangeFromSync, receiving a commit authored by the local ClientId that isn't already in the local DB proves the ID is duplicated → surface loudly; the app should switch to a fresh ClientId so the fork stops growing. - Detect: extend
SyncStateentries with a commit count + order-independent digest of that client's commit IDs, compared over the shared range (≤ the lower head). Mismatch ⇒ divergence, even when heads differ. Must stay compatible with timestamp-only clients. - Repair: on divergence for a ClientId, exchange that client's full commit-ID list, diff, send missing commits both ways.
AddRangeFromSyncalready handles past-insertion (dedup, hash rewrite, snapshot replay), so the merge converges. Open question: auto-repair with loud logging vs. requiring user attention.
Prevention (keeping writer identity out of the copyable DB) is the app's job: sillsdev/languageforge-lexbox#2431.
- Lenguaje dominante
- C#
- Estrellas
- 14
- Forks
- 4
- Merge medio
- 2 d 18 h
- PR fusionados (30 d)
- 6
Preparar el entorno
Aún no hemos revisado los archivos de configuración de este proyecto. Empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.
Primeros pasos
- Lee el issue completo y luego la guía de contribución del proyecto.
- Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
- Haz un fork del repositorio y trabaja en una rama.
- Abre un pull request que haga referencia al número del issue.
Más de sillsdev/harmony
-
enhancement
Dificultad 2/5 1-3 horas Aptitud para principiantes 84/100
Los mantenedores suelen responder en 1 día
-
Dificultad 5/5 Más de una semana Aptitud para principiantes 35/100
Los mantenedores suelen responder en 1 día
-
Data bug
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
sillsdev/harmony#105 · 2 comentarios ·
Los mantenedores suelen responder en 1 día
-
bug
Dificultad 4/5 3-5 días Aptitud para principiantes 55/100
Los mantenedores suelen responder en 1 día
-
enhancement
Dificultad 3/5 1-2 días Aptitud para principiantes 58/100
Los mantenedores suelen responder en 1 día
Todos los issues de sillsdev/harmony
Issues similares
-
Dificultad 2/5 1-3 horas Aptitud para principiantes 62/100
builtbybel/CrapFixer#112 ·
-
area-ai untriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 85/100
dotnet/extensions#7790 ·
Los mantenedores suelen responder en 1 día
-
Beginner Friendly T: Bugfix
Dificultad 2/5 1-3 horas Aptitud para principiantes 82/100
space-wizards/space-station-14#46220 ·
Los mantenedores suelen responder en 1 día
-
P2 testing
Dificultad 1/5 Menos de una hora Aptitud para principiantes 90/100
Los mantenedores suelen responder en 1 día
-
area-Infrastructure-coreclr os-ios os-maccatalyst os-tvos untriaged
Dificultad 2/5 1-3 horas Aptitud para principiantes 78/100
dotnet/runtime#134766 · 3 comentarios ·
Los mantenedores suelen responder en 1 día