diff --git a/TEST_SCENARIOS.md b/TEST_SCENARIOS.md index 06eea10..7ead28d 100644 --- a/TEST_SCENARIOS.md +++ b/TEST_SCENARIOS.md @@ -357,6 +357,12 @@ l'éditeur slideover : créer + éditer une entrée, ajouter/retirer des tags, - **ACTION prévue** : ouvrir *Vault health* → mettre à la corbeille une entrée listée → revenir sur health sans *Recompute* → **Fix** sur cette entrée. - **Pourquoi c'est irréalisable** : G3 a rendu ce cas impossible à mettre en scène — le cache est invalidé à **chaque** mutation, donc revenir sur le tableau de bord recalcule toujours et l'entrée supprimée n'y figure plus. Le garde reste en place dans le code (`openEntryForFix` sort si `openSlideOver` renvoie `false`), il n'est simplement plus atteignable par l'interface. +### G5 · activer / désactiver HIBP depuis la vue santé ✅ +- **ACTION** : dans *Vault health*, activer la vérification HIBP → attendre la fin du scan **sans quitter la vue**. +- **ATTENDU** : la carte *Pwned* et le score se mettent à jour **tout seuls** quand le scan finit. +- **ACTION 2** : désactiver HIBP → la catégorie *Pwned* retombe à 0 immédiatement. +- **Historique** : le cache santé était calculé **avant** l'arrivée des résultats et rien ne l'invalidait ensuite. La vue affichait `0 pwned` pendant que les cartes de la liste portaient déjà le drapeau ; il fallait sortir et revenir pour voir `2`. Symétrique à la désactivation, qui vidait `hibpResults` en laissant le tableau de bord compter des brèches disparues. `hibpCheckAllEntries` et le toggle invalident désormais `healthCache`. + ### G4 · le score bouge par paliers de 10 — comportement attendu - **OBSERVÉ** : après correction de deux mots de passe, `30 → 40 → 50`. - **C'EST NORMAL** : le barème est `-5` par mot de passe **faible**, `-10` par **groupe de réutilisation**, `-2` par entrée **ancienne**, `-15` par entrée **compromise**. Corriger un mot de passe partagé par deux entrées casse le groupe → `+10`. diff --git a/js/app.js b/js/app.js index d74cefe..9edfaad 100644 --- a/js/app.js +++ b/js/app.js @@ -983,6 +983,11 @@ async function hibpCheckAllEntries() { })()); } await Promise.all(workers); + // The health dashboard reads its "pwned" column from state.hibpResults, and + // its cache may well have been computed before these results landed — that + // is exactly what happens when HIBP is switched on from the health view + // itself, which then showed 0 pwned while the entry cards showed the flag. + if (typeof healthCache !== 'undefined') healthCache = null; render(); } @@ -7718,6 +7723,9 @@ async function init() { hibpCheckAllEntries(); } else { state.hibpResults.clear(); + // Same reason as after a scan: the dashboard would keep counting + // breaches from results that no longer exist. + if (typeof healthCache !== 'undefined') healthCache = null; render(); toast('Breach check disabled'); }