docs(android): the phone cannot remove an attachment, and patching would not hold

Worth recording before someone tries. The desktop restores attachments only
for a NEW entry; for an entry it already knows, the merge leaves them alone.
Publishing a snapshot without the attachment would leave the row untouched in
its database, and its next buildSyncSnapshot would put it back - the removal
would undo itself on the following pull.

So removing an attachment from the synced vault is a desktop action. The
phone can now save it first, which makes that lossless.
This commit is contained in:
r-zakarya
2026-08-22 00:49:06 +01:00
parent 40f7667243
commit 405d295523
+12
View File
@@ -304,6 +304,18 @@ Rangé par ce que ça apporte réellement sur un téléphone.
que l'utilisateur demande en appuyant, et le message de confirmation nomme que l'utilisateur demande en appuyant, et le message de confirmation nomme
l'endroit plutôt que de dire « enregistré ». l'endroit plutôt que de dire « enregistré ».
**Asymétrie à connaître : le téléphone ne peut pas SUPPRIMER une pièce
jointe**, et l'ajouter au patch ne suffirait pas. Le poste ne restaure les
pièces jointes que pour une entrée **nouvelle** ([applyRemoteSnapshot](../js/app.sync.js)) ;
pour une entrée qu'il connaît déjà, la fusion n'y touche pas. Publier un
instantané amputé laisserait donc la ligne intacte dans sa base, et son
`buildSyncSnapshot` suivant la remettrait — la suppression reviendrait
d'elle-même au tirage d'après.
Retirer une pièce jointe du coffre synchronisé se fait donc **sur le poste**.
Le téléphone, lui, sait maintenant l'enregistrer avant, ce qui rend
l'opération sans perte.
Une seule pièce jointe a fait passer le cache de **13 à 174 Ko** : le Une seule pièce jointe a fait passer le cache de **13 à 174 Ko** : le
contenu voyage en base64 dans l'instantané, et il est déchiffré en mémoire contenu voyage en base64 dans l'instantané, et il est déchiffré en mémoire
avec le reste. `TVault` lit donc nom, type et taille, et **jette avec le reste. `TVault` lit donc nom, type et taille, et **jette