docs: scenarios for the programmatic-click and round-trip fixes
B14 (native dialogs must not stack a discard prompt) and a new section F covering the export/import round-trip: favorite + pinned restored, foreign CSV defaults, sync staying device-local, custom-icon provenance. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+31
-1
@@ -74,7 +74,7 @@ Préparer : 3 entrées `A`, `B`, `C`, dont `A` dans le dossier `Work` avec le ta
|
|||||||
|
|
||||||
### A11 · sync / import pendant que l'éditeur est ouvert
|
### A11 · sync / import pendant que l'éditeur est ouvert
|
||||||
- **ACTION** : `A` ouverte + dirty → lancer *Sync now* (ou importer un JSON en mode overwrite) qui met `A` à jour → Save
|
- **ACTION** : `A` ouverte + dirty → lancer *Sync now* (ou importer un JSON en mode overwrite) qui met `A` à jour → Save
|
||||||
- **ATTENDU** : modale « Entry changed elsewhere ». **Annuler ⇒ rien n'est écrit** (la version du sync/import survit, l'éditeur reste ouvert le temps de recopier). **Overwrite ⇒** la version de l'éditeur gagne.
|
- **ATTENDU** : modale « Entry changed elsewhere ». **Annuler ⇒ rien n'est écrit** (la version du sync/import survit, l'éditeur reste ouvert le temps de recopier). **Overwrite ⇒** la version de l'éditeur gagne.✅
|
||||||
|
|
||||||
### A12 · pas de fausse alerte (non-régression d'A11)
|
### A12 · pas de fausse alerte (non-régression d'A11)
|
||||||
Aucun de ces enchaînements ne doit afficher « Entry changed elsewhere » :
|
Aucun de ces enchaînements ne doit afficher « Entry changed elsewhere » :
|
||||||
@@ -147,6 +147,36 @@ est dirty. Tester avec `askBeforeDelete` **ON puis OFF** (Settings → Security)
|
|||||||
- **ACTION** : `A` ouverte + dirty → lancer une action longue (export, sync) → cliquer sur le toast ou sur le spinner
|
- **ACTION** : `A` ouverte + dirty → lancer une action longue (export, sync) → cliquer sur le toast ou sur le spinner
|
||||||
- **ATTENDU** : l'éditeur ne se ferme pas, pas de discard.
|
- **ATTENDU** : l'éditeur ne se ferme pas, pas de discard.
|
||||||
|
|
||||||
|
### B14 · dialogues natifs ouverts par un clic programmatique
|
||||||
|
- **ACTION** : `A` ouverte + **dirty** → (a) Settings → *Import vault* ; (b) télécharger une pièce jointe (fallback web) ; (c) *Upload icon* ; (d) joindre un fichier.
|
||||||
|
- **ATTENDU** : **seul** le dialogue natif s'ouvre. Pas de « Discard unsaved changes? » par-dessus, l'éditeur reste ouvert et modifié.
|
||||||
|
- **Historique** : le `<input type=file>` (et le `<a download>`) est attaché à `<body>` puis `.click()` → le clic synthétique remontait au handler click-outside qui le prenait pour un clic dehors. Gardé par `e.isTrusted`.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## F — Round-trip export / import (drapeaux & provenance)
|
||||||
|
|
||||||
|
### F1 · favori + épingle survivent au restore
|
||||||
|
- **ACTION** : épingler **et** mettre en favori une entrée → *Export vault* → supprimer l'entrée (corbeille + purge) → *Import vault* du fichier.
|
||||||
|
- **ATTENDU** : l'entrée revient **épinglée et favorite**.
|
||||||
|
- **Historique** : `pinned` n'était dans aucun container ; `favorite` y était écrit mais **jamais relu** (ni parser, ni body, ni INSERT) → les deux perdus au restore.
|
||||||
|
|
||||||
|
### F2 · même chose depuis une auto-backup
|
||||||
|
- **ACTION** : *Backup now* → supprimer l'entrée → importer le fichier `vault-autobackup-*.json`.
|
||||||
|
- **ATTENDU** : identique à F1.
|
||||||
|
|
||||||
|
### F3 · CSV étranger → drapeaux à 0
|
||||||
|
- **ACTION** : importer un CSV sans colonnes favorite/pinned.
|
||||||
|
- **ATTENDU** : entrées importées ni épinglées ni favorites (défaut 0), pas d'erreur.
|
||||||
|
|
||||||
|
### F4 · le sync ne propage PAS les drapeaux (device-local, décidé 2026-07-11)
|
||||||
|
- **ACTION** : épingler/favoriser une entrée sur le device A → *Sync now* → *Sync now* sur le device B.
|
||||||
|
- **ATTENDU** : sur B, l'entrée **n'est pas** épinglée/favorite. Et un sync ne doit jamais **retirer** un drapeau posé localement sur B (le PUT serveur ne touche pas ces colonnes).
|
||||||
|
|
||||||
|
### F5 · icône custom : provenance préservée
|
||||||
|
- **ACTION** : upload d'une icône custom → export → supprimer l'entrée → import → puis **Re-fetch all**.
|
||||||
|
- **ATTENDU** : l'icône custom revient **et** survit au Re-fetch all (le flag `icon_custom` a fait le round-trip).
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## C — `withEncryptedMeta` sur tout write `/entries`
|
## C — `withEncryptedMeta` sur tout write `/entries`
|
||||||
|
|||||||
Reference in New Issue
Block a user