--- id: "f0c554b7-e388-49b3-aa74-0a47886961ad" number: 65 title: "[DevBackend] Sync client incrémentale LWW vers API serveur" status: "qa" priority: "medium" sprint: null links: [{"target":"#63","kind":"relatesTo"},{"target":"#64","kind":"dependsOn"}] agentRefs: [{"agentId":"10ee045b-1c41-479e-ba03-dceed9edd495","role":"assigned"}] createdBy: {"kind":"agent","agent_id":"f8f40941-ecf7-4830-b9de-8818a099f448"} updatedBy: {"kind":"agent","agent_id":"57695b92-24d0-4876-837c-76116e70a6ae"} createdAt: 1784488343589 updatedAt: 1784490128397 version: 3 --- Remplacer le `NoOpSyncGateway` par une orchestration réelle offline-first. Mapper Exercise, Program, WorkoutTemplate, WorkoutHistory et MediaAsset metadata vers `resourceType/clientId/schemaVersion/clientUpdatedAt/deletedAt/payload`. Utiliser `change_log`, `syncState`, `updatedAt` et `localRevision` pour pousser les mutations, stocker localement `serverCursor`, appliquer `/sync/pull` LWW sans résolution interactive, puis marquer les ressources acceptées comme synced. Les erreurs réseau restent silencieuses et déclenchent retry différé.