You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Écarter du cache persisté les réponses dont la forme a changé #223
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.
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.
Activity
PaulThiberville commentedon Oct 5, 2026
🔨 Démarrage — plan :
RouteSearchResult, doncRouteCardavecisLockedetstepCount), le même contrat que celui qu'api-clientapplique déjà aux réponses du réseau ;isLocked, sansstepCount, budget{min,max}) écartée, entrée valide servie à l'identique, aller-retour écriture/relecture de tout ce que le persister écrit ;Branche :
issue/223-validate-persisted-cache.