Partie 5: Réviser et livrer
Quand un agent écrit 80 % de votre code, vous devenez davantage un réviseur qu'un auteur. Le travail passe de la frappe au jugement — et ce jugement doit être plus affûté qu'il ne l'était, parce que le code généré échoue de façon plus silencieuse que le code humain.
Laisser l'agent effectuer le premier passage
Utilisez l'agent comme premier réviseur avant qu'un humain ne regarde quoi que ce soit. Il est performant sur la couche mécanique : détecter les bugs probables, les violations de style, les odeurs de sécurité et les problèmes de performance. Cela dégage le bruit pour que le réviseur humain puisse concentrer son attention sur ce qui nécessite réellement un humain — la conception, la maintenabilité, si ce changement s'inscrit dans la direction du système.
La répartition est l'essentiel. La première passe de révision est mécanique et peut être déléguée. Le jugement final sur la conception ne l'est pas.
Réviser chaque ligne qui est livrée — avec le scepticisme approprié
Le réflexe de faire confiance au code parce qu'il s'exécute est exactement le mauvais réflexe pour le code généré. Révisez chaque ligne qui va en production, et orientez votre scepticisme vers les façons spécifiques dont la sortie IA échoue :
- Soyez sceptique envers le code élaboré. Les solutions générées atteignent parfois une abstraction astucieuse là où une solution ennuyeuse était correcte. L'élégance est un signal d'alerte, pas un compliment.
- Confirmez que les imports existent. Les modèles hallucinent des packages au nom plausible. Un import qui semble juste peut correspondre à un package inexistant — ou pire, à un squat malveillant sur un nom que le modèle invente couramment.
- Vérifiez la gestion des erreurs face aux échecs réalistes. Le code généré tend à couvrir le chemin heureux correctement et les chemins d'échec insuffisamment. Demandez ce qui se passe quand l'appel réseau expire, que l'entrée est vide, que la ligne est manquante.
Le coût de l'omission est concret : le code que votre équipe ne comprend pas devient un coût de débogage que votre équipe ne peut pas se permettre. Les économies réalisées grâce à la génération rapide s'évaporent la première fois que quelqu'un passe trois jours à rétroingéniérer un bloc astucieux que personne n'a révisé.
Hooks : faire respecter mécaniquement les règles que l'on oublie
Certaines règles sont trop importantes pour s'en remettre à la révision. Encodez-les comme des hooks — du code déterministe qui s'exécute à des points fixes du cycle de vie (avant un appel d'outil, après l'édition d'un fichier, avant un commit) et bloque automatiquement les mauvaises actions.
Un hook de pré-commit qui refuse de committer un secret codé en dur :
#!/usr/bin/env bash
# .git/hooks/pre-commit
if git diff --cached | grep -E -i '(api[_-]?key|secret|password|token)\s*=\s*["'\''"][^"'\'']+'; then
echo "Blocked: looks like a hard-coded secret. Remove it before committing."
exit 1
fi
Les hooks sont l'endroit où vous mettez les choses qu'un agent (ou un humain) « ne devrait jamais oublier mais oublie souvent ». Contrairement à une règle dans un fichier, un hook ne peut pas être contourné par la persuasion.