84 lines
4.6 KiB
Markdown
84 lines
4.6 KiB
Markdown
# Modifications locales AppDaemon — état au 4 novembre 2026
|
||
|
||
Toute l’instrumentation des utility loops a été retirée sur disque : chronométrages,
|
||
profils de piles, décorateurs et messages de diagnostic. Le module ajouté
|
||
`_utility_diagnostics.py` et son cache ont été supprimés.
|
||
|
||
## Seuls correctifs conservés dans le core
|
||
|
||
- `plugin_management.py` : `refresh_update_time(plugin.name)`, décrit dans
|
||
[APPDAEMON_BANDWIDTH_BUG_FIX.md](../APPDAEMON_BANDWIDTH_BUG_FIX.md).
|
||
- `utils.py` : comparaison des ensembles de clés dans `deep_compare`, décrite dans
|
||
[APPDAEMON_RELOAD_BUG_FIX.md](../APPDAEMON_RELOAD_BUG_FIX.md).
|
||
|
||
Comparaison de **309 fichiers** au tag officiel
|
||
[4.5.10](https://github.com/AppDaemon/appdaemon/tree/4.5.10) : tous sont identiques
|
||
à l’octet près, sauf ces deux modifications exactes. Aucun fichier source supplémentaire.
|
||
Les caches Python générés sont exclus de cette comparaison.
|
||
Le fichier statique `aui/index-prod.html`, absent du paquet installé mais présent
|
||
au tag, a également été remis depuis ce tag pour respecter cette référence.
|
||
|
||
- [Diff intégral restant](appdaemon-core-4.5.10.diff)
|
||
- [Empreintes SHA-256 des fichiers vérifiés](appdaemon-core-audit.json)
|
||
|
||
## Optimisation applicative conservée
|
||
|
||
`apps/ad_toolbox/logger_interface.py` conserve le raccourci évitant l’inspection
|
||
inutile des piles pour les messages ordinaires. `adapi.py` est identique au tag.
|
||
Les sept tests `test_logger_interface_fast_path.py` passent après restauration.
|
||
Les onze vérifications de `deep_compare` du document du correctif passent aussi.
|
||
|
||
## Archive et retour arrière
|
||
|
||
Les anciens scripts, tests spécifiques au diagnostic, sauvegardes et documents
|
||
historiques sont conservés dans
|
||
`tools/archive/appdaemon-diagnostics-retired-20261104.tar.gz`.
|
||
Ils ne sont plus installés ni collectés par la suite de tests.
|
||
Les deux fichiers `.bak` du paquet ont été déplacés dans cette archive
|
||
(sous `site-packages-backups/`). Les anciens chemins de sauvegarde décrits dans
|
||
les documents historiques ne sont donc plus actifs.
|
||
|
||
**Un redémarrage AppDaemon reste nécessaire** pour décharger le code instrumenté
|
||
déjà en mémoire. Le service n’a pas été redémarré durant cette intervention.
|
||
Les réglages applicatifs et les exclusions de dossiers existantes n’ont pas été modifiés.
|
||
|
||
## Réapplication après rollback — 8 novembre 2026
|
||
|
||
Version vérifiée : **4.5.10**, avec `/usr/local/bin/python3` et le paquet
|
||
`/usr/local/lib/python3.12/site-packages/appdaemon`. PID 1 :
|
||
`python3 -m appdaemon -c /conf`.
|
||
|
||
Les trois changements absents ont été réappliqués :
|
||
|
||
- `plugin_management.py` : `refresh_update_time(plugin.name)`.
|
||
- `utils.py` : comparaison des clés au début de `deep_compare`.
|
||
- `/usr/src/app/dockerStart.sh` : un seul appel à
|
||
`sh "$CONF/archiveLogs.sh"`, avant le lancement AppDaemon.
|
||
|
||
Sauvegardes originales et manifeste (chemins absolus, version, SHA-256) :
|
||
`/conf/tools/backups/appdaemon-4.5.10-20261108T094103312482Z/manifest.json`.
|
||
Le lien `/conf/dockerStart.sh` pointe toujours vers le script ci-dessus.
|
||
Le raccourci applicatif de `LoggerInterface` était déjà présent et a été conservé.
|
||
Aucun changement aux apps, YAML, exclusions ou à `archiveLogs.sh`.
|
||
|
||
Validations exécutées : 11 cas `deep_compare` réussis, syntaxe des deux fichiers
|
||
Python valide, correctif HASS vérifié, syntaxe shell des deux scripts valide,
|
||
un seul appel d'archivage placé avant l'exec. Les 7 tests
|
||
`test_logger_interface_fast_path.py` passent, sans tests ignorés.
|
||
Sur 5 tests `test_logger_interface_grouping.py`, 2 passent et 3 échouent
|
||
sur les libellés/groupes (`test_log_group_takes_priority_over_condition_name`,
|
||
`test_smart_object_groups_its_own_lifecycle`,
|
||
`test_smartcondition_uses_smartobject_api_scope_without_logger_interface_argument`).
|
||
Le code applicatif concerné n'a pas été modifié pendant cette intervention.
|
||
|
||
**Redémarrage non effectué** : le service est PID 1 du conteneur, sans CLI Docker,
|
||
socket Docker ou superviseur disponible. Redémarrer le conteneur existant depuis
|
||
son gestionnaire habituel pour charger les correctifs Python et exécuter
|
||
l'archivage. Une recréation depuis l'image d'origine effacerait ces patchs.
|
||
Ne pas lancer le script de démarrage ou d'archivage dans le service actif.
|
||
Après redémarrage, restent à vérifier : maintien des patchs, démarrage et connexion
|
||
HASS, archivage et suivi mémoire unique, puis absence de rafraîchissements HASS
|
||
répétés après le délai configuré. Aucun résultat de validation du service
|
||
redémarré n'est affirmé ici. L'audit intégral et le diff historiques ci-dessus
|
||
n'ont pas été régénérés pour cette intervention.
|