From c7fe2505205b2c20f004fddb61ad48b676c0bb2e Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sun, 9 Aug 2026 15:00:43 -0400 Subject: [PATCH] idempotence de la flotte : zero changed, et le zero est verifie MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 924 (rejeu depuis zero) -> 17 (2e passage) -> 0 (3e). Zero tache changed, zero echec sur les quatorze hotes. Le depot n'avait jamais fait ce test a l'echelle de la flotte. Verification du zero, parce qu'un zero peut signifier que les roles ne font plus rien : PLUS de taches se sont executees au passage a vide qu'au rejeu (2266 contre 2152). Elles ont toutes tourne et toutes trouve le systeme conforme. Un zero obtenu avec MOINS de taches aurait dit l'inverse. Ce que le test a rapporte : trois defauts, dont deux n'etaient pas des defauts d'idempotence mais des PANNES SILENCIEUSES — node_exporter mourait a chaque renouvellement de certificat sur les 14 hotes, et chaque deploiement invalidait les jetons OAuth2 de la forge. Le chiffre devient la ligne de base : un deploiement futur qui rapporte changed sur une flotte non modifiee signale desormais quelque chose. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 27 ++++++++++++ ...ference-avant-reconstruction-2026-08-08.md | 41 +++++++++++++++++++ 2 files changed, 68 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index e2435bc..3b1ceba 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # CHANGELOG — Set-OPS +## 2026-08-09 — Idempotence de la flotte : zéro, et c'est un zéro qui veut dire quelque chose + +``` + plays taches ok changed +rejeu depuis zero 61 2152 924 +2e passage 30 2249 17 +3e passage 30 2266 0 +``` + +**Zéro tâche `changed`, zéro échec, sur les quatorze hôtes.** Le dépôt n'avait jamais fait +ce test à l'échelle de la flotte. + +**Vérification du zéro**, parce qu'un zéro peut aussi signifier que les rôles ne font plus +rien : **plus de tâches se sont exécutées au passage à vide qu'au rejeu** — 2266 contre +2152. Elles ont toutes tourné et toutes trouvé le système conforme. Un zéro obtenu avec +*moins* de tâches aurait dit l'inverse. + +**Ce que ce test aura coûté et rapporté.** Trois défauts trouvés, dont deux n'étaient pas +des défauts d'idempotence mais des **pannes silencieuses** : node_exporter mourait à chaque +renouvellement de certificat sur les quatorze hôtes, et chaque déploiement invalidait les +jetons OAuth2 de la forge. Aucune des deux ne se signalait autrement — c'est le compte de +`changed` qui les a fait apparaître. + +Ce chiffre devient la **ligne de base**. Un déploiement futur qui rapporte `changed` sur +une flotte non modifiée signale désormais quelque chose. Tant que le fond était à 17, ce +signal était noyé. + ## 2026-08-09 — Les deux dernières tâches non idempotentes, et ce qu'elles cachaient **Prometheus — une liste non ordonnée.** `intersect` rend un *ensemble*, dont l'ordre diff --git a/docs/audit/reference-avant-reconstruction-2026-08-08.md b/docs/audit/reference-avant-reconstruction-2026-08-08.md index a90d177..0b4681f 100644 --- a/docs/audit/reference-avant-reconstruction-2026-08-08.md +++ b/docs/audit/reference-avant-reconstruction-2026-08-08.md @@ -89,3 +89,44 @@ voie. La reconstruction a inversé l'ordre de démarrage et rendu visible un dé laissé un schéma à moitié migré (`no such column: with_credentials`). Base mise de côté, recréée par Grafana — 95 s pour lier son port, ce qui explique la course. - **Rien d'autre.** Ni certificat, ni compte, ni zone DNS, ni base de données. + + +--- + +## Idempotence de la flotte — référence du 2026-08-09 + +Mesure faite après la seconde reconstruction, en rejouant `make deployer-tout` sur une +flotte intacte. Le dépôt n'avait jamais fait ce test à l'échelle de la flotte. + +``` + plays taches ok changed sautees +rejeu depuis zero 61 2152 924 443 +2e passage 30 2249 17 ... +3e passage (apres) 30 2266 0 227 +``` + +**Zéro tâche `changed`, zéro échec.** + +Et ce zéro n'est pas du silence : **plus de tâches se sont exécutées au passage à vide +qu'au rejeu** (2266 contre 2152). Elles ont toutes tourné, et toutes trouvé le système +conforme. Un zéro obtenu avec moins de tâches aurait signifié l'inverse — des rôles qui ne +font plus leur travail. + +### Ce que les 17 du deuxième passage cachaient + +| Tâche | Ce que c'était vraiment | +|---|---| +| 13× `Activer et demarrer node_exporter` | **le service était mort** — tué par `SIGHUP` à chaque renouvellement de certificat | +| 2× Prometheus | liste de cibles non ordonnée (`intersect` rend un ensemble) | +| 2× Forgejo | **le dépôt faisait tourner le secret JWT du service** à chaque déploiement | + +Deux des trois n'étaient pas des défauts d'idempotence : c'étaient des **pannes**, qu'un +compte de `changed` a rendues visibles. La collecte de métriques s'arrêtait toutes les +24 heures sur les quatorze hôtes, et les jetons OAuth2 de la forge étaient invalidés à +chaque passage. Ni l'une ni l'autre ne se signalait autrement. + +### À quoi sert ce chiffre + +Il devient la **ligne de base**. Un déploiement futur qui rapporte `changed` sur une flotte +non modifiée signale quelque chose : soit une dérive du système, soit un rôle qui a cessé +d'être idempotent. Tant que le fond était à 17, ce signal était noyé.