Agno ha pubblicato v3.0.3 il 30 agosto alle 20:45:21 UTC, introducendo un set di strumenti per la gestione della conoscenza. Ha pubblicato v3.0.4 alle 22:40:41 UTCun'ora e cinquantacinque minuti dopo — e ha usato quella patch release per riscrivere l'interfaccia pubblica del set di strumenti.

Cosa è cambiato in una patch

Tre cose che non dovrebbero comparire in una versione patch. Il percorso del modulo è stato spostato, senza lasciare alcuno shim di compatibilità. I quattro flag del costruttore sono stati rinominati. E la gestione degli argomenti keyword sconosciuti da parte del costruttore significa che i vecchi nomi non vengono rifiutati — vengono ignorati in silenzio.

Perché il silenzio batte il rumore, e male

È quest'ultimo dettaglio ad avere più peso. Se la rinomina di un flag genera un errore, ogni distribuzione interessata fallisce in modo evidente all'avvio e qualcuno la corregge in pochi minuti. Se invece il vecchio nome viene scartato senza alcun avviso, il costruttore torna al proprio valore predefinito — e un operatore che aveva scritto un flag apposta per disabilitare una capacità si ritrova quella capacità attivata dopo l'aggiornamento, senza errori, avvisi o righe di log. L'aggiornamento sembra riuscito. La configurazione che trasportava non sopravvive.

La correzione di bug che è una misura di sicurezza

La stessa release corregge un bug di defaulting che stava rimuovendo il gate di conferma dall'unico strumento del set in grado di distruggere contenuti memorizzati. Si tratta di una correzione rilevante per la sicurezza. Nelle note è classificata come un ordinario punto bug, accanto a elementi cosmetici, senza nulla che la segnali come il motivo per cui un operatore potrebbe voler aggiornare con urgenza.

Cosa sbaglia la cornice più comune

Il semantic versioning viene spesso letto come un contratto: un incremento patch significa che è sicuro adottarlo. Qui il numero patch copre lo spostamento di un modulo senza shim, quattro flag rinominati e un valore predefinito effettivo cambiato — la definizione di una breaking change. E il progetto conosceva il principio: una release precedente nella stessa giornata sosteneva di rifiutare gli argomenti keyword ignorati in silenzio invece di inghiottirli. La posizione era stata espressa e poi non applicata alla propria rinomina poche ore dopo.

Come applicare l'aggiornamento

Non trattate il passaggio da 3.0.3 a 3.0.4 come un aggiornamento di routine. Cercate con grep i vecchi nomi dei flag e il vecchio percorso del modulo prima di aggiornare, perché né l'installer né il runtime vi diranno che hanno smesso di significare qualcosa.