fix: robustez de sync comprovada no emulador (duplicatas eliminadas)

- ApiClient: IllegalArgumentException de URL vira Network (banner, sem crash);
  DTOs com listas nullable (servidor podia enviar categories/tags: null)
- SyncEngine: mutex global serializa runs (logs BEGIN/END); resolveConflict
  idempotente (não duplica cópia de conflito); registra rekey:<local>→<server>
  em meta para o editor aberto sobreviver à troca de id do create
- ViewModel: resolve(id) em save/delete; createLocal enfileira create único
- Outbox: índice único (noteId, op); DB v2 com fallbackToDestructiveMigration
- proguard: regras corretas de kotlinx.serialization (Companion.serializer)
- README: seção 'Testado em' com os cenários de emulador executados
This commit is contained in:
lgcosta committed 2026-11-04 19:28:02 -03:00
1 parent 2f63c7a2f5
commit 9e0bcc3e9b
9 files changed
+133 -44

No files matched your search

+15 -4
View File
@@ -1,11 +1,22 @@
# OkHttp + kotlinx.serialization: keep generic metadata
# OkHttp + okio
-dontwarn okhttp3.**
-dontwarn okio.**
-dontwarn org.jetbrains.annotations.**
# kotlinx.serialization (R8): manter Companion.serializer() e anotados
-keepattributes *Annotation*, InnerClasses, Signature, RuntimeVisibleAnnotations, AnnotationDefault
-keepclassmembers class com.labexposed.notas.data.remote.** {
*** Companion;
-if @kotlinx.serialization.Serializable class **
-keepclassmembers class <1> {
static <1>$Companion Companion;
}
-keepclasseswithmembers class com.labexposed.notas.data.remote.** {
-if @kotlinx.serialization.Serializable class ** {
static **$Companion Companion;
}
-keepclassmembers class <2>$Companion {
kotlinx.serialization.KSerializer serializer(...);
}
-keep,includedescriptorclasses class com.labexposed.notas.data.remote.** { *; }
# Room / WorkManager geram código e refletem pouco; regras padrão bastam
-keep class com.labexposed.notas.data.local.** { *; }