Gli sviluppatori possono ora avviare diverse sessioni di agenti di codifica contemporaneamente senza temere la sovrascrittura dei file di stato o conflitti tra file nascosti. Un pattern advisory "share-nothing" isola lo workspace di ogni agente e segnala potenziali conflitti. L'approccio sostituisce i lock rigidi con un registro leggero che segnala i lavori sovrapposti prima che accadano, mantenendo attive le pipeline anche quando una sessione va in crash.

Perché gli agenti paralleli creano problemi

Eseguire più di un assistente di codifica automatizzato in un singolo repository accelera la generazione di codice, il testing o il refactoring. In pratica, emergono immediatamente due problemi.

  • Corruzione dello stato – Due agenti scrivono sullo stesso file di stato; la scrittura successiva sovrascrive la precedente, cancellando i progressi.
  • Collisione di file – Due agenti modificano lo stesso file sorgente senza sapere dell'esistenza l'uno dell'altro. Il conflitto emerge in seguito, quando un diff mostra modifiche divergenti.

Entrambi i problemi fanno perdere tempo agli sviluppatori e possono introdurre bug difficili da tracciare.

La regola del “share nothing”

L'idea centrale è semplice: ogni agente riceve il proprio spazio di lavoro privato su disco e scrive solo nei file appartenenti a quella sessione. È consentito un solo file deliberatamente condiviso per branch, che segue la regola “last-writer-wins”: l'ultimo agente che scrive determina il contenuto finale.

Un livello di presenza monitora ogni sessione attiva:

  • Nome del branch
  • Elenco dei file coinvolti
  • Timestamp dell'ultima attività

Quando inizia una nuova sessione, questa consulta il registro. Se un'altra sessione sta già gestendo uno degli stessi file, lo sviluppatore riceve un avviso prima che inizi qualsiasi lavoro.

Lock advisory rispetto a quelli bloccanti

I file di lock tradizionali agiscono come una strada senza uscita: una volta acquisito un lock, qualsiasi altro processo attende che venga rilasciato. Se la sessione proprietaria va in crash, il lock può persistere indefinitamente, costringendo a una ricerca manuale dei file di lock obsoleti.

Il modello advisory è più delicato. Emette un avviso quando viene rilevato un potenziale conflitto, ma non interrompe la nuova sessione. Se una voce nel registro è vecchia — ovvero il processo che l'ha creata non esiste più — il sistema si limita comunque a segnalarlo, lasciando allo sviluppatore la decisione se procedere.

Come implementare il pattern

  1. Partizionare lo stato per autore – Assegna a ogni agente la propria directory per i file temporanei e lo stato. Riserva i file condivisi solo per i dati veramente globali e applica la regola "last-writer-wins" solo lì.
  2. Iniettare la consapevolezza all'avvio – Prima che un agente inizi, leggi il registro di presenza e confronta l'elenco dei file richiesti con le voci esistenti. Aborta o avvisa se viene trovata una sovrapposizione.
  3. Verificare l'attività al momento della lettura – Quando si consulta una voce del registro, controlla se l'ID del processo registrato è ancora in esecuzione sul sistema operativo. Elimina le voci appartenenti a processi terminati.
  4. Preferire i lock advisory a quelli bloccanti – Lascia che gli sviluppatori mantengano il controllo. Un avviso permette loro di continuare, mettere in pausa o annullare, evitando il deadlock.
  5. Monitorare gli stati di attesa – Quando molti agenti sono attivi, l'attenzione dello sviluppatore diventa il collo di bottiglia. Mostra quali agenti sono in attesa di un input umano in modo da poter riprioritizzare il lavoro.

Tutto questo può essere costruito con una semplice directory di file JSON; non è richiesto alcun database esterno o message bus. Il semplice formato di archiviazione rende il sistema facile da auditare e portabile tra diversi ambienti.

Rischi e controargomentazioni

Alcuni team potrebbero sostenere che un lock rigido garantisca la sicurezza: nessun agente potrà mai scrivere sullo stesso file. Il compromesso è una ridotta resilienza: le sessioni in crash lasciano lock orfani che bloccano l'intero flusso di lavoro.

A cosa prestare attenzione

Se stai gestendo più assistenti di codice basati su IA, il pattern advisory "share nothing" offre una via pragmatica per evitare che si intralcino a vicenda. Isolando lo stato, esponendo le intenzioni precocemente e lasciando che siano gli umani a decidere quando procedere, il metodo bilancia la sicurezza con la flessibilità richiesta dalle moderne pipeline di sviluppo.