# Regression test plan — commits `6869b7c` → `4cb45ec` Cible : les zones touchées ces dernières heures (slideover, dirty, Esc, batch DnD, sync, import, shutdown). Coche au fur et à mesure. > Préalable : `BuildAssets.cmd` + F9. Sinon embedded ≠ disque. --- ## 1. Slideover — open / close / Esc - [✅] Ouvrir login → Esc → ferme direct (clean) - [✅] Ouvrir login → modifier title → Esc → **modal "Discard unsaved changes?"** apparaît - [✅] Discard confirm → Discard → ferme - [✅] Discard confirm → Cancel → reste ouvert avec modif intacte - [✅] Discard confirm → Esc → cancel (modal se ferme, slideover reste) - [✅] Ouvrir NOTE (sans modifier) → Esc → ferme direct (pas de faux discard) - [✅] Ouvrir entry avec **custom fields** existants → Esc → ferme direct (pas de faux dirty) - [✅] Ouvrir entry avec **TOTP** + custom fields → Esc → ferme direct - [✅] X header → même comportement que Esc - [✅] Click outside (en center mode) → idem ## 2. Slideover — modify + save (no duplicate) - [✅] New entry → remplir → Save → toast Saved → slideover re-ouvre avec entry sauvée - [✅] **PAS** de modal "Discard" qui apparaît après Save - [✅] Re-cliquer Save sur la même entry → toast Updated (PAS de duplicate dans la grille) - [✅] Verifier dans grille : 1 seule entry créée - [✅] Modifier custom field d'une entry existante → Save → reste ouvert → custom field préservé ## 3. Settings panel - [✅] Click ⚙ Settings → panel s'ouvre - [✅] Search input focused au top → tape "sort" → seule la row "Sort entries by" visible dans Appearance, autres rows hidden - [✅] Search "PIN" → seule la section PIN visible - [✅] Search "azertyqsd" → "No matches" banner affiché - [✅] Clear button (X) → reset, panel complet - [✅] Esc dans search avec query → clear (panel reste ouvert) - [✅] Esc dans search vide → ferme Settings - [✅] Re-ouvrir Settings → search vide (auto-reset) ## 4. Editor position (right / left / center) - [✅] Right → slideover entre par la droite, app shell margin-right - [✅] Left → slideover par la gauche - [✅] Center → modal centré avec backdrop flou - [✅] Click sur backdrop ferme le slideover (avec confirm si dirty) - [✅] Click sur backdrop ferme Settings (idem) - [✅] Click sur le panel lui-même ne ferme pas - [✅] Switch right → center → left : pas de glitch visuel ## 5. Esc priority - [✅] Carte dirty + Esc → 1 Esc = discard confirm (pas de double action) - [✅] Carte dirty + Settings open + Esc(1) → ferme Settings (carte intacte) - [✅] Carte dirty + Settings open + Esc(2) → discard confirm - [✅] Discard confirm OPEN + Esc → cancel discard, slideover toujours là - [✅] Modal confirm (autre) + Esc → ferme modal, ne touche pas slideover ## 6. Batch drag-drop - [✅] Sélectionne 3 cards → drag l'une d'elles vers folder X → 3 entries déplacées - [✅] TOTP / custom_fields / kind préservés (ouvrir une après pour vérifier) - [✅] Sélectionne 2 cards → drag vers "(no folder)" → 2 déplacées vers "All" - [✅] Sélectionne 4 cards → drag vers Trash sidebar → 4 soft-deleted - [✅] **Single drag** (rien de checked) → marche pareil (1 seule entry move) - [✅] Vue table → drag row vers folder → marche aussi (avant : draggable=false) - [✅] Après batch op : batch action bar disparaît (state.checked clear) ## 7. Trash actions + batch bar - [✅] Vue trash → sélectionne 2 → "Restore" bar → restored, bar disparaît - [✅] Vue trash → sélectionne 2 → "Delete forever" bar → deleted, bar disparaît - [✅] Vue trash → restore individuel via bouton card → bar count décrémente / disparaît - [✅] Vue normale → "Empty trash" header button → bar disparaît si une entry trash était checked ## 8. Sync (WebDAV) — quick smoke (full plan dans TEST_SYNC.md) - [ ] wsgidav running anonymous - [ ] Test connection → "OK · snapshot not created yet" (404 OK) - [ ] Sync now → toast `0 added · 0 updated · 0 deleted` + `vault-sync.json` créé - [ ] Sync now sans `cfg.user` → ne renvoie PAS "Sync not configured" (anon mode supporté) ## 9. Bitwarden CSV import - [✅] Export Bitwarden → CSV - [✅] Settings → Import vault → choose .csv → preview montre count - [✅] Confirm → toast "Imported N" - [✅] **Folders** : sidebar montre les folders du CSV (Personal, etc.) - [✅] Notes des logins → custom field "Notes" (PAS un tag) - [✅] Logins importés OK (site, user, password déchiffrable) - [✅] Secure notes → kind=note dans la grille - [✅] **Fields** column Bitwarden → custom fields (label: value parsé) ## 10. Custom fields normalize (faux-dirty fix) - [ ] Crée entry avec template "credit-card" → Save - [ ] Re-ouvre → Esc → ferme direct (pas de faux discard) - [ ] Re-ouvre + Save sans modif → bouton Save absent / no-op - [ ] Importe une entry avec custom_fields → ouvre → Esc → ferme direct ## 11. Autocomplete suppression (Edge form data) - [ ] Ouvre une carte → title focused → tape qq chars → Esc → ferme - [ ] Ré-ouvre la même carte → focus title → **flèche bas** → PAS de dropdown "Informations enregistrées" - [ ] Same pour password / TOTP / custom field ## 12. Delete keyboard shortcut - [✅] Sélectionne 3 cards (Ctrl+click ou checkbox) → press `Delete` - [✅] Modal "Move to trash N entries" → OK → trash - [✅] Vue trash → sélectionne 2 → press `Delete` → "Delete forever" modal - [✅] Focus dans input (search bar) + Delete → comportement normal de l'input (PAS de batch action) - [✅] Slideover open + Delete → pas de batch action (gating) ## 13. Toggle alignment - [✅] Settings → tous les toggles (Compact, Mask, Autofill, etc.) → cercle vertically centered, pas désaxé top/bottom - [✅] Toggle OFF → ON → cercle slide horizontalement, reste centré ## 14. Clean shutdown (DB WAL) - [✅] Lance app, unlock vault, fais quelques modifs - [✅] Minimize to tray (X) - [✅] Arrête Windows / Redémarre (ou logout) - [✅] Vérifier au reboot : `vault.db` seul (pas `-shm` ou `-wal` résiduels) - [✅] Si Task Manager → End task : OK les résidus apparaissent (force-kill normal, SQLite recover au prochain open) ## 15. Quick search hotkey - [✅] Settings → "Quick search picker" row visible avec Ctrl+Shift+Q - [✅] Click la pill → press Ctrl+Alt+S → label devient "Ctrl+Alt+S" - [✅] Reset to defaults → revient à Ctrl+Shift+Q - [✅] Press le combo n'importe où dans Windows → quick search modal apparaît ## 16. PIN mode (regressions possibles avec les fixes Esc) - [ ] Mode PIN seul → lock → input PIN affiché → enter PIN → unlock - [ ] PIN wrong → toast erreur - [ ] Esc sur PIN input → ne ferme rien d'inattendu --- ## Critères - ✅ Aucun bug bloquant - ✅ Aucune perte de données silencieuse (TOTP, custom_fields, attachments) - ✅ Esc fait UNE SEULE chose à la fois (pas de cascade invisible) - ⚠️ Si bug : noter le scénario EXACT (section.N + étapes) avant de me dire ## Si tout passe → Tu peux merger / release sereinement. → Sinon on fix bug par bug avec le numéro de section comme référence.