docs: A11 fixed, plus its false-positive and deleted-entry scenarios
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+20
-14
@@ -72,9 +72,21 @@ Préparer : 3 entrées `A`, `B`, `C`, dont `A` dans le dossier `Work` avec le ta
|
|||||||
- **ACTION** : `A` ouverte → Settings → *Fetch missing* / *Re-fetch all* favicons
|
- **ACTION** : `A` ouverte → Settings → *Fetch missing* / *Re-fetch all* favicons
|
||||||
- **ATTENDU** : l'aperçu d'icône **dans l'éditeur** se met à jour tout seul (pas seulement la carte). Idem après un import en mode overwrite qui apporte une icône.
|
- **ATTENDU** : l'aperçu d'icône **dans l'éditeur** se met à jour tout seul (pas seulement la carte). Idem après un import en mode overwrite qui apporte une icône.
|
||||||
|
|
||||||
### A11 · sync / import pendant que l'éditeur est ouvert — **trou connu**
|
### 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 AUJOURD'HUI** : le Save de l'éditeur écrase la version venue du sync/import. **Non corrigé** — voir « Reste à traiter » plus bas.
|
- **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)
|
||||||
|
Aucun de ces enchaînements ne doit afficher « Entry changed elsewhere » :
|
||||||
|
- **A12a** : `A` ouverte + dirty → Save → modifier encore → Save (le rechargement post-save re-cale la référence)
|
||||||
|
- **A12b** : `A` ouverte + dirty → batch *Add tag* / *Move to folder* sur `A` → Save (l'éditeur a absorbé le changement)
|
||||||
|
- **A12c** : `A` ouverte + dirty → supprimer son dossier → Save (cf. A7)
|
||||||
|
- **A12d** : `A` ouverte + dirty → *Fetch missing* favicons → Save (l'icône est hors payload éditeur)
|
||||||
|
- **A12e** : `A` ouverte + dirty → sync **sans** changement distant sur `A` → Save
|
||||||
|
|
||||||
|
### A13 · entrée supprimée ailleurs pendant l'édition
|
||||||
|
- **ACTION** : `A` ouverte + dirty → un sync distant supprime `A` (tombstone) → Save
|
||||||
|
- **ATTENDU** : pas de plantage. L'entrée n'est plus en mémoire → le contrôle A11 passe la main ; le PUT échoue proprement avec un toast d'erreur.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -168,14 +180,7 @@ Symptôme du bug : après relance, lignes au nom vide / `(no name)`.
|
|||||||
|
|
||||||
## Reste à traiter (constaté pendant l'audit, non corrigé)
|
## Reste à traiter (constaté pendant l'audit, non corrigé)
|
||||||
|
|
||||||
1. **Sync / import pendant l'édition** (scénario A11). `editorAbsorbChange`
|
1. **Modale d'entrée héritée = code mort.** `openEntryModal` n'a **aucun
|
||||||
ne couvre que les écritures locales tag/dossier. Un vrai filet serait de
|
|
||||||
mémoriser `updated_at` à l'ouverture de l'éditeur et, au Save, de comparer
|
|
||||||
avec la valeur courante en mémoire : si elle a bougé, demander
|
|
||||||
« cette entrée a changé ailleurs — écraser ? ». Ça couvre d'un coup sync,
|
|
||||||
import, et tout futur chemin d'écriture.
|
|
||||||
|
|
||||||
2. **Modale d'entrée héritée = code mort.** `openEntryModal` n'a **aucun
|
|
||||||
appelant** ; `saveEntry`, `closeEntryModal`, le markup `#entryModal` et
|
appelant** ; `saveEntry`, `closeEntryModal`, le markup `#entryModal` et
|
||||||
leurs listeners ne sont plus atteignables. Danger : `saveEntry` fait un PUT
|
leurs listeners ne sont plus atteignables. Danger : `saveEntry` fait un PUT
|
||||||
**partiel** (ni `kind`, ni `totp_secret`, ni `custom_fields`, ni
|
**partiel** (ni `kind`, ni `totp_secret`, ni `custom_fields`, ni
|
||||||
@@ -183,7 +188,8 @@ Symptôme du bug : après relance, lignes au nom vide / `(no name)`.
|
|||||||
à ne jamais refaire. À supprimer (JS + HTML) tant qu'il n'est pas recâblé
|
à ne jamais refaire. À supprimer (JS + HTML) tant qu'il n'est pas recâblé
|
||||||
par erreur.
|
par erreur.
|
||||||
|
|
||||||
3. **Click-outside** : `#busyOverlay` et `.toast` ne sont pas dans la liste
|
2. **Attachments hors garde A11.** Le contrôle « changed elsewhere » couvre le
|
||||||
blanche. Cliquer un toast ou l'overlay d'attente pendant une opération
|
payload de l'entrée, pas ses pièces jointes (table séparée, écrites par
|
||||||
longue ferme l'éditeur. Impact faible, correctif = 2 lignes dans la même
|
leurs propres endpoints). Un sync qui remplace une pièce jointe pendant
|
||||||
liste.
|
l'édition n'est pas signalé. Faible risque : l'éditeur ne re-ship jamais
|
||||||
|
les pièces jointes existantes, donc il n'y a rien à écraser.
|
||||||
|
|||||||
Reference in New Issue
Block a user