Files
r-zakarya fbfc24a4d5 feat: sticky slideover Save + uncategorised-view polish + regression plan
- Slideover Save action row is now sticky at the bottom of the scrolling
  body (background + top border) so it stays reachable on entries with
  many custom fields or attachments — was previously buried below the
  fold.
- Uncategorised view (state.view = 'folder:All'):
  - Header title reads "(no folder)" instead of the ambiguous "All".
  - Sidebar pseudo-entry stays visible whenever the vault has at least
    one real folder, so it can be used as a drag drop-target to move
    entries out of a folder even when its own count is 0.
  - Empty state gets its own copy ("No uncategorised entries" + hint
    to drop entries here to uncategorise) instead of the generic
    "Folder is empty".
- TEST_REGRESSION.md checked in — 16-section list scoped to what the
  recent Esc / drag / sync / import work touched, so post-commit
  regressions can be walked through methodically instead of poking
  the app ad-hoc.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-07-01 13:04:45 +01:00

7.1 KiB

Regression test plan — commits 6869b7c4cb45ec

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.