Skip to content

Écarter du cache persisté les réponses dont la forme a changé #223

Closed

Description

@PaulThiberville

Contexte

Epic : #8
Prérequis : #28 (cache persisté de la sheet, PR #152)
Architecture-Technique · D-004

Découverte de CODE pendant #161 (Inbox) : le cache de requêtes persisté (apps/mobile/src/api/persister.ts) ne s'invalide que sur la version de l'app (buster: expoConfig.version). Une réponse dont le schéma change (stepCount ajouté aux cards par #161) est relue telle quelle depuis MMKV tant que la version ne change pas, par exemple après une mise à jour OTA ou en développement : la tooltip a affiché « Étape 1/ » sans total jusqu'au rechargement de la recherche. #170 (budget en somme) et #63 (reason) changent aussi la forme des cards.

Comportement attendu

  • Une entrée du cache persisté dont la forme ne correspond plus au schéma de packages/shared n'est jamais rendue : elle est écartée à la réhydratation et la requête repart au réseau.
  • Choix technique à faire dans la PR, par exemple : validation par le schéma zod de la réponse à la réhydratation (entrée écartée si invalide), ou buster qui inclut une version du schéma de packages/shared. Le choix et ce qu'il écarte sont écrits dans la PR.
  • Aucun changement pour une entrée valide : l'affichage hors connexion et le premier affichage rapide restent.

Critères d'acceptation

  • Test : une entrée persistée à l'ancienne forme (card sans stepCount, budget en fourchette) n'est pas servie, la requête repart
  • Test : une entrée valide est servie depuis le cache comme avant
  • Recette : après un changement de forme sans changement de version, aucun affichage incomplet (« Étape 1/ »)

Notes techniques

Peut s'empiler sur la pile de l'epic #8 tant qu'elle n'est pas fusionnée.

Activity

  1. added this to the v0.2 milestone on Sep 28, 2026
  2. added
    status:blockedBloqué, voir commentaire ⛔
    and removed
    status:readySpec complète, prêt à coder
    on Sep 29, 2026
  3. added
    status:readySpec complète, prêt à coder
    and removed
    status:blockedBloqué, voir commentaire ⛔
    on Oct 5, 2026
  4. PaulThiberville commented on Oct 5, 2026

    @PaulThiberville
    CollaboratorAuthor

    🔨 Démarrage — plan :

    • valider à la réhydratation chaque requête relue de MMKV contre le schéma partagé courant (RouteSearchResult, donc RouteCard avec isLocked et stepCount), le même contrat que celui qu'api-client applique déjà aux réponses du réseau ;
    • écarter (et retirer du stockage) toute entrée qui ne valide pas, ou dont la clé n'a pas de schéma connu : refus par défaut, l'app repart comme sans cache ;
    • tests unitaires : entrée d'ancienne forme (sans isLocked, sans stepCount, budget {min,max}) écartée, entrée valide servie à l'identique, aller-retour écriture/relecture de tout ce que le persister écrit ;
    • recette iOS et Android avec un cache d'ancienne forme fabriqué, hors ligne puis en ligne, avec un Premium du seed.
      Branche : issue/223-validate-persisted-cache.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

      Milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions