Repository navigation
Releases: cyclope205/recettes-express
Release list
v1.12.12
Securite et fiabilite
- Correction d'une faille XSS stockee : la date de peremption etait inseree sans echappement dans le HTML de la carte, notamment dans la liste de revue des ajouts photo/voix issus de Gemini avant validation.
- Validation des dates au format AAAA-MM-JJ cote backend et comparaison de vraies dates (plus de comparaison de chaines) pour le filtre anti-peremption des recettes.
- Plafond de taille sur les entrees image/audio en base64 avant decodage, avec gestion propre des erreurs de decodage audio.
- Une quantite invalide est desormais mise en quarantaine (log + entree ignoree) plutot que silencieusement remplacee par 1.
CI
- Epinglage de hacs/action et hassfest sur des SHA verifies plutot que des tags flottants (risque supply-chain).
Correctif interne
- Correction d'un bug de duplication de contenu dans storage.py introduit lors d'une session precedente (SyntaxError empechant la collecte des tests), et mise a jour du test associe.
v1.12.11 — Fiabilite Gemini et durcissement CI
Fiabilite de l'appel Gemini
- Backoff exponentiel et une 3e tentative ajoutee sur les erreurs 5xx/reseau lors de l'extraction des quantites par l'IA, pour mieux absorber les erreurs transitoires de l'API Gemini.
Durcissement de la CI
- Pinning des actions GitHub (checkout, setup-python, setup-node, action-gh-release) sur leur SHA de commit exact plutot qu'un tag flottant, pour eviter qu'un tag soit redirige vers du code malveillant.
- Ajout de permissions minimales (contents: read) sur les workflows qui n'ont pas besoin d'ecrire dans le depot ; seul le workflow de publication de release conserve contents: write.
Aucun changement de comportement visible pour l'utilisateur en dehors d'une meilleure resilience face aux erreurs Gemini transitoires.
v1.12.10
Correctif
- Correction d'un bug de validation : les controles de quantite dans storage.py et gemini_client.py acceptaient une valeur NaN sans lever d'erreur (isinstance(quantity, (int, float)) est vrai pour NaN, et une comparaison avec NaN est toujours fausse en Python), ce qui pouvait contaminer le stock d'aliments enregistre. Ajout d'un controle math.isfinite() explicite qui rejette NaN et +/-Infini, en plus du controle existant.
v1.12.9 - Retry sur erreurs Gemini et validation JS en CI
Corrections
- Le client Gemini (gemini_client.py) retente desormais une fois, avec un delai de 2 secondes, en cas d'erreur serveur (5xx) ou d'erreur reseau, au lieu d'echouer immediatement. La gestion du quota (429) reste inchangee.
- Ajout d'une etape de validation syntaxe JavaScript (node --check) dans la CI, pour detecter les erreurs dans la carte Lovelace avant qu'elles n'atteignent les utilisateurs.
Ces deux points avaient ete signales par un audit externe.
v1.12.8
Corrections de securite/robustesse : validation des quantites (un appel de service mal renseigne pouvait introduire une quantite negative dans le stock, aucune borne minimale n'etait imposee cote schema ni cote stockage) et ajout du service add_item_from_voice oublie dans le nettoyage au dechargement de l'integration (il restait enregistre indefiniment apres un retrait/rechargement).
v1.12.7 — Mise a jour instantanee du stock et corrections
Le stock affiche desormais la quantite restante instantanement dans la carte apres avoir valide une recette, sans attendre la mise a jour du serveur. Correction des accents manquants sur les mentions "Perime" et "Ne peut plus etre consomme" affichees pour les aliments perimes.
v1.12.6 - Quantites dans les recettes et blocage des aliments perimes
Deux améliorations issues d'un retour utilisateur. Les recettes suggérées affichent maintenant les ingrédients et quantités utilisés, pas seulement les étapes. Un aliment dont la DLC est dépassée est désormais visuellement barré dans le stock, accompagné du message "Ne peut plus être consommé", et ne peut plus être sélectionné pour une suggestion de recette : la case est désactivée côté carte, et l'IA l'exclut aussi côté serveur même si elle recevait son identifiant par un autre chemin. Si tous les aliments sélectionnés sont périmés, un message clair l'indique plutôt que de renvoyer une recette vide.
v1.12.5 - Correction du bouton Suggerer des recettes
Correction : la v1.12.4 avait introduit une régression qui cassait entièrement le bouton "Suggérer" (erreur "item_id" affichée sur la carte). Cause : deux exemples JSON ajoutés dans le prompt envoyé à l'IA utilisaient des accolades simples au lieu de doubles, ce qui faisait planter le formatage du texte côté Python avant même l'appel à l'IA. Corrigé en doublant ces accolades. Aucun autre changement de comportement, la consommation partielle des ingrédients introduite en v1.12.4 reste intacte.
v1.12.4 - Consommation partielle des ingrédients de recette
Correction : la validation d'une recette suggérée supprimait entièrement chaque ingrédient du stock, même si la recette n'en utilisait qu'une partie. Seule la quantité réellement utilisée est désormais retirée du stock.
Détails. L'IA renvoie maintenant une quantité et une unité par ingrédient utilisé, en plus de son identifiant. La consommation du stock est atomique : si un seul ingrédient pose problème (stock insuffisant, unité incompatible), aucun article n'est modifié. Si une suggestion ne contient pas ces quantités (générée avant la mise à jour), un message clair invite à relancer la suggestion de recette. Ajout de tests de non-régression sur la consommation partielle et la validation des quantités.
Version 1.12.3
Corrections
- Une date de peremption vide (aucune date lisible/estimee) pouvait etre enregistree comme une chaine vide au lieu d'etre correctement consideree comme absente.
- Mise a jour du test unitaire lie au champ expiration_source, ajoute precedemment (indique si la date a ete lue sur l'emballage ou estimee par l'IA), qui n'avait pas ete synchronise.