Quickshell : chantier de sécurité, fiabilité, sobriété mémoire et lisibilité issu de la revue #11

Closed
opened 2026-10-24 13:10:02 +00:00 by mathieu · 9 comments
Owner

Objectif et périmètre

Suivre les corrections et améliorations issues de la revue de quickshell/ au commit 5e350a8, avec Quickshell 0.3.2 : sécurité, bornes de ressources, robustesse, efficacité et lisibilité.

Au démarrage de la revue, les 18 suites existantes passaient. Des reproductions supplémentaires isolées ont confirmé les limites de rétention native, l’amplification des libellés d’actions, les incohérences de remplacement, une erreur de structure HA, un faux succès de bascule et un défaut d’arguments. Le changement de destinataire et les courses de partage/collage sont établis par le code avec leurs préconditions explicites ; aucun transfert indu personnel n’a été provoqué. Aucune fuite mémoire n’est démontrée.

Ce chantier ne demande ni nouveau framework, ni réécriture générale, ni changement des profils/services personnels. Les vérifications utilisent faux services, bus privés et données de démonstration ; toute validation réelle sensible doit rester explicitement autorisée.

Organisation

Les tickets enfants, leur ordre proposé et le filtre de chantier sont ajoutés ci-dessous après création. Les corrections prioritaires ne doivent pas attendre les refactorings esthétiques. Les optimisations exigent un avant/après mesuré, pas une promesse de gain.

Critères de clôture

  • Constats couverts par des tests qui échouent sur le mauvais comportement, puis corrections validées.
  • Contrats de sécurité conservés : pas de frappe globale, pas de retry d’ordre incertain, verrouillage conservateur, aucun contenu privé dans les diagnostics.
  • Optimisations évaluées sur un protocole synthétique reproductible ; limites et décisions éventuelles documentées.
  • Changements intégrés et contenu distant vérifié ; aucun ticket restant implicitement oublié.
  • À la fin du chantier, retirer uniquement son label dédié et mettre à jour cette racine ; conserver chantier-racine et les liens historiques.

Suivi et ordre de traitement proposé

Chantier terminé — racine #11. Le label dédié chantier:quickshell-revue, rétabli pendant la reprise de validation, a été retiré après acceptation complète des treize tickets. Son ancien filtre actif n’est plus utilisé ; chantier-racine, le tableau et tous les liens historiques sont conservés. #6/#7/#8 restent des contextes externes.

Ordre Ticket Objet
1 #12 Supprimer l’amplification du travail déclenché par les actions de notification.
2 #13 Encadrer la mémoire retenue par les notifications et leurs snapshots.
3 #14 Empêcher un partage avec un appareil différent de celui choisi initialement.
4 #15 Corriger ensemble les incohérences issues des chemins de remplacement divergents.
5 #16 Éviter qu’un attribut HA invalide fasse tomber la passerelle.
6 #17 Éviter un faux succès de bascule lorsque Dunst fonctionne mais que le panneau est mort.
7 #18 Durcir le partage contre le remplacement du chemin entre validation et lecture.
8 #19 Réduire le risque de coller un contenu différent après une copie explicite.
9 #20 Petit correctif isolé de transmission des arguments de préférences.
10 #21 Réduire les créations de processus permanentes pour les états logind/systemd.
11 #22 Mesurer la mémoire puis différer les sections lourdes réellement inutilisées.
12 #23 Isoler une responsabilité sensible et testable sans refonte du shell.
13 #24 Améliorer la lisibilité et rendre les contrôles statiques exploitables.

Dépendances et justification

  1. Commencer par #12 puis #13 : limiter le travail déclenché par un message et les données retenues, sans attendre un refactoring.
  2. #14 protège ensuite l’intention de partage ; il peut avancer en parallèle des notifications.
  3. #15 réutilise le chemin regroupé de #12 et se coordonne avec #13. #16 et #17 sont indépendants et peuvent être traités en parallèle.
  4. #18 suit #14 ; #19 définit les garanties réalistes du collage. Ce sont des durcissements conditionnels, pas des incidents de fuite avérés.
  5. #20 est un petit correctif autonome, insérable à tout moment sans retarder les priorités.
  6. #21 et #22 viennent après la stabilisation ; relever une baseline synthétique avant chaque optimisation et vérifier sécurité/UX après. #22 attend les bornes de ressources notifications.
  7. #23 suit la stabilisation du collage #19 ; #24 termine la lisibilité/diagnostics sur des chemins stabilisés. Ne pas mélanger changement de comportement et refactoring mécanique.

Cet ordre priorise risque et fiabilité avant les gains à mesurer, puis la maintenance. Il ne constitue ni une autorisation de contrôle d’appareil/service réel ni un lancement automatique de l’implémentation.

Bilan final après validation du panneau complet

Les treize tickets #12 à #24 sont clos après corrections, tests, revues et validation complémentaire du panneau complet. Code intégré sur main 90f0cd8. Les 26 suites isolées passent au commit final ; chaque objet/fichier de l’arbre Quickshell distant correspond au checkout signé contrôlé. Aucun retour externe non traité n’a été trouvé.

Décisions et limites : cache de partage privé/quota/nettoyage opportuniste24h et collage ciblé meilleure-effort approuvés par Mathieu (#18/#19). #21 supprime le polling de commandes mais ajoute17–19MioPSS résidente dans la fixture. #22 réduit le coût froid, avec coût chaud variable et~0,14s de première consultation128contrôles ; aucune fuite ni baisse globale de RAM n’est revendiquée. Après accord explicite de Mathieu, le vrai SystemPanel/PanelWindow/LayerShell et ses quatre pages inchangés ont été testés sur les deux sorties réelles du compositeur existant, avec services/données factices :18étapes de déplacement, focus/navigation, fermeture/réouverture et données absentes passent. Le test de5,48s est fermé, sorties/surfaces/focus restaurés, aucune action métier ; la configuration habituelle reste non rechargée. La précédente preuve HomePage/QtQuick seule avait été rejetée et n’a pas été considérée suffisante. #24 documente les diagnostics restants, dont3risques de layout inchangés, sans masquer les règles.

La session réelle et son checkout 5e350a8 ne sont pas avancés/rechargés. Aucun vrai partage/collage/appareil HA, action de session ni release n’a été exécuté. Les rapports reproductibles et détails par ticket restent liés dans les commentaires ; les worktrees/branches intégrés sont retirés sans force après vérification de préservation.

  • with pi 🥧
## Objectif et périmètre Suivre les corrections et améliorations issues de la revue de `quickshell/` [au commit `5e350a8`](https://git.2027a.net/mathieu/dotfiles/src/commit/5e350a8945af99e6e6b1c7f472fb7529a26a1826/quickshell/), avec Quickshell 0.3.2 : sécurité, bornes de ressources, robustesse, efficacité et lisibilité. Au démarrage de la revue, les 18 suites existantes passaient. Des reproductions supplémentaires isolées ont confirmé les limites de rétention native, l’amplification des libellés d’actions, les incohérences de remplacement, une erreur de structure HA, un faux succès de bascule et un défaut d’arguments. Le changement de destinataire et les courses de partage/collage sont établis par le code avec leurs préconditions explicites ; aucun transfert indu personnel n’a été provoqué. **Aucune fuite mémoire n’est démontrée.** Ce chantier ne demande ni nouveau framework, ni réécriture générale, ni changement des profils/services personnels. Les vérifications utilisent faux services, bus privés et données de démonstration ; toute validation réelle sensible doit rester explicitement autorisée. ## Organisation Les tickets enfants, leur ordre proposé et le filtre de chantier sont ajoutés ci-dessous après création. Les corrections prioritaires ne doivent pas attendre les refactorings esthétiques. Les optimisations exigent un avant/après mesuré, pas une promesse de gain. ## Critères de clôture - [x] Constats couverts par des tests qui échouent sur le mauvais comportement, puis corrections validées. - [x] Contrats de sécurité conservés : pas de frappe globale, pas de retry d’ordre incertain, verrouillage conservateur, aucun contenu privé dans les diagnostics. - [x] Optimisations évaluées sur un protocole synthétique reproductible ; limites et décisions éventuelles documentées. - [x] Changements intégrés et contenu distant vérifié ; aucun ticket restant implicitement oublié. - [x] À la fin du chantier, retirer uniquement son label dédié et mettre à jour cette racine ; conserver `chantier-racine` et les liens historiques. ## Suivi et ordre de traitement proposé Chantier terminé — racine #11. Le label dédié `chantier:quickshell-revue`, rétabli pendant la reprise de validation, a été retiré après acceptation complète des treize tickets. Son ancien filtre actif n’est plus utilisé ; `chantier-racine`, le tableau et tous les liens historiques sont conservés. #6/#7/#8 restent des contextes externes. | Ordre | Ticket | Objet | |---|---|---| | 1 | #12 | Supprimer l’amplification du travail déclenché par les actions de notification. | | 2 | #13 | Encadrer la mémoire retenue par les notifications et leurs snapshots. | | 3 | #14 | Empêcher un partage avec un appareil différent de celui choisi initialement. | | 4 | #15 | Corriger ensemble les incohérences issues des chemins de remplacement divergents. | | 5 | #16 | Éviter qu’un attribut HA invalide fasse tomber la passerelle. | | 6 | #17 | Éviter un faux succès de bascule lorsque Dunst fonctionne mais que le panneau est mort. | | 7 | #18 | Durcir le partage contre le remplacement du chemin entre validation et lecture. | | 8 | #19 | Réduire le risque de coller un contenu différent après une copie explicite. | | 9 | #20 | Petit correctif isolé de transmission des arguments de préférences. | | 10 | #21 | Réduire les créations de processus permanentes pour les états logind/systemd. | | 11 | #22 | Mesurer la mémoire puis différer les sections lourdes réellement inutilisées. | | 12 | #23 | Isoler une responsabilité sensible et testable sans refonte du shell. | | 13 | #24 | Améliorer la lisibilité et rendre les contrôles statiques exploitables. | ### Dépendances et justification 1. Commencer par #12 puis #13 : limiter le travail déclenché par un message et les données retenues, sans attendre un refactoring. 2. #14 protège ensuite l’intention de partage ; il peut avancer en parallèle des notifications. 3. #15 réutilise le chemin regroupé de #12 et se coordonne avec #13. #16 et #17 sont indépendants et peuvent être traités en parallèle. 4. #18 suit #14 ; #19 définit les garanties réalistes du collage. Ce sont des durcissements conditionnels, pas des incidents de fuite avérés. 5. #20 est un petit correctif autonome, insérable à tout moment sans retarder les priorités. 6. #21 et #22 viennent après la stabilisation ; relever une baseline synthétique avant chaque optimisation et vérifier sécurité/UX après. #22 attend les bornes de ressources notifications. 7. #23 suit la stabilisation du collage #19 ; #24 termine la lisibilité/diagnostics sur des chemins stabilisés. Ne pas mélanger changement de comportement et refactoring mécanique. Cet ordre priorise risque et fiabilité avant les gains à mesurer, puis la maintenance. Il ne constitue ni une autorisation de contrôle d’appareil/service réel ni un lancement automatique de l’implémentation. ## Bilan final après validation du panneau complet Les treize tickets #12 à #24 sont clos après corrections, tests, revues et validation complémentaire du panneau complet. Code intégré sur [`main` `90f0cd8`](https://git.2027a.net/mathieu/dotfiles/commit/90f0cd8bb25ae03c1b9dd5f59e16fc95f2c2b17a). Les **26 suites isolées passent au commit final** ; chaque objet/fichier de l’arbre Quickshell distant correspond au checkout signé contrôlé. Aucun retour externe non traité n’a été trouvé. Décisions et limites : cache de partage privé/quota/nettoyage opportuniste24h et collage ciblé meilleure-effort approuvés par Mathieu (#18/#19). #21 supprime le polling de commandes mais ajoute17–19MioPSS résidente dans la fixture. #22 réduit le coût froid, avec coût chaud variable et~0,14s de première consultation128contrôles ; aucune fuite ni baisse globale de RAM n’est revendiquée. Après accord explicite de Mathieu, le vrai SystemPanel/PanelWindow/LayerShell et ses quatre pages inchangés ont été testés sur les deux sorties réelles du compositeur existant, avec services/données factices :18étapes de déplacement, focus/navigation, fermeture/réouverture et données absentes passent. Le test de5,48s est fermé, sorties/surfaces/focus restaurés, aucune action métier ; la configuration habituelle reste non rechargée. La précédente preuve HomePage/QtQuick seule avait été rejetée et n’a pas été considérée suffisante. #24 documente les diagnostics restants, dont3risques de layout inchangés, sans masquer les règles. La session réelle et son checkout `5e350a8` ne sont pas avancés/rechargés. Aucun vrai partage/collage/appareil HA, action de session ni release n’a été exécuté. Les rapports reproductibles et détails par ticket restent liés dans les commentaires ; les worktrees/branches intégrés sont retirés sans force après vérification de préservation. - with pi 🥧
Author
Owner

Démarrage de l’implémentation sous mandat explicite de Mathieu. Base distante vérifiée : 5e350a8. Baseline dans le worktree d’intégration : 18 suites passent, HOME/bus/audio isolés.

Première vague — frontières d’écriture

Le chantier est multi-composants ; chaque lane ci-dessous possède un contrat indépendamment testable et son worktree. Pas de plusieurs écrivains dans un même checkout.

Lane Branche / worktree sous ~/Projets/worktrees/dotfiles/ Contrat et fichiers possédés Gate et transfert
Notifications #12 pi/quickshell-notification-signals / quickshell-notification-signals Rafraîchissement des actions : NotificationService.qml et tests natifs ciblés Test ancien rouge/nouveau vert, borne du nombre de mises à jour ; commit signé puis revue
Partage #14 pi/quickshell-share-recipient / quickshell-share-recipient DesktopPage.qml, test QML/launcher dédié ; destinataire, pas encore staging de fichier Faux appareils A→B/cancel/hors ligne ; commit signé puis revue
HA #16 pi/quickshell-ha-validation / quickshell-ha-validation Passerelle .mjs et ses tests, structures/erreurs de messages MockSocket, aucune connexion réelle ; commit signé puis revue
Parent #17/#20 pi/quickshell-review / quickshell-review-integration Backend de bascule et test ; séparément terminateur d’arguments Runtime + test Faux processus/services, tests privés ; deux commits distincts

Le parent garde décisions, acceptation, intégration et publication. Aucun enfant ne pousse ni ne modifie le tracker. Les changements ne touchent pas le checkout actif lié à ~/.config/quickshell pendant le développement. La publication du code et son activation dans la session seront distinguées ; pas de vrai partage/collage, commande HA, verrouillage ou redémarrage de service sensible pour valider sans accord.

Les étapes #13/#15 suivront le contrat notifications stabilisé ; les autres travaux indépendants continueront pendant les revues. Les refactorings généraux restent en fin de chaîne.

  • with pi 🥧
Démarrage de l’implémentation sous mandat explicite de Mathieu. Base distante vérifiée : `5e350a8`. Baseline dans le worktree d’intégration : **18 suites passent**, HOME/bus/audio isolés. ### Première vague — frontières d’écriture Le chantier est multi-composants ; chaque lane ci-dessous possède un contrat indépendamment testable et son worktree. Pas de plusieurs écrivains dans un même checkout. | Lane | Branche / worktree sous `~/Projets/worktrees/dotfiles/` | Contrat et fichiers possédés | Gate et transfert | |---|---|---|---| | Notifications #12 | `pi/quickshell-notification-signals` / `quickshell-notification-signals` | Rafraîchissement des actions : `NotificationService.qml` et tests natifs ciblés | Test ancien rouge/nouveau vert, borne du nombre de mises à jour ; commit signé puis revue | | Partage #14 | `pi/quickshell-share-recipient` / `quickshell-share-recipient` | `DesktopPage.qml`, test QML/launcher dédié ; destinataire, pas encore staging de fichier | Faux appareils A→B/cancel/hors ligne ; commit signé puis revue | | HA #16 | `pi/quickshell-ha-validation` / `quickshell-ha-validation` | Passerelle `.mjs` et ses tests, structures/erreurs de messages | MockSocket, aucune connexion réelle ; commit signé puis revue | | Parent #17/#20 | `pi/quickshell-review` / `quickshell-review-integration` | Backend de bascule et test ; séparément terminateur d’arguments Runtime + test | Faux processus/services, tests privés ; deux commits distincts | Le parent garde décisions, acceptation, intégration et publication. Aucun enfant ne pousse ni ne modifie le tracker. Les changements ne touchent pas le checkout actif lié à `~/.config/quickshell` pendant le développement. La publication du code et son activation dans la session seront distinguées ; pas de vrai partage/collage, commande HA, verrouillage ou redémarrage de service sensible pour valider sans accord. Les étapes #13/#15 suivront le contrat notifications stabilisé ; les autres travaux indépendants continueront pendant les revues. Les refactorings généraux restent en fin de chaîne. - with pi 🥧
Author
Owner

Première vague publiée et vérifiée : #12, #14, #16, #17 et #20 clos au commit e8ec9ad. 20 suites d’intégration passent ; revues indépendantes propres après correction du test temporel #12.

Les faux rejets de fin de run (« staged files » sur la seule ligne ## branche) ont été traités par reprise du même protocole avec vérification parent explicite de l’index/porcelain, signatures, tests et revue ; aucune modification du harness.

Le checkout lié à la session n’a pas été avancé/rechargé. La suite porte sur #13/#15 ; l’investigation #18 s’appuie sur le code KDE Connect du tag installé v26.08.2 fourni par le parent, le rôle de recherche n’ayant pas ses outils web disponibles. Les durcissements et optimisations non encore validés restent ouverts.

  • with pi 🥧
Première vague publiée et vérifiée : #12, #14, #16, #17 et #20 clos au commit [e8ec9ad](https://git.2027a.net/mathieu/dotfiles/commit/e8ec9ad7563960637ef33c13f0a1431f6bfab132). **20 suites d’intégration passent** ; revues indépendantes propres après correction du test temporel #12. Les faux rejets de fin de run (« staged files » sur la seule ligne `## branche`) ont été traités par reprise du même protocole avec vérification parent explicite de l’index/porcelain, signatures, tests et revue ; aucune modification du harness. Le checkout lié à la session n’a pas été avancé/rechargé. La suite porte sur #13/#15 ; l’investigation #18 s’appuie sur le code KDE Connect du tag installé `v26.08.2` fourni par le parent, le rôle de recherche n’ayant pas ses outils web disponibles. Les durcissements et optimisations non encore validés restent ouverts. - with pi 🥧
Author
Owner

Deuxième vague (base publiée e8ec9ad) :

Lane Worktree / branche Autorité / frontière Gate suivant
#13 admission native quickshell-notification-admission / pi/quickshell-notification-admission Écriture exclusive de la politique NotificationService/Logic, tests ciblés et doc ; #15 pas encore inclus Bornes nouvelles/remplacements, pas d’archive accidentelle, mesures synthétiques et revue
#21 design événements quickshell-session-events / pi/quickshell-session-events Lecture et baseline seulement : schéma producteur logind/systemd, garanties/reconnexion ; pas encore de modification QML Contrat explicite avant producteur puis intégration QML par le parent
#19 contrat sélection quickshell-clipboard-contract / pi/quickshell-clipboard-contract Lecture seulement des capacités installées/sources, sans lire le vrai presse-papiers ni connecter le compositeur Garantie observable et limite d’atomicité avant implémentation

Le partage #18 attend une décision de conservation temporaire ; le contexte source et les alternatives sont dans son ticket. Le parent garde intégration, publication et acceptation. Les worktrees #12/#14/#16 intégrés ont été retirés sans force après vérification des index, fichiers non suivis et commits préservés sur origin/main. Le checkout actif n’a pas changé.

  • with pi 🥧
Deuxième vague (base publiée `e8ec9ad`) : | Lane | Worktree / branche | Autorité / frontière | Gate suivant | |---|---|---|---| | #13 admission native | `quickshell-notification-admission` / `pi/quickshell-notification-admission` | Écriture exclusive de la politique NotificationService/Logic, tests ciblés et doc ; #15 pas encore inclus | Bornes nouvelles/remplacements, pas d’archive accidentelle, mesures synthétiques et revue | | #21 design événements | `quickshell-session-events` / `pi/quickshell-session-events` | **Lecture et baseline seulement** : schéma producteur logind/systemd, garanties/reconnexion ; pas encore de modification QML | Contrat explicite avant producteur puis intégration QML par le parent | | #19 contrat sélection | `quickshell-clipboard-contract` / `pi/quickshell-clipboard-contract` | **Lecture seulement** des capacités installées/sources, sans lire le vrai presse-papiers ni connecter le compositeur | Garantie observable et limite d’atomicité avant implémentation | Le partage #18 attend une décision de conservation temporaire ; le contexte source et les alternatives sont dans son ticket. Le parent garde intégration, publication et acceptation. Les worktrees #12/#14/#16 intégrés ont été retirés sans force après vérification des index, fichiers non suivis et commits préservés sur origin/main. Le checkout actif n’a pas changé. - with pi 🥧
Author
Owner

#13 intégré et vérifié sur main 166c763 : 6/13 tickets corrigés,21 suites passantes. Les détails de bornes, mesures et limites amont sont dans #13. Les revues #13 sont propres.

Suite : même propriétaire du composant notifications pour #15, au worktree quickshell-notification-admission remis à la base publiée ; #22 reprend son propriétaire de tests au worktree quickshell-panel-lazy, baseline actualisée avec #13, pour optimisation minimale HomePage/LightControl/LightRow. Préparation #22 :9tests dont4 échecs attendus (instanciation inactive/repliée, pièce non choisie, focus caché),5 comportements normaux passent ; autorisation de production seulement maintenant après #13.

#21 : le schéma v1 est accepté, la revue producteur demande un filtrage exact des chemins quand l’unité est absente. Correction séparée dans la lane producteur. Le parent possède le consommateur QML au worktree quickshell-session-consumer, sans édition Python du producteur ; aucune intégration finale avant deux gates/revues. Le fil JSON est ASCII échappé (sous-ensemble UTF-8) pour permettre un cadrage QML borné sans buffer natif de ligne illimité. Les arbitrages #18/#19 restent en attente de Mathieu.

  • with pi 🥧
#13 intégré et vérifié sur main `166c763` : **6/13 tickets corrigés**,21 suites passantes. Les détails de bornes, mesures et limites amont sont dans #13. Les revues #13 sont propres. Suite : même propriétaire du composant notifications pour #15, au worktree `quickshell-notification-admission` remis à la base publiée ; #22 reprend son propriétaire de tests au worktree `quickshell-panel-lazy`, baseline actualisée avec #13, pour optimisation minimale HomePage/LightControl/LightRow. Préparation #22 :9tests dont4 échecs attendus (instanciation inactive/repliée, pièce non choisie, focus caché),5 comportements normaux passent ; autorisation de production seulement maintenant après #13. #21 : le schéma v1 est accepté, la revue producteur demande un filtrage exact des chemins quand l’unité est absente. Correction séparée dans la lane producteur. Le parent possède le consommateur QML au worktree `quickshell-session-consumer`, sans édition Python du producteur ; aucune intégration finale avant deux gates/revues. Le fil JSON est ASCII échappé (sous-ensemble UTF-8) pour permettre un cadrage QML borné sans buffer natif de ligne illimité. Les arbitrages #18/#19 restent en attente de Mathieu. - with pi 🥧
Author
Owner

#21 publié et vérifié sur main a1e4e1d : 8/13 tickets clos, gate combiné23/23 suites privées, revues producteur/consommateur propres. Gain CPU/processus synthétique fort, mais +17–19Mio de PSS résidente : compromis explicite, pas optimisation mémoire. Détails reproductibles et limites dans #21. Les worktrees producteur/consommateur intégrés ont été retirés sans force après contrôle des fichiers/index/commits préservés.

Mathieu a donné son accord réel pour #18 (cache privé, quota, nettoyage opportuniste24h) et #19 (collage ciblé meilleure-effort, sans atomicité). Le statut d’objectif est de nouveau running ; les checkpoints automatiques n’ont pas servi d’accord. Implémentations parallèles : quickshell-share-staging / pi/quickshell-share-staging pour le staging+bridge/tests ; quickshell-clipboard-contract / pi/quickshell-clipboard-contract pour l’invalidation passive+messages/tests, sans extraction#23 encore. Frontières de code distinctes ; le parent garde publication et acceptation.

#22 n’est pas publié : essais60cycles confirment le gain froid mais une enveloppe chaude/pics plus hauts que l’ancien code malgré des objets libérés et un plateau observé. Nouvelle itération isolée quickshell-panel-resident-room / pi/quickshell-panel-resident-room, basée sur la version revue conservée aba35bd : comparer une conservation déclarative bornée à la dernière pièce consultée pour éviter les cycles de destruction/recréation. Pas de GC forcé ni cache de toutes les pièces. L’ancienne candidate reste préservée ; les tests structurels évolueront explicitement si cette stratégie gagne, pas pour masquer une régression.

La session active reste sur son checkout initial, sans reload/activation ni essai réel d’appareil/presse-papiers.

  • with pi 🥧
#21 publié et vérifié sur `main` `a1e4e1d` : **8/13 tickets clos**, gate combiné23/23 suites privées, revues producteur/consommateur propres. Gain CPU/processus synthétique fort, mais **+17–19Mio de PSS résidente** : compromis explicite, pas optimisation mémoire. Détails reproductibles et limites dans #21. Les worktrees producteur/consommateur intégrés ont été retirés sans force après contrôle des fichiers/index/commits préservés. Mathieu a donné son accord réel pour #18 (cache privé, quota, nettoyage opportuniste24h) et #19 (collage ciblé meilleure-effort, sans atomicité). Le statut d’objectif est de nouveau running ; les checkpoints automatiques n’ont pas servi d’accord. Implémentations parallèles : `quickshell-share-staging` / `pi/quickshell-share-staging` pour le staging+bridge/tests ; `quickshell-clipboard-contract` / `pi/quickshell-clipboard-contract` pour l’invalidation passive+messages/tests, sans extraction#23 encore. Frontières de code distinctes ; le parent garde publication et acceptation. #22 n’est **pas publié** : essais60cycles confirment le gain froid mais une enveloppe chaude/pics plus hauts que l’ancien code malgré des objets libérés et un plateau observé. Nouvelle itération isolée `quickshell-panel-resident-room` / `pi/quickshell-panel-resident-room`, basée sur la version revue conservée `aba35bd` : comparer une conservation déclarative bornée à la dernière pièce consultée pour éviter les cycles de destruction/recréation. Pas de GC forcé ni cache de toutes les pièces. L’ancienne candidate reste préservée ; les tests structurels évolueront explicitement si cette stratégie gagne, pas pour masquer une régression. La session active reste sur son checkout initial, sans reload/activation ni essai réel d’appareil/presse-papiers. - with pi 🥧
Author
Owner

10/13 tickets clos et intégrés, main42bdfdd, gate parent25/25 suites privées, contenu distant/signatures vérifiés. #18 inclut le correctif d’ancêtres renommables trouvé en revue ; BLOCK retiré au head5ce5479. #19 inclut le contrôle positif de l’assertion anti-getter, revu sans constat restant. Les décisions de Mathieu et limites exactes sont inscrites dans ces deux tickets ; worktrees/branches intégrés retirés sans force après vérification. La session active n’a pas été avancée.

#23 : extraction mécanique5886639 terminée,21 tests natifs +24 suites au head de branche, revue indépendante propre. Gate parent combiné restant avant publication ; différé pendant les mesures#22 pour ne pas contaminer leurs conditions.

#22 : A(destruction totale) etB(dernière pièce seule) restent non publiées. Comparaison équitable deB/ancien sur2×128lampes : gain froid~63Mio RSS, mais +32,46Mio RSS après60changements de pièce. Ce n’est pas acceptable comme gain mémoire général. EssaiC ciblé : chargement à première consultation, puis conservation des corps consultés avec flags d’identifiants prunés par l’inventaire (au plus l’inventaire eager original), dépendances live/activité coupées si masqués.13 tests fonctionnels privés passent ; mesures appariées sur une pièce et changements entre deux pièces sont en cours, sans tests concurrents/GC forcé. Acceptation/revue non acquises.

#24 attend la stabilisation22/23 : renommages QML et tri documenté des diagnostics seulement, pas de réécriture. Aucun nouveau choix produit, release, vrai partage/collage/appareil ni activation n’est entrepris.

  • with pi 🥧
**10/13 tickets clos et intégrés**, main`42bdfdd`, gate parent25/25 suites privées, contenu distant/signatures vérifiés. #18 inclut le correctif d’ancêtres renommables trouvé en revue ; BLOCK retiré au head5ce5479. #19 inclut le contrôle positif de l’assertion anti-getter, revu sans constat restant. Les décisions de Mathieu et limites exactes sont inscrites dans ces deux tickets ; worktrees/branches intégrés retirés sans force après vérification. La session active n’a pas été avancée. #23 : extraction mécanique5886639 terminée,21 tests natifs +24 suites au head de branche, revue indépendante propre. Gate parent combiné restant avant publication ; différé pendant les mesures#22 pour ne pas contaminer leurs conditions. #22 : A(destruction totale) etB(dernière pièce seule) restent non publiées. Comparaison équitable deB/ancien sur2×128lampes : gain froid~63Mio RSS, mais **+32,46Mio RSS après60changements de pièce**. Ce n’est pas acceptable comme gain mémoire général. EssaiC ciblé : chargement à première consultation, puis conservation des corps consultés avec flags d’identifiants prunés par l’inventaire (au plus l’inventaire eager original), dépendances live/activité coupées si masqués.13 tests fonctionnels privés passent ; mesures appariées sur une pièce et changements entre deux pièces sont en cours, sans tests concurrents/GC forcé. Acceptation/revue non acquises. #24 attend la stabilisation22/23 : renommages QML et tri documenté des diagnostics seulement, pas de réécriture. Aucun nouveau choix produit, release, vrai partage/collage/appareil ni activation n’est entrepris. - with pi 🥧
Author
Owner

12/13 tickets enfants intégrés et clos, maind5f3472, gate parent26/26 suites privées. #22 final6f52da2 revu, scénarios de métadonnées/préselection corrigés, mesures finales publiées avec leurs coûts : gain à froid25–64MioRSS, empreinte chaude mixte/surcoût résiduel, première consultation128contrôles142ms contre13ms déjà préchargés. Décision technique documentée : optimisation à froid seulement, pas fuite corrigée ni RAM globalement plus basse.

Deux vrais QScreen virtuels natifs et même QQuickWindow A/B/A, fermeture/réouverture hors-ligne, inventaire absent/restauré et focus vérifiés sans commande ; limites physiques/compositeur/LayerShell/SystemPanel explicitement non revendiquées. Source primaire active inchangée5e350a8. Worktrees A/C intégrés retirés sans force après contrôle de préservation des commits ; données/scripts avant-après conservés hors dépôt. Un ancien processus orphelin d’une fixture privée de notification a aussi été identifié par HOME/XDG/offscreen/cwd exacts et arrêté via pidfd/SIGTERM, sans toucher l’instance réelle.

#24 seul restant : phaseA statique relue, phaseB en cours dans quickshell-clarity, basée exactement sur le code fonctionnel intégré. Renommages de membres/IDs ambigus, expressions locales et diagnostics catégorisés ; aucun changement de traduction/protocole/erreurs/activité voulu. Géométrie éventuelle soumise à preuve comparative séparée, pas de chmod ou suppression globale. Revue finale, gate parent et nettoyage du label dédiés encore à faire.

  • with pi 🥧
**12/13 tickets enfants intégrés et clos**, main`d5f3472`, gate parent26/26 suites privées. #22 final6f52da2 revu, scénarios de métadonnées/préselection corrigés, mesures finales publiées avec leurs coûts : gain à froid25–64MioRSS, empreinte chaude mixte/surcoût résiduel, première consultation128contrôles~142ms contre~13ms déjà préchargés. Décision technique documentée : optimisation à froid seulement, pas fuite corrigée ni RAM globalement plus basse. Deux vrais QScreen virtuels natifs et même QQuickWindow A/B/A, fermeture/réouverture hors-ligne, inventaire absent/restauré et focus vérifiés sans commande ; limites physiques/compositeur/LayerShell/SystemPanel explicitement non revendiquées. Source primaire active inchangée5e350a8. Worktrees A/C intégrés retirés sans force après contrôle de préservation des commits ; données/scripts avant-après conservés hors dépôt. Un ancien processus orphelin d’une fixture privée de notification a aussi été identifié par HOME/XDG/offscreen/cwd exacts et arrêté via pidfd/SIGTERM, sans toucher l’instance réelle. #24 seul restant : phaseA statique relue, phaseB en cours dans `quickshell-clarity`, basée exactement sur le code fonctionnel intégré. Renommages de membres/IDs ambigus, expressions locales et diagnostics catégorisés ; aucun changement de traduction/protocole/erreurs/activité voulu. Géométrie éventuelle soumise à preuve comparative séparée, pas de chmod ou suppression globale. Revue finale, gate parent et nettoyage du label dédiés encore à faire. - with pi 🥧
Author
Owner

Clôture corrigée après rejet de l’audit final : le test à deux vrais QScreen virtuels déplaçait une fenêtre QtQuick contenant HomePage, sans SystemPanel/PanelWindow/LayerShell. Il ne couvre donc pas le critère explicite « deux écrans, déplacement du panneau ». Le code final90f0cd8, les26suites, les mesures mémoire/latence et revues restent valides, mais l’acceptation est incomplète. #22 et #11 sont rouverts ; le suivi de chantier a été rétabli sur leurs véritables descendants. Prochaine étape : panneau complet dans un compositeur privé headless à deux sorties, services/données factices, aucune connexion/commande à la session hôte. Si impossible sans action sensible, demander à Mathieu une validation ou modification explicite du critère ; aucune acceptation n’est inférée.

  • with pi 🥧
Clôture corrigée après rejet de l’audit final : le test à deux vrais QScreen virtuels déplaçait une fenêtre QtQuick contenant HomePage, **sans SystemPanel/PanelWindow/LayerShell**. Il ne couvre donc pas le critère explicite « deux écrans, déplacement du panneau ». Le code final90f0cd8, les26suites, les mesures mémoire/latence et revues restent valides, mais l’acceptation est incomplète. #22 et #11 sont rouverts ; le suivi de chantier a été rétabli sur leurs véritables descendants. Prochaine étape : panneau complet dans un compositeur privé headless à deux sorties, services/données factices, aucune connexion/commande à la session hôte. Si impossible sans action sensible, demander à Mathieu une validation ou modification explicite du critère ; aucune acceptation n’est inférée. - with pi 🥧
Author
Owner

Validation complémentaire terminée après l’autorisation explicite « oui, ok » de Mathieu : vraiSystemPanel/PanelWindow/LayerShell avec ses4pages de production90f0cd8, données/services factices, déplacé sur les2sorties existantes A→B→A puis bord droit/haut, fermé surB et rouvert surA. Ce n’est plus le simple QQuickWindow de la preuve initiale.18instantanés passent ; le compositeur identifie lePID du test sur chaque sortie et les protocoles Wayland confirment surfaces layer-shell, output-enter, configuration, entrée clavier et focus-grab. Rotation/logicalité/barre réservée prises en compte. Les contrôles/membres/états/focus et navigation sont conservés, données hors-ligne/absentes/restaurées couvertes ; le faux oracle de mauvaise sortie échoue comme attendu.

Le panneau a été visible 5,48secondes, puis fermé ; son client/watchdog sont sortis, état des sorties et surfaces hôtes identique, focus d’origine revenu automatiquement sans dispatch de restauration. Aucune commande de backend/appareil/session/presse-papiers, aucun receive de contenu ni capture d’écran. HOME/XDG/bus/audio privés, seule la connexion d’affichage autorisée au compositeur réel.39dépendancesQML/JS et90blobs de source inchangés ; checkout/instance habituels non avancés/rechargés.

Revue indépendante des preuves606a0f9a puis09dba92e/b4449195 : objection initiale couverte, notesP2 de classification des warnings et recette de reproduction corrigées/clarifiées, aucun constat restant. Le premier essai n’avait pas affiché de surface : nom synthétiqueIPCshow réservé, erreurCLI109 ; cause démontrée, puis tentative fraîche explicitement autorisée avec fixtureopenPanel etfauxchampmetrics.error corrigés. Aucun correctifQt/compositeur/panneau de production ou changement de runner.

**Pas de prétention warning-free :**4messages précis d’indisponibilité attendue des backends privés et21warningsQtWaylandtextinputdisableSurface sont conservés ; l’allowlist exacte rejette tout autreWARN/ERROR/FATAL/CRITICAL, zéro erreur QMLtype/référence/binding/assignment. La navigation/focus native est vérifiée malgré ces transitoires ; aucune correction universelle de textinput revendiquée.

Preuves privées : /tmp/authorized-full-panel-retry.oJzxXYh7/ (18snapshots natifs/états, sources/hashes, logs protocolaires FILTRÉS) ; vérification parent etallowlist dans /tmp/pi-quickshell-tickets.7b0ahn/. Ne pas publier les logs Wayland bruts (descriptions matériel). La recette de relecture est l’inspection des fichiers retenus et le nouveau classificateur à sortie séparée ; ne pas relancer le driver live ni l’ancienverify-evidence (queries/proc/écritures) sans nouvelle autorisation/revue. Ce dernier reste historique.

Le critère « deux écrans, déplacement du panneau, fermeture/réouverture et données absentes » est maintenant accepté sur cette preuve complète. Le code et le gate26/26 au90f0cd8 restent inchangés ; aucune nouvelle mesure de ressources n’a été substituée.

  • with pi 🥧
Validation complémentaire terminée après l’autorisation explicite « oui, ok » de Mathieu : **vraiSystemPanel/PanelWindow/LayerShell avec ses4pages de production90f0cd8**, données/services factices, déplacé sur les2sorties existantes A→B→A puis bord droit/haut, fermé surB et rouvert surA. Ce n’est plus le simple QQuickWindow de la preuve initiale.18instantanés passent ; le compositeur identifie lePID du test sur chaque sortie et les protocoles Wayland confirment surfaces layer-shell, output-enter, configuration, entrée clavier et focus-grab. Rotation/logicalité/barre réservée prises en compte. Les contrôles/membres/états/focus et navigation sont conservés, données hors-ligne/absentes/restaurées couvertes ; le faux oracle de mauvaise sortie échoue comme attendu. Le panneau a été visible **5,48secondes**, puis fermé ; son client/watchdog sont sortis, état des sorties et surfaces hôtes identique, focus d’origine revenu automatiquement **sans dispatch de restauration**. Aucune commande de backend/appareil/session/presse-papiers, aucun receive de contenu ni capture d’écran. HOME/XDG/bus/audio privés, seule la connexion d’affichage autorisée au compositeur réel.39dépendancesQML/JS et90blobs de source inchangés ; checkout/instance habituels non avancés/rechargés. Revue indépendante des preuves606a0f9a puis09dba92e/b4449195 : objection initiale couverte, notesP2 de classification des warnings et recette de reproduction corrigées/clarifiées, aucun constat restant. Le premier essai n’avait pas affiché de surface : nom synthétiqueIPCshow réservé, erreurCLI109 ; cause démontrée, puis tentative fraîche explicitement autorisée avec fixtureopenPanel etfauxchampmetrics.error corrigés. Aucun correctifQt/compositeur/panneau de production ou changement de runner. **Pas de prétention warning-free :**4messages précis d’indisponibilité attendue des backends privés et21warningsQtWaylandtextinputdisableSurface sont conservés ; l’allowlist exacte rejette tout autreWARN/ERROR/FATAL/CRITICAL, zéro erreur QMLtype/référence/binding/assignment. La navigation/focus native est vérifiée malgré ces transitoires ; aucune correction universelle de textinput revendiquée. Preuves privées : `/tmp/authorized-full-panel-retry.oJzxXYh7/` (18snapshots natifs/états, sources/hashes, logs protocolaires FILTRÉS) ; vérification parent etallowlist dans `/tmp/pi-quickshell-tickets.7b0ahn/`. Ne pas publier les logs Wayland bruts (descriptions matériel). La recette de relecture est l’inspection des fichiers retenus et le nouveau classificateur à sortie séparée ; **ne pas relancer** le driver live ni l’ancienverify-evidence (queries/proc/écritures) sans nouvelle autorisation/revue. Ce dernier reste historique. Le critère « deux écrans, déplacement du panneau, fermeture/réouverture et données absentes » est maintenant accepté sur cette preuve complète. Le code et le gate26/26 au90f0cd8 restent inchangés ; aucune nouvelle mesure de ressources n’a été substituée. - with pi 🥧
mathieu 2026-10-24 19:57:56 +00:00
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#11
No description provided.