Un assistant de codage piloté par l'IA sur une file d'attente de serveur en version gratuite a généré un fichier de migration de schéma après que la règle « freeze migrations » du système a disparu lors d'une compaction automatique du contexte. L'incident montre que s'appuyer sur des instructions basées sur des prompts pour garantir la sécurité peut se retourner contre soi lorsque de longues sessions de chat sont résumées.

Ce qui s'est passé

Un agent de codage partagé fonctionnait avec un prompt système contenant une seule règle : ne pas créer ni modifier de fichiers de migration. Cette règle maintenait les migrations de schéma gelées sur la branche de release pendant que les développeurs utilisaient l'agent pour des modifications de routine.

Lors d'une session prolongée, la conversation a dépassé la limite de tokens du modèle. Le serveur a invoqué une compaction de contexte, remplaçant l'historique complet du chat par un court résumé afin de respecter le budget de tokens. Le résumé conservait les mentions de chemins de fichiers mais supprimait la contrainte négative (« ne pas écrire dans migrations/** »). Lorsque le modèle a généré sa réponse suivante, la règle de gel ne figurait plus dans sa mémoire de travail.

L'agent a ensuite suggéré un ajustement SQL pour améliorer la vitesse des requêtes. L'outil associé a enregistré la modification sous la forme d'un fichier de migration sur le disque. Les tests unitaires sont passés car ils n'exécutent jamais de migrations SQL brutes, et l'altération n'a été repérée que plus tard dans un diff de revue de code.

Pourquoi c'est important

  • Les garde-fous ont disparu : Les politiques au niveau du prompt sont volatiles. Lorsque le contexte du modèle est compressé, toute clause de type « ne pas » peut être perdue, laissant le système libre d'effectuer des actions interdites.
  • Les tests unitaires ne suffisent pas : Les tests qui n'exécutent pas de scripts de migration peuvent donner un faux sentiment de sécurité. La modification est passée inaperçue car la suite de tests n'a jamais sollicité le nouveau SQL.
  • La revue humaine a pris du retard : Au moment où un réviseur a vu le diff, le fichier de migration avait déjà été validé (committed), nécessitant un rollback ou un nettoyage supplémentaire.

L'erreur n'a pas causé d'interruption de service, mais elle a imposé un travail supplémentaire pour annuler une migration inutile et a augmenté le risque qu'un oubli similaire affecte des bases de données en production.

Comment le garde-fou a échoué

  1. Règle basée uniquement sur le prompt – Le gel existait sous forme de texte brut dans le prompt système.
  2. Session longue – Le chat a dépassé la fenêtre de contexte du modèle.
  3. Compaction – Le serveur a remplacé la transcription complète par un résumé riche en noms.
  4. Perte de la contrainte négative – Le résumé a omis l'instruction « ne pas », effaçant ainsi la règle.
  5. Sortie du modèle – Sans la règle, le modèle a généré une réponse créant une migration.

Les outils de résumé ont tendance à conserver les noms (chemins de fichiers, noms de fonctions) et à supprimer les négations, c'est pourquoi la règle a disparu silencieusement.

La solution : déplacer les garde-fous sur le chemin d'écriture

Au lieu d'intégrer des interdictions dans le prompt, appliquez-les là où le code touche le disque.

  1. Créer un fichier de politique (ex: agent_policy.txt) qui liste les chemins interdits tels que schema/** ou migrations/**.
  2. Ajouter un script de pré-application qui lit le fichier de politique et analyse chaque diff avant l'exécution de l'outil d'application.
  3. Appliquer une fermeture par défaut (fail closed) si le fichier de politique est manquant, vide, ou si un diff touche un chemin interdit.
  4. Ne demandez pas au modèle de confirmer la liste d'exclusion ; la confirmation n'est qu'un signal, pas une application de la règle.

Garde-fous par prompt vs garde-fous basés sur le disque

Aspect Gel par prompt uniquement Barrière basée sur le disque
Risque de compaction La règle peut disparaître Le fichier de politique reste intact
Couverture des tests unitaires Peut manquer des écritures interdites La vérification du chemin bloque l'écriture quel que soit le test
Moment de la revue humaine Les dommages peuvent déjà être validés L'écriture ne commence jamais, le réviseur ne voit aucun changement
Effort de mise en œuvre Minimal (juste une ligne dans le prompt) Petit script + fichier de politique

Contre-argument

À surveiller ensuite

À retenir

Si vous avez besoin d'une règle qui ne doit jamais être ignorée — comme « pas de migrations pendant un gel » — stockez-la sur le disque et appliquez-la au moment de l'écriture. Le texte du prompt seul ne peut garantir la durabilité une fois que le contexte du modèle est compressé.