Skip to content

Releases: mtfkarukera/magic-threads

v2.5.3

Choose a tag to compare

@mtfkarukera mtfkarukera released this 31 Jul 21:20

Journal des modifications

Toutes les modifications notables de Magic Threads sont documentées dans ce fichier.

Le format est basé sur Keep a Changelog,
et ce projet adhère au Versionnage Sémantique.

[2.5.3] - 2026-07-31

Modifié

  • Compatibilité Thunderbird 153+ : Relevé de strict_max_version de 152.* à 154.* dans manifest.json suite à la sortie de Thunderbird 153 (résolution du blocage d'installation sur Thunderbird 153.0.1).

[2.5.2] - 2026-06-27

Corrigé

  • Sélection intra-dossier robuste (background.js) : Application systématique du délai de sécurité de 250 ms et de la boucle de retry de sélection pour les e-mails envoyés récents, y compris lorsque la navigation s'effectue au sein du même dossier (ex : clics successifs dans "Messages envoyés"), résolvant définitivement les cas de page blanche lors du premier clic.

Modifié

  • Documentation : Mise à jour de README.md (fonctionnalité de dédoublonnage intelligent) et de ARCHITECTURE.md (section Résilience de la sélection, dédoublonnage Gmail, correction des diagrammes Mermaid).
  • Dépôt : Retrait de JUSTIFICATION_ATN.md du suivi Git (fichier conservé localement, ajouté au .gitignore).

[2.5.1] - 2026-06-27

Corrigé

  • Robustesse & Dédoublonnage Gmail :
    • Dédoublonnage robuste : normalisation de la détection du dossier virtuel Tous les messages (Gmail All Mail) indépendamment de la casse, avec support étendu de plus de 20 langues (dont l'espagnol, l'allemand, l'italien, etc.) et traitement correct des paramètres de requête et slashs terminaux dans glodaApi.js.
    • Préservation du snippet : fiabilisation de la logique de fusion de messages de glodaApi.js pour conserver le snippet indexé de l'email quelle que soit la copie analysée.
    • Sélection résiliente : implémentation d'une boucle de retry avec tolérance temporelle (jusqu'à 10 essais sur 500 ms) dans background.js pour garantir la sélection effective du message après changement de dossier dans la vue 3-pane.
  • Accessibilité & Contraste WCAG AA :
    • Rehausse du contraste de la couleur du dossier Envoyé (--sent-text) en mode clair (de #2f855a à #276f4a sur fond #f0fff4, atteignant un contraste conforme de 6,1:1).
    • Rehausse du contraste du texte secondaire (--text-muted) en mode sombre (de #8a93a3 à #8d98a9 sur fond #282c34, atteignant un contraste conforme de 4,7:1).
    • Rétablissement de la continuité de navigation au clavier : le message courant est désormais focusable (tabIndex="0") et déclaré comme un bouton inactif (role="button", aria-disabled="true"), supprimant la rupture de tabulation au sein de la liste.
    • Amélioration des options : ajout d'associations explicites <label for="..."> pour tous les boutons radio de la page de préférences.
    • Sémantique du tri : association de la description globale de tri au groupe d'options (aria-describedby sur le <fieldset> parent).
    • Retour vocal sur l'en-tête du fil : ajout d'une zone aria-live="polite" sur l'indicateur de mode et liaison via aria-describedby sur le bouton de configuration ⚙️.
    • Ajout de la liaison aria-controls reliant le bouton de repli (▼) à la liste de discussion.

[2.5.0] - 2026-06-27

Ajouté

  • Accessibilité & Sémantique :
    • Rehausse du contraste du badge Archive en mode clair (valeur #8f5700 sur fond #fefcbf conforme WCAG AA à 5,1:1).
    • Ajout des rôles structurels de titre role="heading" et aria-level="2" au titre du fil de discussion.
    • Ajout d'attributs aria-label descriptifs sur les boutons emoji d'en-tête (Configuration et Réduction).
    • Intégration des attributs de séparation ARIA (role="separator", aria-orientation, aria-valuemin, aria-valuemax et aria-valuenow dynamique) sur la poignée de redimensionnement pour l'accessibilité au clavier.
    • Liaison des boutons radio de configuration à leurs descriptions textuelles respectives via aria-describedby dans la page d'options.

Corrigé

  • Discussions groupées (vue 3-pane) : Élargissement de l'écouteur messageDisplay.onMessageDisplayed à tous les onglets pour résoudre l'absence d'affichage du panneau lors de l'expansion d'une discussion groupée dans la vue principale.
  • Robustesse & Dédoublonnage Gmail :
    • Implémentation du dédoublonnage intelligent dans glodaApi.js : normalisation des Message-IDs (chevrons et espaces) et filtrage prioritaire des dossiers Gmail (les dossiers spécifiques comme Envoyés ou Boîte de réception priment sur le dossier virtuel global Tous les messages).
    • Protection contre la faille d'injection de sélecteurs CSS dans options.js par validation des préférences par rapport à une liste blanche (ALLOWED_VALUES).
    • Résolution de la race condition inter-dossiers (page blanche sous Linux ESR) : le délai de sécurité de 250 ms n'est désormais appliqué qu'aux e-mails envoyés de moins de 5 minutes.

[2.4.1] - 2026-06-22

Modifié

  • Compatibilité Thunderbird 152 : Relevé de strict_max_version de 151.* à 152.* dans manifest.json suite à la sortie de Thunderbird 152.

[2.4.0] - 2026-06-13

Phase 4 du plan d'action (pérennité & publication). Aucun changement de comportement utilisateur : refactoring interne, outillage, documentation et préparation de soumission.

Ajouté

  • Conception de l'après-Gloda (CONCEPTION_POST-GLODA.md) : résolveur de fil à trois étages derrière threadResolver.js (Gloda → Experiment API sans Gloda via nsIMsgThread/References → filet 100 % WebExtension prêt MV3). Module de référence non câblé background/threadResolverFallback.js. Veille Panorama : pas de retrait imminent de Gloda.
  • Justification ATN (JUSTIFICATION_ATN.md) : argumentaire des deux Experiment APIs pour le relecteur Mozilla (pourquoi elles ne sont pas remplaçables par le SDK standard), avec résumé anglais prêt à coller.
  • Veille de compatibilité (VEILLE_COMPATIBILITE.md) : checklist par beta/ESR (points d'appui DOM, Gloda, 3 modes), anticipation MV3.
  • Config ESLint « flat » (eslint.config.js) + package.json de dev (outillage uniquement, exclu du XPI) : prêt pour ESLint 9, coexiste avec .eslintrc.json.

Modifié

  • Refactoring de magicThreadsWindowApi.js : feuilles de style hissées en constantes de module (SHARED_CSS/BOTTOM_CSS/SIDEBAR_CSS), construction d'un item de fil factorisée en buildThreadItem(), magic numbers nommés (SIDEBAR_DEFAULT_WIDTH, BOTTOM_DEFAULT_HEIGHT, PANEL_Z_INDEX). Lisibilité accrue, risque de récidive du bug de portée réduit.
  • build.sh : extraction de version robuste (parsing JSON via node, repli grep/sed ne confondant plus version et manifest_version).
  • Documentation alignée sur le code : ARCHITECTURE.md (Gloda getMessageCollectionForHeaders au lieu de GlodaMsgSearcher, deux écouteurs réels, trois chemins de navigation, retrait de l'option « gauche » 3-pane), AGENTS.md (onMessagesDisplayOff inexistant corrigé), CHANGELOG (« beside » corrigé).

[2.3.0] - 2026-06-13

Accessibilité et i18n issus de la phase 3 du plan d'action.

Ajouté

  • Navigation clavier du panneau : les messages du fil sont focusables (Tab) et activables à Entrée/Espace (role="list"/listitem/button, aria-current sur le message affiché), anneau de focus visible (:focus-visible) sur les items, les boutons d'en-tête et la poignée — qui se pilote désormais aussi aux flèches du clavier (role="separator", pas de 16 px).
  • Avertissement Gloda : si la recherche globale est désactivée dans Thunderbird, la page d'options affiche un bandeau d'alerte (role="alert", nouvelle fonction convGloda.isGlodaAvailable) au lieu de laisser l'extension silencieusement inerte.
  • État « non lu » accessible : libellé annoncé aux lecteurs d'écran (clé i18n unreadLabel, 7 locales) en complément du point rouge ; aria-expanded sur le bouton réduire/déplier.

Corrigé

  • Contrastes WCAG AA : palette du panneau adossée aux variables de thème Thunderbird (--layout-*, --color-accent-primary) avec fallbacks relevés à ≥ 4,5:1 (--text-muted : #5a6675 clair / #8a93a3 sombre).
  • Traductions : es/pt « anticroonológico » → « anticronológico », « Archivos »/« Arquivos » (faux-sens) → « Archivados »/« Arquivadas » ; vi : « luồng » unifié en « chuỗi », « thẻ gốc mới » reformulé ; libellés de secours (DEFAULT_LABELS) passés en anglais.
  • Page d'options : groupes de radios en <fieldset>/<legend>, confirmation d'enregistrement annoncée (role="status"), couleurs codées en dur remplacées par les couleurs système (lisible en thème sombre).

Modifié

  • Manifest : déclaration data_collection_permissions: ["none"] (aucune collecte de données) requise par les linters récents.

[2.2.2] - 2026-06-13

Corrigé

  • Compteur de fil dépendant du point d'entrée : les en-têtes References ne pointant que vers les ancêtres, la réunification 2.2.1 pouvait rester partielle selon le message cliqué (17 vs 63 sur le même fil, typiquement depuis un transfert dans Envoyés). Le fil local nsIMsgThread est désormais absorbé pour chaque message ramené — et non plus seulement pour le message cliqué — ce qui relie les branches dans les deux sens (ancêtres ET descendants). Passes d'expansion portées de 3 à 4.

[2.2.1] - 2026-06-13

Corrigé

  • Fil incomplet (conversations Gloda fragmentées) : Gloda affecte la conversation à l'indexation et ne fusionne jamais rétroactivement — une même chaîne de réponses pouvait être éclatée en plusieurs conversations (indexation dans le désordre, reconstruction d'index), et le panneau n'affichait alors qu'un ...
Read more

Release v2.5.2

Choose a tag to compare

@mtfkarukera mtfkarukera released this 27 Jun 17:40

Corrigé

  • Sélection intra-dossier robuste (background.js) : Application systématique du délai de sécurité de 250 ms et de la boucle de retry de sélection pour les e-mails envoyés récents, y compris lorsque la navigation s'effectue au sein du même dossier, résolvant définitivement les cas de page blanche lors du premier clic.

Note historique (v2.5.0 & v2.5.1)

Cette version consolide également les travaux des Sprints 1 et 2 :

  • Accessibilité & Contraste WCAG AA (contrastes dossiers et textes sourds réhaussés, continuité de focus clavier du message lu, formulaires et descriptions ARIA).
  • Dédoublonnage Gmail multilingue (22 langues supportées, préservation dynamique des snippets Gloda).

v2.4.1

Choose a tag to compare

@mtfkarukera mtfkarukera released this 21 Jun 23:59

[2.4.1] - 2026-06-22

Modifié

  • Compatibilité Thunderbird 152 : Relevé de strict_max_version de 151.* à 152.* dans manifest.json suite à la sortie de Thunderbird 152.

[2.4.0] - 2026-06-13

Phase 4 du plan d'action (pérennité & publication). Aucun changement de comportement utilisateur : refactoring interne, outillage, documentation et préparation de soumission.

Ajouté

  • Conception de l'après-Gloda (CONCEPTION_POST-GLODA.md) : résolveur de fil à trois étages derrière threadResolver.js (Gloda → Experiment API sans Gloda via nsIMsgThread/References → filet 100 % WebExtension prêt MV3). Module de référence non câblé background/threadResolverFallback.js. Veille Panorama : pas de retrait imminent de Gloda.
  • Justification ATN (JUSTIFICATION_ATN.md) : argumentaire des deux Experiment APIs pour le relecteur Mozilla (pourquoi elles ne sont pas remplaçables par le SDK standard), avec résumé anglais prêt à coller.
  • Veille de compatibilité (VEILLE_COMPATIBILITE.md) : checklist par beta/ESR (points d'appui DOM, Gloda, 3 modes), anticipation MV3.
  • Config ESLint « flat » (eslint.config.js) + package.json de dev (outillage uniquement, exclu du XPI) : prêt pour ESLint 9, coexiste avec .eslintrc.json.

Modifié

  • Refactoring de magicThreadsWindowApi.js : feuilles de style hissées en constantes de module (SHARED_CSS/BOTTOM_CSS/SIDEBAR_CSS), construction d'un item de fil factorisée en buildThreadItem(), magic numbers nommés (SIDEBAR_DEFAULT_WIDTH, BOTTOM_DEFAULT_HEIGHT, PANEL_Z_INDEX). Lisibilité accrue, risque de récidive du bug de portée réduit.
  • build.sh : extraction de version robuste (parsing JSON via node, repli grep/sed ne confondant plus version et manifest_version).
  • Documentation alignée sur le code : ARCHITECTURE.md (Gloda getMessageCollectionForHeaders au lieu de GlodaMsgSearcher, deux écouteurs réels, trois chemins de navigation, retrait de l'option « gauche » 3-pane), AGENTS.md (onMessagesDisplayOff inexistant corrigé), CHANGELOG (« beside » corrigé).

v2.3.0

Choose a tag to compare

@mtfkarukera mtfkarukera released this 13 Jun 00:41

Accessibilité et i18n issus de la phase 3 du plan d'action.

Ajouté

  • Navigation clavier du panneau : les messages du fil sont focusables (Tab) et activables à Entrée/Espace (role="list"/listitem/button, aria-current sur le message affiché), anneau de focus visible (:focus-visible) sur les items, les boutons d'en-tête et la poignée — qui se pilote désormais aussi aux flèches du clavier (role="separator", pas de 16 px).
  • Avertissement Gloda : si la recherche globale est désactivée dans Thunderbird, la page d'options affiche un bandeau d'alerte (role="alert", nouvelle fonction convGloda.isGlodaAvailable) au lieu de laisser l'extension silencieusement inerte.
  • État « non lu » accessible : libellé annoncé aux lecteurs d'écran (clé i18n unreadLabel, 7 locales) en complément du point rouge ; aria-expanded sur le bouton réduire/déplier.

Corrigé

  • Contrastes WCAG AA : palette du panneau adossée aux variables de thème Thunderbird (--layout-*, --color-accent-primary) avec fallbacks relevés à ≥ 4,5:1 (--text-muted : #5a6675 clair / #8a93a3 sombre).
  • Traductions : es/pt « anticroonológico » → « anticronológico », « Archivos »/« Arquivos » (faux-sens) → « Archivados »/« Arquivadas » ; vi : « luồng » unifié en « chuỗi », « thẻ gốc mới » reformulé ; libellés de secours (DEFAULT_LABELS) passés en anglais.
  • Page d'options : groupes de radios en <fieldset>/<legend>, confirmation d'enregistrement annoncée (role="status"), couleurs codées en dur remplacées par les couleurs système (lisible en thème sombre).

Modifié

  • Manifest : déclaration data_collection_permissions: ["none"] (aucune collecte de données) requise par les linters récents.

v2.2.2

Choose a tag to compare

@mtfkarukera mtfkarukera released this 12 Jun 23:32

Corrigé

  • Compteur de fil dépendant du point d'entrée : les en-têtes References ne pointant que vers les ancêtres, la réunification 2.2.1 pouvait rester partielle selon le message cliqué (17 vs 63 sur le même fil, typiquement depuis un transfert dans Envoyés). Le fil local nsIMsgThread est désormais absorbé pour chaque message ramené — et non plus seulement pour le message cliqué — ce qui relie les branches dans les deux sens (ancêtres ET descendants). Passes d'expansion portées de 3 à 4.