Defer media loading and strengthen persistence tests
All checks were successful
Deploy Sokko G / deploy (push) Successful in 18s

This commit is contained in:
Shinuwa 2026-09-12 23:28:05 +02:00
parent 09a2d4b71a
commit d0e1fd73b1
19 changed files with 459 additions and 71 deletions

View file

@ -15,6 +15,8 @@ Checklist à suivre lors de l'ajout ou de la modification d'un outil, d'une page
- Vérifier l'import et l'export si l'outil stocke des données.
- Pour une modification de persistance, vérifier les écritures successives en succès/échec, les suppressions, ainsi qu'un import concurrent avec une édition ; un échec ne doit pas restaurer une valeur jamais confirmée.
- Vérifier qu'une erreur d'ouverture ou de lecture au démarrage bloque les écritures, créations, imports et exports sans afficher une fausse liste vide ; plusieurs tentatives puis une reprise réussie doivent retrouver les données initiales sans recharger la page ni les effacer.
- Pour Images et Annotation d'images, vérifier la lecture différée en page complète et panneau latéral, la reprise après échec local et l'absence d'écrasement pendant le chargement. Les alertes des autres outils doivent rester actives sans ouvrir les médias.
- Vérifier qu'une création, un import ou une suppression préserve les médias non lus des autres outils ; les exports doivent les inclure et refuser un téléchargement partiel en cas d'échec. Une lecture en cours ne doit pas réintroduire des données supprimées.
- Si l'outil a un contenu représentable en texte, ajouter ou vérifier l'import/export texte round-trip depuis le toggle import/export du header.
- Si l'outil porte un état de progression, vérifier que l'import texte repart de l'état initial attendu.
- Vérifier l'affichage dans la page toolbox complète.

View file

@ -37,7 +37,7 @@ Entrée type dans `modules` :
### Ordre et confirmation des écritures
Le démarrage attend la lecture complète du registre, des liens, des modules et
Le démarrage attend la lecture du registre, des liens, des modules hors médias et
de la position des notifications avant d'ouvrir l'interface. Un échec laisse
le stockage non prêt : les méthodes d'écriture refusent les opérations, et la
création, l'import et l'export ne peuvent pas utiliser un état vide incomplet.
@ -58,6 +58,25 @@ la fin de transaction. Une erreur synchrone pendant sa préparation déclenche
l'abandon de la transaction. Les écritures ordinaires d'un module restent ciblées
sur sa clé et ne réécrivent pas les images des autres outils.
Les données des outils `images` et `imageAnnotation` sont lues à leur première
ouverture, en page complète ou dans le panneau latéral. Les minuteurs et calendriers
restent chargés au démarrage pour assurer les alertes globales. Les couvertures,
incluses dans le registre des toolboxes, restent également chargées au démarrage.
Un marqueur uniquement en mémoire distingue un média non lu d'un outil vide ; il
n'est jamais persisté ni exporté. Les transactions de snapshot conservent les
entrées non lues, sauf celles explicitement supprimées de l'état courant.
Une lecture tardive ne réintroduit pas un outil supprimé entre-temps.
Pendant la lecture, le contenu de l'outil est bloqué. Un échec affiche une reprise
locale sans empêcher les autres outils de fonctionner ni autoriser l'écrasement
du média non lu. Après ouverture, les médias restent en mémoire jusqu'au
rechargement de l'application ; il n'y a pas d'éviction à la fermeture.
Les exports attendent les écritures précédentes dans la même file et lisent les
médias manquants depuis l'état confirmé, sans les ajouter au cache de l'interface.
Si cette lecture échoue, aucun fichier partiel n'est téléchargé. Les formats
IndexedDB et import/export sont inchangés.
Cette coordination est locale à l'instance React ; elle ne synchronise pas
l'édition entre plusieurs onglets.