Quickshell / notifications : unifier le traitement des remplacements et des collisions de groupe #15

Closed
opened 2026-10-24 13:10:04 +00:00 by mathieu · 1 comment
Owner

Deux défauts confirmés, même cause

mathieu/NotificationService.qml:113–137 maintient des chemins différents pour réception, mise à jour et changement des seuls libellés.

  1. Marquer une notification comme vue, puis ne remplacer que le libellé d’une action : le libellé change, mais seen reste vrai, count reste inchangé et l’horodatage n’avance pas. La rétention ne repart pas de la dernière mise à jour contrairement à NOTIFICATIONS.md.
  2. Créer deux notifications de la même application avec les stack tags A et B, puis remplacer la première avec le tag B : deux notifications actives de clé B subsistent. receive() élimine les collisions ; update() ne le fait pas.

Ces deux scénarios ont été reproduits sur Quickshell 0.3.2, bus/HOME temporaires. Le test existant du libellé ne vérifie pas les autres champs.

Résultat attendu

Un chemin commun et regroupé de mise à jour applique comptage, date, lecture, délai de popup et suppression des collisions, puis sauvegarde une fois. Éliminer l’ancien objet sans archiver une transition obsolète. Ne pas réactiver la réponse directe désactivée pour le défaut amont 0.3.2.

Validation

  • Remplacement du seul libellé : champs de mise à jour cohérents, notification à nouveau non lue et bonne rétention.
  • Remplacement A vers B : une seule ligne et un seul objet actif du groupe ; anciennes actions inutilisables.
  • Vérifier transitions Murmur, notification résidente/transitoire, DND et verrouillage.
  • Suites natives et UI isolées.

Dépendance

Après #12 pour réutiliser le rafraîchissement regroupé. Coordonner les validations de taille avec #13.

Référence

Revue du code au commit 5e350a8, avec Quickshell 0.3.2. Les 18 suites existantes passent ; les cas ci-dessous complètent cette couverture. Chantier : #11.

  • with pi 🥧
## Deux défauts confirmés, même cause `mathieu/NotificationService.qml:113–137` maintient des chemins différents pour réception, mise à jour et changement des seuls libellés. 1. Marquer une notification comme vue, puis ne remplacer que le libellé d’une action : le libellé change, mais `seen` reste vrai, `count` reste inchangé et l’horodatage n’avance pas. La rétention ne repart pas de la dernière mise à jour contrairement à `NOTIFICATIONS.md`. 2. Créer deux notifications de la même application avec les stack tags A et B, puis remplacer la première avec le tag B : deux notifications actives de clé B subsistent. `receive()` élimine les collisions ; `update()` ne le fait pas. Ces deux scénarios ont été reproduits sur Quickshell 0.3.2, bus/HOME temporaires. Le test existant du libellé ne vérifie pas les autres champs. ## Résultat attendu Un chemin commun et regroupé de mise à jour applique comptage, date, lecture, délai de popup et suppression des collisions, puis sauvegarde une fois. Éliminer l’ancien objet sans archiver une transition obsolète. Ne pas réactiver la réponse directe désactivée pour le défaut amont 0.3.2. ## Validation - [x] Remplacement du seul libellé : champs de mise à jour cohérents, notification à nouveau non lue et bonne rétention. - [x] Remplacement A vers B : une seule ligne et un seul objet actif du groupe ; anciennes actions inutilisables. - [x] Vérifier transitions Murmur, notification résidente/transitoire, DND et verrouillage. - [x] Suites natives et UI isolées. ## Dépendance Après #12 pour réutiliser le rafraîchissement regroupé. Coordonner les validations de taille avec #13. ## Référence Revue du code [au commit `5e350a8`](https://git.2027a.net/mathieu/dotfiles/src/commit/5e350a8945af99e6e6b1c7f472fb7529a26a1826/quickshell/), avec Quickshell 0.3.2. Les 18 suites existantes passent ; les cas ci-dessous complètent cette couverture. Chantier : #11. - with pi 🥧
Author
Owner

Intégré sur main 42e6ec9, contenu distant vérifié. Correction signée489edc6, revue indépendante propre ; gate parent21/21 suites privées passent.

Régression native initialement rouge A→B : deux lignes/deux natifs. Maintenant installation commune des arrivées/mises à jour visibles, un survivant natif/groupe, fermeture du retraité sans archive et anciennes actions refusées. Couverture des cibles actives/historiques, changement appName/desktop-entry, groupes sans tag, applications distinctes, reload, comptage/sauvegarde unique. Remplacement individuellement invalide A→B : seul A expire, B reste inchangé/action-valide. Chemin caché de validation mémoire sans sauvegarde/popups conservé. Aucun changement des plafonds #13 ni des limitations de remplacement silencieux amont.

Pas de source personnelle ni de reload actif.

  • with pi 🥧
Intégré sur main [42e6ec9](https://git.2027a.net/mathieu/dotfiles/commit/42e6ec9bbae4bb55735a4d3f1acf24a9e8f75df3), contenu distant vérifié. Correction signée489edc6, revue indépendante propre ; gate parent21/21 suites privées passent. Régression native initialement rouge A→B : deux lignes/deux natifs. Maintenant installation commune des arrivées/mises à jour visibles, un survivant natif/groupe, fermeture du retraité sans archive et anciennes actions refusées. Couverture des cibles actives/historiques, changement appName/desktop-entry, groupes sans tag, applications distinctes, reload, comptage/sauvegarde unique. Remplacement individuellement invalide A→B : seul A expire, B reste inchangé/action-valide. Chemin caché de validation mémoire sans sauvegarde/popups conservé. Aucun changement des plafonds #13 ni des limitations de remplacement silencieux amont. Pas de source personnelle ni de reload actif. - with pi 🥧
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
mathieu/dotfiles#15
No description provided.