### L'idempotence ne se décrète pas : elle se mesure
Cette page a longtemps affirmé que redéployer un rôle donnait `changed=0`. C'était vrai **rôle
par rôle** — et faux à l'échelle de la flotte, ce que personne n'avait vérifié. Le 2026-08-09,
après une reconstruction complète, on a compté :
```
924 taches « changed » rejeu depuis zero (tout est neuf : normal)
17 taches « changed » second passage (la flotte devrait etre convergente)
0 taches « changed » apres correction
```
**Les 17 n'étaient pas du bruit.** Elles cachaient deux pannes qui ne se signalaient d'aucune
autre façon :
| Ce qu'on voyait | Ce que c'était |
|---|---|
| 13× « démarrer node_exporter » | le service **était mort** — tué par `SIGHUP` à chaque renouvellement de certificat, donc toutes les 24 h, sur les quatorze hôtes |
| 2× « déployer app.ini » | le dépôt **faisait tourner le secret JWT** de la forge à chaque déploiement, invalidant ses jetons |
La leçon dépasse Ansible : **un compteur de changements est un instrument de diagnostic.** Tant
qu'il indiquait 17, aucun de ces deux défauts n'était visible — ils se noyaient dans un fond
qu'on avait pris l'habitude d'ignorer. Ramené à zéro, le moindre `changed` sur une flotte non
modifiée devient un signal.
**Vérifier le zéro, aussi.** Un zéro peut vouloir dire « rien à faire » ou « plus rien ne
travaille ». On a compté les tâches exécutées : **2266 au passage à vide contre 2152 au rejeu**.
Plus de tâches, aucune modification — donc convergence, pas silence.