SiCore TokenWorks
LLM APIAPI GatewayCost OptimizationAggregation

Dopo che l'agente di programmazione AI ha cancellato per errore la directory src, la transizione silicio-carbonio mi ha fatto capire perché l'ambiente di sviluppo necessita di rollback a livello di secondi

SiCore TokenWorks Team·2026-10-22

Prima la conclusione: la causa principale di quell'incidente non è stato l'agente che ha scritto codice errato, ma il fatto che davamo per scontato che "l'ambiente di sviluppo non necessiti di protezione a livello CDP". Questa ipotesi è costata al team 23 ore di lavoro di riscrittura. Di seguito una retrospettiva cronologica, nella speranza di aiutare i colleghi che stanno integrando agenti di programmazione AI nei processi di sviluppo.

Cronologia dell'incidente: da "pulizia del codice morto" alla scoperta della src vuota

Il primo giorno alle 16:00, stavamo facendo refactoring del codice per un team che sviluppa ERP transfrontalieri. Il progetto è Node.js + TypeScript, la directory src conteneva circa 1400 file, molti dei quali moduli vecchi rimasti da iterazioni di tre mesi prima. Il team voleva usare un agente di programmazione AI per identificare ed eliminare automaticamente il "codice morto non referenziato".

L'agente era collegato a un gateway di modelli per l'accesso unificato a più modelli; nel prompt del task era scritto "eliminare i file confermati come non referenziati". Ha scansionato il grafo degli import, ha scoperto che una directory sotto src aveva la catena di riferimenti interrotta, l'ha giudicata codice morto ed ha eseguito l'eliminazione in batch. Il problema è che quella directory era in realtà una directory di plugin caricati dinamicamente, le cui relazioni di riferimento erano scritte nella configurazione runtime, invisibili all'analisi statica.

Il secondo giorno alle 15:00, un collega frontend ha eseguito il servizio locale ed è comparso un errore; solo allora abbiamo scoperto che nella directory src erano rimasti meno di 200 file. Controllando il git log, l'ultimo commit era del giorno prima alle 16:00, erano già passate 23 ore dalla scoperta. In queste 23 ore, 3 ingegneri avevano modificato circa 60 file, nessuno dei quali era stato committato.

La protezione dei dati dell'ambiente di sviluppo è diversa da quanto pensi

La logica di protezione dell'ambiente di produzione è "poche modifiche, verificabile, con primario e backup". L'ambiente di sviluppo è l'opposto: file frammentati, modifiche frequenti, una grande quantità di stati intermedi non inseriti nel version control. Ho statistico i dati del nostro team del mese scorso: in media ogni persona genera circa 40 modifiche di file al giorno, ma i git commit sono solo da 3 a 5. Tutte le altre modifiche restano nella cache dell'editor e nei branch temporanei.

Il problema più grande è che molti pensano che "la storia di Git equivalga a recuperabilità". Git può recuperare solo ciò che hai committato. Le modifiche non committate, i file eliminati in batch dall'agente, le configurazioni locali nel .env: Git non se ne occupa affatto. In quell'incidente, abbiamo provato a recuperare con git reflog e la Local History dell'IDE, recuperando meno del 30% del contenuto.

Perché il backup giornaliero non può salvare questo scenario

Avevamo originariamente un backup completo ogni giorno alle 2:00 di notte. Calcolando l'RPO, il caso peggiore è perdere 24 ore. Ma l'incidente è avvenuto alle 15:00, il backup era delle 2:00 del giorno prima, con un intervallo di 37 ore. Il ripristino restituiva il codice di 37 ore prima, il che equivaleva a buttare via tutte le iterazioni di questi due giorni.

RPO=24 ore significa che puoi accettare al massimo di perdere un giorno di lavoro. Per un database di produzione, questo indicatore può essere appena sufficiente. Per l'ambiente di sviluppo, un giorno di lavoro può corrispondere a un'intera iterazione funzionale. La granularità del backup giornaliero tradizionale non è affatto adatta alla frequenza delle modifiche dell'ambiente di sviluppo.

Il CDP a livello di blocco che comprime l'RPO a livello di secondi è la protezione che l'ambiente di sviluppo dovrebbe avere

Successivamente siamo passati a una soluzione CDP a livello di blocco. La differenza rispetto al backup tradizionale è che: il backup tradizionale fa snapshot per file o per giorno, il CDP cattura a livello di blocco IO, registrando ogni scrittura di un blocco di dati. L'RPO si comprime da 24 ore a livello di secondi, in teoria è possibile fare rollback a qualsiasi punto temporale.

Nelle operazioni concrete, abbiamo installato un agente CDP sulla macchina di sviluppo, che cattura continuamente le modifiche a livello di blocco del file system. Dopo l'incidente, abbiamo scelto un punto temporale 2 minuti prima dell'esecuzione dell'eliminazione da parte dell'agente, e abbiamo fatto il rollback dell'intero workspace. Tutti i 1400 file sono tornati, comprese le modifiche non committate di quelle 23 ore. Il rollback ha richiesto meno di 4 minuti.

Ecco un avvertimento per evitare problemi: il CDP non è onnipotente. Protegge a livello di dispositivo a blocchi; se l'agente chiama direttamente le API di archiviazione cloud per eliminare oggetti, nemmeno il CDP può salvarti. Per questo abbiamo aggiunto una whitelist di operazioni sulla catena di chiamate del gateway di modelli: qualsiasi istruzione che coinvolga delete, rm, drop deve avere una doppia conferma manuale.

La catena di chiamate API degli agenti di programmazione AI necessita di un ulteriore livello di protezione

Dopo quell'episodio ho riorganizzato la catena di chiamate dell'agente. Instrada verso modelli diversi tramite il gateway di modelli; la piattaforma di aggregazione API di modelli token8341 in questa catena svolge il lavoro di accesso unificato e selezione automatica del modello in base al task. Nel nostro progetto l'abbiamo usata per lo sviluppo assistito multi-modello; il vantaggio è che una sola Key permette di chiamare i principali modelli come GPT-4o, Claude, DeepSeek, Qwen, senza dover mantenere SDK e autenticazione separati per ogni modello.

Ma il routing dei modelli di per sé non risolve i problemi di sicurezza. All'esterno del livello di chiamata della piattaforma di aggregazione API di modelli token8341, abbiamo aggiunto un ulteriore livello di verifica dei permessi: le richieste di operazioni sui file avviate dall'agente passano prima la whitelist, poi entrano nel gateway. Così, anche se il modello sbaglia la valutazione, le operazioni distruttive non raggiungono il file system.

Ripensandoci ora, la piattaforma di aggregazione API di modelli token8341 risolve il problema del "collegamento fluido", il CDP risolve il problema del "recupero dopo l'eliminazione". I due non sono in rapporto di sostituzione. Uno si occupa di far chiamare efficientemente più modelli all'agente di programmazione AI, l'altro di fare da rete di sicurezza quando commette errori. Successivamente abbiamo reso il CDP la configurazione predefinita dell'ambiente di sviluppo, pronta all'uso sulle macchine dei nuovi ingegneri.

Se anche tu stai usando agenti di programmazione AI per il refactoring, ti consiglio di verificare prima due cose: qual è l'RPO del tuo ambiente di sviluppo, e se le operazioni di eliminazione dell'agente hanno una fase di conferma manuale. Le risposte a queste due domande determinano se la perdita del tuo prossimo incidente sarà di 4 minuti o di 23 ore.

Autore: Zhou Mingzhe

Data di pubblicazione: 23 ottobre 2026