Résumé

  • Dans RFC 8620, une chaîne state représente l’état de toutes les données d’un type dans un compte. Une différence demande au client de resynchroniser son cache.
  • Le push StateChange indique les types de données dont l’état a évolué; il n’apporte pas seul l’auteur, le détail des objets, la cause, l’ordre probant ou le résultat d’une opération de messagerie.

Une alerte qui appelle une réconciliation

RFC 8620, signé par Neil Jenkins et Chris Newman, répond à une contrainte très concrète: un client mobile ne peut pas télécharger sans cesse l’intégralité d’un compte pour vérifier que son cache reste juste. Le protocole renvoie donc une courte chaîne d’état pour un type de données. Si les données changent, cette chaîne doit changer; si elles restent inchangées, le serveur devrait normalement renvoyer la même valeur.

La portée est précise. L’état concerne toutes les données de ce type dans le compte, et non seulement les objets présents dans une réponse Foo/get. Un client qui reçoit une valeur différente doit abandonner son cache ou appeler Foo/changes afin d’obtenir les changements exacts. La chaîne n’explique pas elle-même la différence. Elle économise un transfert, sans devenir une histoire de l’événement.

Cette économie est utile, mais elle impose une discipline de lecture. Un état neuf ne contient pas par nature l’identité de l’auteur, la demande qui a été acceptée, les valeurs avant et après, un horodatage à valeur de preuve, ni une observation chez le destinataire. Il répond à la question « faut-il synchroniser ? ». Il ne répond pas à toutes les questions qu’un litige ou un contrôle de conformité peut ensuite poser.

Le détail vient après le jeton

La méthode /changes montre cette séparation. Le client fournit sinceState; le serveur renvoie oldState, newState et peut lister les identifiants créés, modifiés ou détruits. C’est l’étape qui permet de remettre un cache à jour.

Même cette liste ne devient pas automatiquement un audit complet. Pour établir qui a changé une boîte, il faut un principal authentifié, une demande corrélée et la décision d’autorisation. Pour établir ce qui a changé, il faut les représentations pertinentes avant et après. Pour établir une chronologie défendable, il faut des règles de temps, d’intégrité et de conservation. Le protocole de synchronisation peut coexister avec ces pièces; RFC 8620 ne prétend pas les fournir toutes.

Pour une messagerie, la confusion est facile. Un tableau de bord voit l’état Email ou Mailbox évoluer et transforme l’indication en affirmation sur une action. La version prudente est bien plus solide: le serveur signale que le client doit rechercher le détail. La version étendue exige ensuite des preuves détenues par les systèmes qui ont reçu la requête, évalué la politique et conservé l’objet.

Un push peut réunir plusieurs faits

Un objet StateChange associe des comptes à des états de types de données modifiés depuis le push précédent. Le client compare ces valeurs à son propre cache et demande les changements nécessaires. L’exemple de RFC 8620 admet que le serveur regroupe plusieurs modifications touchant deux comptes avant d’envoyer un seul objet.

Cette compression rend le push efficace. Elle empêche aussi de le lire comme un registre événementiel un-pour-un. Un objet reçu peut résumer plusieurs évolutions. Il ne garantit pas un seul utilisateur, un seul message, une seule action, ni la séquence complète que demanderait une enquête.

Question Preuve JMAP utile Preuve supplémentaire requise
Le cache est-il actuel ? Chaîne state identique Aucune pour cette question limitée
Quels objets faut-il rapprocher ? Réponse /changes Contenu des objets si nécessaire
Qui a modifié une boîte ? Non établi par StateChange seul Principal, demande et décision d’autorisation
Quel fait a été observé par un destinataire ? Non établi par l’état générique Observation au point de remise ou de lecture

La valeur de l’architecture de Jenkins est justement de ne pas vendre une alerte de cache comme une certitude plus vaste. Le signal de synchronisation reste précieux lorsqu’il est conservé à sa propre couche.

Sources