La clôture complète
Effort: free — une discipline d'ordre sur un correctif que tu dois déjà : les sondes de vérité disque et le test qui échoue viennent en premier, pas en plus. Élimine : les menus d'options et les confirmations à chaque étape balancés à l'humain en pleine panne.
Quand l'humain signale de la casse ou dit « répare ça », il n'y a qu'une seule bonne
réponse : une clôture complète, compréhension d'abord. La cause racine avec preuve, un
test en échec d'abord, le vert, la preuve en vif sur le chemin propre de l'humain, puis
le commit. Jamais un menu d'options renvoyé vers lui, et jamais une demande de
confirmation à chaque étape — il a déjà dit répare.
Là où les skills voisins exigent un oui explicite pour les actes destructeurs, cette
règle ne gagne que la moitié réversible : le « répare ça » de l'humain EST le oui
permanent pour les écritures de récupération réversibles qui laissent une trace de
sauvegarde ; tout ce qui est irréversible — destruction de données, dépense, envois
externes — passe toujours la decision-bar, et la barre
gagne.
Ne demande quelque chose à l'humain que si c'est prouvé perdu partout ailleurs et que
lui seul peut le fournir. Tout autre intrant, tu vas le chercher.
La méthode
- Sonde la surface normale — puis arrête de lui faire confiance. Appelle l'API ou
la CLI une fois. Si elle répond normalement, ce n'est pas une situation de clôture
d'incident ; passe la main. Si elle renvoie 401/403, connexion refusée, des
résultats vides là où il devrait y avoir des données, ou des données périmées,
cesse de traiter cette surface comme une autorité.
- Établis la vérité terrain depuis le disque, pas depuis l'API. Ne fais jamais
confiance à un service cassé pour décrire son propre état. Lis toi-même les
fichiers de données, les listings de répertoires et les dates de modification, et
compare à ce que l'API prétend. La divergence est le signal de diagnostic.
- Scanne le rayon d'impact. Cherche dans chaque répertoire de données de premier
niveau les fichiers touchés dans la fenêtre de la panne (par ex.
find /data/volumes -newermt "<début>" ! -newermt "<fin>"). Vise une réponse tenant sur
un écran à « qu'est-ce qui a été touché, qu'est-ce qui ne l'a pas été ». Un rayon
étroit (un volume, une table) se récupère ici. Un rayon large (beaucoup de volumes,
tout le répertoire de données) est de la reprise après sinistre — escalade,
n'improvise pas.
- Inventorie survivants vs pertes. Classe chaque actif touché :
- intact sur disque — récupère tel quel
- reconstructible depuis le repo — configs et sauvegardes commitées dans git
- reconstructible depuis l'env ou les fichiers d'identifiants — tokens, mots de
passe
- perdu définitivement — chiffré avec une clé disparue, état vivant uniquement en
mémoire
Seul le dernier panier justifie de demander à l'humain. Tout le reste, tu le
reconstruis.
- La cause racine avec preuve, puis un test rouge. Nomme pourquoi c'est cassé,
avec la preuve venue du disque — pas une supposition. Là où le défaut est dans le
code, écris le test en échec qui le capture avant le correctif, et rends-le vert.
Voir red-first et
root-cause-first.
- Descends les couches en cascade — jamais vers l'humain. Quand le chemin préféré
est cassé, descends d'une couche et réessaie :
API / SDK → CLI dans le conteneur → écritures directes en base → chirurgie du
système de fichiers. Ne sollicite pas l'humain tant qu'il reste des cascades non
tentées. Chaque barreau descendu coûte moins cher que demander.
- Suppose que les dépendances sont cassées aussi. Le code de récupération
n'utilise que la bibliothèque standard de ton langage pour HTTP et JSON — les
clients tiers font peut-être partie de ce qui est mort.
- Écris de façon idempotente, avec des traces de sauvegarde. Chaque écriture
disque laisse une copie
.bak horodatée à côté de la cible. Lire, contrôler,
copier, écrire, re-contrôler — jamais d'écrasement à l'aveugle. Si tu échanges
temporairement un identifiant pour frapper une nouvelle clé, sauvegarde l'original
d'abord et restaure-le avant de rendre la main : le login propre de l'humain
survit intact.
- Vérifie par des appels en vif sur le chemin propre de l'humain. Relance la
sonde de l'étape 1 et confirme que les chiffres collent à l'inventaire
d'avant-incident ou aux sauvegardes du repo. Un état de base vert n'est pas une
preuve ; la surface que l'humain utilise qui remarche, ça, c'est la preuve.
- Committe et rapporte. Committe les fichiers du correctif seulement. Rapporte :
ce qui a été sondé, le rayon d'impact, les actions dans l'ordre, les comptes
restaurés, ce qui est définitivement perdu (vide s'il n'y a rien), et toute étape
qui a échoué sans être fatale.
Signaux d'alarme — arrête-toi et re-sonde
- « Je vais demander à l'humain pourquoi c'est cassé » — non ; découvre-le d'abord
depuis le disque.
- « L'API dit qu'il n'y a rien ici » — la vision qu'une API cassée a d'elle-même n'est
pas la vérité.
- « Je vais juste réinstaller propre » — tu es en train de jeter de l'état
récupérable.
- « La clé a disparu donc les identifiants sont inutiles » — les valeurs en clair
vivent souvent encore dans l'env ou les fichiers d'identifiants ; recrée
l'identifiant.
- « Confirmer avant chaque étape ? » — l'humain a dit répare ; déroule la cascade,
rapporte à la fin.
Règles dures — une seule fait rater le skill
- Des options renvoyées à l'humain alors qu'une solution claire existe.
- Une écriture destructrice sans trace
.bak.
- L'humain sollicité pour quoi que ce soit avant que la cascade et l'inventaire aient
été épuisés.
- Un sous-système retraité « gentiment » restauré — un service décommissionné qui
reste éteint est l'état désiré, et le rallumer est la décision délibérée de
l'humain.
- Une récupération déclarée finie sur l'état interne au lieu d'une sonde en vif sur
son chemin.
- Un correctif laissé non committé (sauf si l'humain a explicitement dit pas de
commit).
Marche bien avec
1---2name: incident-closure-43description: À utiliser quand l'humain signale une casse ou dit « répare ça » — surtout quand le plan de contrôle normal (API, CLI, service) est mort et qu'il faut passer en dessous. La réponse est une clôture complète, compréhension d'abord — cause racine avec preuves, test en échec d'abord, vert, preuve live sur le propre chemin de l'humain, commit — jamais un menu d'options en retour. Trigger words: fix it, fix shit, full close, broken, wiped, down, it stopped working, recover, restore, répare ça, c'est cassé, en panne, ça ne marche plus, récupérer, restaurer, clôture complète.4license: MIT5---67# La clôture complète8**Effort:** free — une discipline d'ordre sur un correctif que tu dois déjà : les sondes de vérité disque et le test qui échoue viennent en premier, pas en plus. Élimine : les menus d'options et les confirmations à chaque étape balancés à l'humain en pleine panne.910Quand l'humain signale de la casse ou dit « répare ça », il n'y a qu'une seule bonne11réponse : une clôture complète, compréhension d'abord. La cause racine avec preuve, un12test en échec d'abord, le vert, la preuve en vif sur le chemin propre de l'humain, puis13le commit. Jamais un menu d'options renvoyé vers lui, et jamais une demande de14confirmation à chaque étape — il a déjà dit répare.1516Là où les skills voisins exigent un oui explicite pour les actes destructeurs, cette17règle ne gagne que la moitié réversible : le « répare ça » de l'humain EST le oui18permanent pour les écritures de récupération réversibles qui laissent une trace de19sauvegarde ; tout ce qui est irréversible — destruction de données, dépense, envois20externes — passe toujours la [decision-bar](../decision-bar/SKILL.md), et la barre21gagne.2223Ne demande quelque chose à l'humain que si c'est prouvé perdu partout ailleurs et que24lui seul peut le fournir. Tout autre intrant, tu vas le chercher.2526## La méthode27281. **Sonde la surface normale — puis arrête de lui faire confiance.** Appelle l'API ou29 la CLI une fois. Si elle répond normalement, ce n'est pas une situation de clôture30 d'incident ; passe la main. Si elle renvoie 401/403, connexion refusée, des31 résultats vides là où il devrait y avoir des données, ou des données périmées,32 cesse de traiter cette surface comme une autorité.332. **Établis la vérité terrain depuis le disque, pas depuis l'API.** Ne fais jamais34 confiance à un service cassé pour décrire son propre état. Lis toi-même les35 fichiers de données, les listings de répertoires et les dates de modification, et36 compare à ce que l'API prétend. La divergence est le signal de diagnostic.373. **Scanne le rayon d'impact.** Cherche dans chaque répertoire de données de premier38 niveau les fichiers touchés dans la fenêtre de la panne (par ex. `find39 /data/volumes -newermt "<début>" ! -newermt "<fin>"`). Vise une réponse tenant sur40 un écran à « qu'est-ce qui a été touché, qu'est-ce qui ne l'a pas été ». Un rayon41 étroit (un volume, une table) se récupère ici. Un rayon large (beaucoup de volumes,42 tout le répertoire de données) est de la reprise après sinistre — escalade,43 n'improvise pas.444. **Inventorie survivants vs pertes.** Classe chaque actif touché :45 - intact sur disque — récupère tel quel46 - reconstructible depuis le repo — configs et sauvegardes commitées dans git47 - reconstructible depuis l'env ou les fichiers d'identifiants — tokens, mots de48 passe49 - perdu définitivement — chiffré avec une clé disparue, état vivant uniquement en50 mémoire51 Seul le dernier panier justifie de demander à l'humain. Tout le reste, tu le52 reconstruis.535. **La cause racine avec preuve, puis un test rouge.** Nomme pourquoi c'est cassé,54 avec la preuve venue du disque — pas une supposition. Là où le défaut est dans le55 code, écris le test en échec qui le capture avant le correctif, et rends-le vert.56 Voir [red-first](../red-first/SKILL.md) et57 [root-cause-first](../root-cause-first/SKILL.md).586. **Descends les couches en cascade — jamais vers l'humain.** Quand le chemin préféré59 est cassé, descends d'une couche et réessaie :60 API / SDK → CLI dans le conteneur → écritures directes en base → chirurgie du61 système de fichiers. Ne sollicite pas l'humain tant qu'il reste des cascades non62 tentées. Chaque barreau descendu coûte moins cher que demander.637. **Suppose que les dépendances sont cassées aussi.** Le code de récupération64 n'utilise que la bibliothèque standard de ton langage pour HTTP et JSON — les65 clients tiers font peut-être partie de ce qui est mort.668. **Écris de façon idempotente, avec des traces de sauvegarde.** Chaque écriture67 disque laisse une copie `.bak` horodatée à côté de la cible. Lire, contrôler,68 copier, écrire, re-contrôler — jamais d'écrasement à l'aveugle. Si tu échanges69 temporairement un identifiant pour frapper une nouvelle clé, sauvegarde l'original70 d'abord et restaure-le avant de rendre la main : le login propre de l'humain71 survit intact.729. **Vérifie par des appels en vif sur le chemin propre de l'humain.** Relance la73 sonde de l'étape 1 et confirme que les chiffres collent à l'inventaire74 d'avant-incident ou aux sauvegardes du repo. Un état de base vert n'est pas une75 preuve ; la surface que l'humain utilise qui remarche, ça, c'est la preuve.7610. **Committe et rapporte.** Committe les fichiers du correctif seulement. Rapporte :77 ce qui a été sondé, le rayon d'impact, les actions dans l'ordre, les comptes78 restaurés, ce qui est définitivement perdu (vide s'il n'y a rien), et toute étape79 qui a échoué sans être fatale.8081## Signaux d'alarme — arrête-toi et re-sonde8283- « Je vais demander à l'humain pourquoi c'est cassé » — non ; découvre-le d'abord84 depuis le disque.85- « L'API dit qu'il n'y a rien ici » — la vision qu'une API cassée a d'elle-même n'est86 pas la vérité.87- « Je vais juste réinstaller propre » — tu es en train de jeter de l'état88 récupérable.89- « La clé a disparu donc les identifiants sont inutiles » — les valeurs en clair90 vivent souvent encore dans l'env ou les fichiers d'identifiants ; recrée91 l'identifiant.92- « Confirmer avant chaque étape ? » — l'humain a dit répare ; déroule la cascade,93 rapporte à la fin.9495## Règles dures — une seule fait rater le skill9697- Des options renvoyées à l'humain alors qu'une solution claire existe.98- Une écriture destructrice sans trace `.bak`.99- L'humain sollicité pour quoi que ce soit avant que la cascade et l'inventaire aient100 été épuisés.101- Un sous-système retraité « gentiment » restauré — un service décommissionné qui102 reste éteint est l'état désiré, et le rallumer est la décision délibérée de103 l'humain.104- Une récupération déclarée finie sur l'état interne au lieu d'une sonde en vif sur105 son chemin.106- Un correctif laissé non committé (sauf si l'humain a explicitement dit pas de107 commit).108109## Marche bien avec110111- [repair-loop](../repair-loop/SKILL.md) — la boucle de correction de code que cette clôture lance quand le défaut est dans le code.112- [root-cause-first](../root-cause-first/SKILL.md) · [red-first](../red-first/SKILL.md)113- [decision-bar](../decision-bar/SKILL.md) — ce qui a le droit d'atteindre l'humain, et comment.