Aller au contenu
Mastering Claude

Accueil / Vérifier ce qu'il rend

Vérifier ce qu'il rend8 minPratique

Ce qu'un contrôle exempte disparaît de sa sortie

Une exemption posée dans un contrôle pour une bonne raison retire la partie exemptée de ce que le contrôle juge : tant que cette partie n'a pas sa propre mesure et son propre seuil, elle peut grossir sous un verdict conforme.

Prenons un cas type. Un contrôle nocturne compare l'occupation disque d'un dossier de projet à un seuil. Sa règle exempte le sous-dossier cache/, pour une raison qui tenait à sa création : son contenu se régénère et peut être vidé à tout moment, il ne méritait donc pas d'alerte. Des mois plus tard, le disque se remplit alors que le contrôle affiche conforme chaque nuit.

Un périmètre choisi, puis oublié

La leçon sur l'endroit où l'on regarde a montré qu'une vérification trouve d'abord là où elle cherche. Ici s'ajoute un trait propre : le périmètre a été décidé une fois, écrit dans la règle, puis plus personne ne le relit, parce que la sortie du contrôle ne le mentionne pas. Un verdict conforme se lit comme un verdict sur le dossier, alors qu'il porte sur le dossier moins son cache.

La démonstration suivante crée son propre dossier, écrit le contrôle, remplit la partie exemptée, puis mesure le dossier entier :

mkdir -p demo-exemption/projet/cache demo-exemption/projet/docs && cd demo-exemption
printf 'rapport un\n' > projet/docs/rapport1.txt
printf 'rapport deux\n' > projet/docs/rapport2.txt
cat > controle.sh << 'EOF'
#!/bin/sh
# Occupation disque de projet/, le cache/ est exempté par la règle
SEUIL=5000
POIDS=$(find projet -path projet/cache -prune -o -type f -exec cat {} + | wc -c | tr -d ' ')
echo "Occupation comptée : $POIDS octets (seuil $SEUIL)"
if [ "$POIDS" -le "$SEUIL" ]; then echo "Verdict : conforme"; else echo "Verdict : dépassement"; fi
EOF
sh controle.sh
dd if=/dev/zero of=projet/cache/index.bin bs=1024 count=50 2>/dev/null
sh controle.sh
echo "Occupation réelle de projet/ : $(find projet -type f -exec cat {} + | wc -c | tr -d ' ') octets"
Occupation comptée : 24 octets (seuil 5000)
Verdict : conforme
Occupation comptée : 24 octets (seuil 5000)
Verdict : conforme
Occupation réelle de projet/ : 51224 octets

Le contrôle parcourt projet/ et tous ses sous-dossiers, et il écarte projet/cache par l'option -prune de find. Son verdict ne bouge pas quand le cache reçoit un gros fichier, alors que la mesure du dossier entier, faite hors du contrôle, montre que le cache porte l'essentiel de l'occupation. 2>/dev/null masque le bilan de dd. L'addition par wc -c mesure le contenu des fichiers, pas les blocs réservés sur le disque, ce qui suffit pour un écart de cet ordre.

Donner un seuil à la partie exemptée

Retirer l'exemption ferait revenir les alertes que la règle voulait éviter, puisque le cache se régénère toujours. Mais ce qui la justifiait, un contenu négligeable, ne vaut plus quand le cache porte l'essentiel de l'occupation. Afficher son poids ne suffit pas : une ligne sous un verdict resté conforme se lit aussi peu que la règle. Le remède garde le cache hors du seuil principal et lui donne son propre seuil, qui pèse sur le verdict. Il vérifie aussi que le dossier exempté existe, faute de quoi find ne trouverait rien et le contrôle afficherait zéro octet. Depuis le même dossier :

cat > controle.sh << 'EOF'
#!/bin/sh
# Occupation disque de projet/ : cache/ sort du seuil principal et reçoit son propre seuil
SEUIL=5000
SEUIL_CACHE=20000
POIDS=$(find projet -path projet/cache -prune -o -type f -exec cat {} + | wc -c | tr -d ' ')
echo "Occupation comptée : $POIDS octets (seuil $SEUIL)"
VERDICT=conforme
if [ "$POIDS" -gt "$SEUIL" ]; then VERDICT="dépassement"; fi
if [ -d projet/cache ]; then
  EXEMPTE=$(find projet/cache -type f -exec cat {} + | wc -c | tr -d ' ')
  echo "Partie exemptée : cache/ $EXEMPTE octets (seuil propre $SEUIL_CACHE)"
  if [ "$EXEMPTE" -gt "$SEUIL_CACHE" ]; then VERDICT="dépassement de la partie exemptée"; fi
else
  echo "Partie exemptée : cache/ introuvable, non mesurée"
  if [ "$VERDICT" = conforme ]; then VERDICT="à vérifier"; fi
fi
echo "Verdict : $VERDICT"
EOF
sh controle.sh
Occupation comptée : 24 octets (seuil 5000)
Partie exemptée : cache/ 51200 octets (seuil propre 20000)
Verdict : dépassement de la partie exemptée

Le contrôle rend désormais un dépassement là où il disait conforme, et il nomme la partie en cause. Si cache/ disparaît, il l'écrit et rend « à vérifier » plutôt qu'un zéro rassurant.

Figure 1

Ce que le verdict juge, couche par couche

Occupation comptée
Tout projet/ hors cache/, comparé au seuil : la seule couche que le verdict juge.
Occupation exemptée
Le contenu de cache/, écarté par la règle pour une raison valable, qui grossit sans changer le verdict.
Occupation du disque
La somme des deux couches et du reste du serveur, que le contrôle n'a jamais prétendu mesurer.
Le verdict du premier contrôle ne juge que la couche du bas ; la couche exemptée n'y pèse qu'à partir du moment où elle reçoit son propre seuil.
Calibrez vous-même

Un contrôle nocturne compare chaque nuit l'occupation disque d'un dossier de projet à un seuil et exclut de son calcul le sous-dossier cache, règle posée à sa création. Onze mois plus tard, le disque du serveur est plein. Le contrôle a affiché conforme toutes les nuits. Une mesure du dossier entier, cache compris, montre que le cache en occupe la plus grande partie.

Écrivez en une phrase ce que cette situation établit, et en une phrase ce qu'elle n'établit pas.

Ce qu’il faut retenir
  • Une exemption inscrite dans un contrôle limite la portée de chacun de ses verdicts, même quand la sortie ne le dit pas.
  • Un verdict conforme porte sur la partie comptée et ne dit rien de la partie exemptée tant que celle-ci n'est pas mesurée à part.
  • Une mesure du dossier entier, faite hors du contrôle, révèle un écart qu'aucune relance du même contrôle ne montre.
  • Une partie exemptée qui reçoit son propre seuil peut faire changer le verdict, ce qu'une simple ligne d'information sous un verdict conforme ne fait pas.
  • Un dossier exempté introuvable doit produire un avertissement, sinon il se mesure à zéro sans que personne le remarque.
À faire maintenant

Ouvrez un contrôle automatique que vous utilisez, repérez chaque exclusion écrite dans sa règle, et donnez à chacune une mesure et un seuil propres qui font changer le verdict, avec un message explicite quand la partie exclue est introuvable.