Gira un thread in cui qualcuno si lamenta che il suo assistente IA «continua ad aggiungere al mio codice import che non esistono». Il bello sono le risposte. L’agente di programmazione di una persona ha inventato un modulo, è stato messo di fronte all’evidenza e ha ribattuto che il modulo era reale. Qualcun altro ha trovato un pacchetto misterioso chiamato qualcosa come TrjnHrs.Pkg aggiunto in silenzio al progetto. Un’altra persona ancora ha capito che un modulo inesistente era il motivo per cui il servizio che l’IA aveva riscritto a un collega era rotto, senza che nessuno se ne accorgesse, da un giorno intero.
Abbiamo riso. Poi abbiamo smesso di ridere, perché anche noi ci stavamo scervellando dietro.
Perché i modelli inventano import
I modelli linguistici sono riconoscitori di pattern, non compilatori. Quando un modello scrive import seguito da un nome plausibile, non sta verificando se quel pacchetto esiste. Sta prevedendo cosa un programmatore sicuro di sé digiterebbe probabilmente dopo. La maggior parte delle volte la previsione ci azzecca. A volte allunga la mano, con tutta sicurezza, verso requests_async, react-use-debounce-hook, o qualche utility dal nome ben rifinito che nessuno ha mai pubblicato.
Il modello non ha una fonte di verità. Ha il fiuto. E il fiuto è bravissimo a produrre nomi che sembrano esattamente pacchetti reali.
La parte che dovrebbe davvero spaventarti
Un import allucinato non è solo una build rotta. È una superficie d’attacco.
I ricercatori ora hanno un nome per questo: slopsquatting. Gli attaccanti osservano quali nomi falsi di pacchetti gli strumenti di IA tendono ad allucinare, poi registrano quei nomi sui registri pubblici con dentro del malware. Il tuo assistente inventa trjnhrs-pkg. Qualcuno ha già pubblicato trjnhrs-pkg. Il tuo comando di installazione si risolve senza intoppi. E ora stai eseguendo il codice di qualcun altro. L’import che «non esisteva» ieri esiste oggi, apposta, ed è ostile.
Questo è il modo di fallimento davvero pericoloso. Un refuso lo prendi in cinque secondi. Un nome di pacchetto plausibile che si risolve in silenzio verso il payload di qualcuno è il tipo di cosa che non prendi finché non è già in produzione.
Perché «digli solo di non farlo» non funziona
Il thread è pieno dei soliti consigli. Scrivi prompt migliori. Digli di non sbagliare. Imposta i warning come errori. Prenditi un checker.
I primi due sono pii desideri. Non puoi, a forza di prompt, rendere deterministico un sistema probabilistico su fatti che non possiede. Gli ultimi due ci si avvicinano, ma un linter generico segnala il sintomo (un import non risolto) senza capirne la causa. La dipendenza semplicemente non è mai stata aggiunta al manifesto? È un modulo interno che il linter non vede? Oppure questo pacchetto non esiste davvero da nessuna parte sulla Terra? Questi tre casi sembrano identici a un checker ottuso e richiedono risposte completamente diverse. (È lo stesso motivo per cui rileggersi da soli non intercetta gli errori dall’aria plausibile di un’IA: ciò che ha scritto il codice non può essere l’unica cosa che lo verifica.)
È questa la lacuna che Surmado Code Review è stato costruito per colmare.
Come lo prendiamo davvero: controlli deterministici più giudizio
La soluzione non è un modello più intelligente. È non porre al modello la domanda fattuale, tanto per cominciare.
I controlli deterministici fanno il lavoro del sapere. A ogni pull request, Surmado Code Review risolve ogni import del diff rispetto a una fonte di verità: il tuo lockfile, il tuo manifesto, i tuoi moduli installati, la libreria standard, i tuoi pacchetti interni. Questo passaggio non tira a indovinare. Un pacchetto o si risolve o non si risolve. Se super-fast-parser compare nel diff e non si risolve a nulla nel tuo grafo delle dipendenze né a nulla sul registro, quello è un fatto, non un’opinione. Qui nessuna allucinazione è possibile, perché non si sta generando nulla. È una ricerca.
Scout fa il lavoro del giudizio. Una volta in mano i fatti, il modello fa ciò in cui i modelli sono davvero bravi: smistare e spiegare. Distingue tra «hai dimenticato di aggiungere questo a package.json» e «questo modulo non esiste, e quello reale più vicino si chiama in un altro modo». Deduplica. Ti indica l’import che quasi certamente intendevi. E fa salire il caso che spaventa: questo nome si risolve a un pacchetto pubblicato tre giorni fa che nient’altro nel tuo ecosistema referenzia. Quello è l’odore dello slopsquatting, ed è esattamente il giudizio che un semplice linter non può dare.
Nessuna delle due metà funziona da sola. I controlli deterministici senza giudizio sono rumorosi e non sanno spiegarsi. Un modello senza ancoraggio deterministico è solo un’altra cosa che allucina import, che ora rivede i tuoi import allucinati. Mettili insieme e ottieni ciò che tutti in quel thread volevano davvero: la certezza su cosa è reale, più il giudizio su cosa fare.
Dove gira
Surmado Code Review commenta le tue pull request. Controlla il diff rispetto allo STANDARDS.MD del tuo team e segnala gli import inventati prima che vengano messi in merge, non dopo che hanno rotto in silenzio il branch di un collega o tirato dentro un pacchetto che nessuno ha verificato. Un commento per PR, ancorato alle tue regole, modificato sul posto quando carichi una correzione. È lo strato tra «l’IA l’ha scritto» e «è in main».
Provalo gratis
Abbiamo costruito questo perché il problema degli import-che-non-esistono ci faceva perdere tempo, e la sua versione supply chain ci ha davvero spaventati. Lo usiamo sui nostri repository; ecco come l’abbiamo costruito. Quindi non lo mettiamo dietro un muro.
Surmado Code Review è gratis per 10 PR al mese. Collegalo a un repository GitHub, scrivi uno STANDARDS.MD (Scout ti aiuta a redigerlo a partire da una conversazione, come spiegare il tuo codice a un nuovo membro del team) e inizia a intercettare import allucinati già dalla tua prossima PR. Oltre, sono 15 $ al mese per 100 PR. Nessun prezzo per postazione. Zero conservazione dei dati.
La tua IA continuerà a inventare import. Tu non sei obbligato a continuare a metterli in merge.
Prova Surmado Code Review gratis
Letture correlate: