[Bloquant v1.0] Le pruning supprime 15 des 16 entités de site à chaque démarrage #77

Open
opened 2026-08-26 05:31:51 +00:00 by mat · 0 comments
Owner

Problème

_async_prune_stale (custom_components/comwatt/__init__.py:108-109) ne référence qu'un seul unique_id par site :

for site in coordinator.sites:
    current_unique_ids.add(f"site_{site['id']}_auto_production_rate")

Or SITE_METRICS (sensor.py:76-94) crée 16 entités par site (4 rates, 6 power, 6 total_energy). Le prune (__init__.py:119-124) supprime toute entité dont l'unique_id n'est pas dans le set, et il s'exécute avant async_forward_entry_setups.

Risque

À chaque redémarrage HA ou reload de l'intégration, les 15 autres entités de site (consumption, production, les 6 *_total_energy…) sont retirées du registre d'entités puis recréées : perte des renommages d'entity_id et des options par entité, risque d'orphelin des statistiques long terme si le slug régénéré diffère, churn du registre à chaque boot.

Le test existant (tests/test_init.py:138-189) ne le détecte pas car il ne pré-semence qu'une entité périmée et ne fait qu'un seul setup — le bug ne se manifeste qu'au 2ᵉ setup.

Recommandation

  1. Construire le set depuis les vraies clés : déplacer les clés SITE_METRICS/SITE_POWER_KEYS dans const.py (élimine aussi la duplication SITE_POWER_KEYS en __init__.py:24-35).
  2. Ajouter un test de régression : deux setups successifs, puis vérifier que les entity_ids des 16 entités de site survivent.

Constaté lors de la review de code pré-v1.0 (v0.8.1).

## Problème `_async_prune_stale` (`custom_components/comwatt/__init__.py:108-109`) ne référence qu'**un seul** unique_id par site : ```python for site in coordinator.sites: current_unique_ids.add(f"site_{site['id']}_auto_production_rate") ``` Or `SITE_METRICS` (`sensor.py:76-94`) crée **16 entités par site** (4 rates, 6 power, 6 total_energy). Le prune (`__init__.py:119-124`) supprime toute entité dont l'unique_id n'est pas dans le set, et il s'exécute avant `async_forward_entry_setups`. ## Risque À chaque redémarrage HA ou reload de l'intégration, les 15 autres entités de site (`consumption`, `production`, les 6 `*_total_energy`…) sont retirées du registre d'entités puis recréées : perte des renommages d'entity_id et des options par entité, risque d'orphelin des statistiques long terme si le slug régénéré diffère, churn du registre à chaque boot. Le test existant (`tests/test_init.py:138-189`) ne le détecte pas car il ne pré-semence qu'une entité *périmée* et ne fait qu'un seul setup — le bug ne se manifeste qu'au 2ᵉ setup. ## Recommandation 1. Construire le set depuis les vraies clés : déplacer les clés `SITE_METRICS`/`SITE_POWER_KEYS` dans `const.py` (élimine aussi la duplication `SITE_POWER_KEYS` en `__init__.py:24-35`). 2. Ajouter un test de régression : deux setups successifs, puis vérifier que les entity_ids des 16 entités de site survivent. --- Constaté lors de la review de code pré-v1.0 (v0.8.1).
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
mat/homeassistant-comwatt#77
No description provided.