Un assistente alla programmazione basato su IA in una coda di server di livello gratuito ha scritto un file di migrazione dello schema dopo che la regola di sistema "freeze migrations" è scomparsa durante la compressione automatica del contesto. L'incidente dimostra che fare affidamento su istruzioni basate su prompt per garantire la sicurezza può rivelarsi controproducente quando le lunghe sessioni di chat vengono riassunte.

Cosa è successo

Un agente di programmazione condiviso è stato eseguito con un system prompt che conteneva una singola regola: non creare o modificare file di migrazione. La regola manteneva le migrazioni dello schema congelate sul ramo di rilascio (release branch) mentre gli sviluppatori utilizzavano l'agente per modifiche di routine.

Durante una sessione prolungata, la conversazione ha superato il limite di token del modello. Il server ha invocato la context compaction (compressione del contesto), sostituendo l'intera cronologia della chat con un breve riassunto per rimanere entro il budget di token. Il riassunto ha mantenuto i riferimenti ai percorsi dei file ma ha eliminato il vincolo negativo (“do not write to migrations/**”). Quando il modello ha generato la risposta successiva, la regola di congelamento non era più nella sua memoria di lavoro.

L'agente ha quindi suggerito una modifica SQL per migliorare la velocità delle query. Lo strumento di accompagnamento ha salvato la modifica come file di migrazione su disco. I test unitari sono passati perché non eseguono mai migrazioni SQL grezze, e l'alterazione è stata notata solo in seguito in un diff di revisione del codice (code-review diff).

Perché è importante

  • I guardrail sono scomparsi: Le policy a livello di prompt sono volatili. Quando il contesto del modello viene compresso, qualsiasi clausola "do not" può andare perduta, lasciando il sistema libero di eseguire azioni proibite.
  • I test unitari non sono sufficienti: I test che non eseguono script di migrazione possono dare un falso senso di sicurezza. La modifica è passata inosservata perché la suite di test non ha mai testato il nuovo SQL.
  • La revisione umana è arrivata in ritardo: Nel momento in cui un revisore ha visto il diff, il file di migrazione era già stato confermato (commit), richiedendo un rollback o una pulizia aggiuntiva.

L'errore non ha causato un'interruzione del servizio, ma ha imposto lavoro extra per annullare una migrazione non necessaria e ha aumentato il rischio che un errore simile possa colpire i database di produzione.

Come è fallito il guardrail

  1. Regola basata solo sul prompt – Il congelamento esisteva come testo semplice nel system prompt.
  2. Sessione lunga – La chat è cresciuta oltre la finestra di contesto del modello.
  3. Compressione – Il server ha sostituito l'intera trascrizione con un riassunto denso di sostantivi.
  4. Perdita del vincolo negativo – Il riassunto ha omesso l'istruzione “do not”, cancellando la regola.
  5. Output del modello – Senza la regola, il modello ha generato una risposta che creava una migrazione.

I riassuntori tendono a mantenere i sostantivi (percorsi dei file, nomi di funzioni) ed eliminare le negazioni, motivo per cui la regola è scomparsa silenziosamente.

La soluzione: spostare i guardrail sul percorso di scrittura

Invece di inserire i divieti nel prompt, imponili nel punto in cui il codice tocca il disco.

  1. Crea un file di policy (ad es. agent_policy.txt) che elenchi i percorsi in blacklist come schema/** o migrations/**.
  2. Aggiungi uno script di pre-applicazione che legga il file di policy e scansioni ogni diff prima che lo strumento di applicazione venga eseguito.
  3. Fail closed (fallimento sicuro) se il file di policy è mancante, vuoto o se un diff tocca un percorso proibito.
  4. Non chiedere al modello di confermare la deny list; la conferma è solo un segnale, non un'imposizione.

Guardrail basati solo su prompt vs. basati su disco

Aspetto Congelamento basato solo su prompt Controllo basato su disco
Rischio di compressione La regola può scomparire Il file di policy rimane intatto
Copertura test unitari Può mancare scritture proibite Il controllo del percorso blocca la scrittura indipendentemente dai test
Tempistica revisione umana Il danno potrebbe essere già stato confermato La scrittura non inizia mai, il revisore non vede cambiamenti
Sforzo di implementazione Minimo (solo una riga nel prompt) Piccolo script + file di policy

Controargomentazione

Cosa monitorare in seguito

Conclusione

Se hai bisogno di una regola che non debba mai essere ignorata — come "nessuna migrazione durante un congelamento" — memorizzala su disco e imponila al momento della scrittura. Il solo testo del prompt non può garantire la durabilità una volta che il contesto del modello viene compresso.