18 settembre 2026

hermes-memory-pgvector v0.5.4: una release senza codice al suo interno

hermes-memory-pgvector v0.5.4: una release senza codice al suo interno

hermes-memory-pgvector è il plugin open-source che offre a una flotta di agenti hermes-agent una memoria condivisa e durevole su PostgreSQL e pgvector. La versione 0.5.4 è disponibile su PyPI e non contiene né nuove funzionalità né alcuna modifica al codice. Ecco perché è stata pubblicata comunque.

Una release senza codice al suo interno

v0.5.4 sposta esattamente due versioni minime delle dipendenze:

psycopg[binary]>=3.3.6,<4
psycopg-pool>=3.3.2,<4

Questa è l'intera modifica. A monte sono state pubblicate psycopg 3.3.6 e psycopg-pool 3.3.2 il 18 September 2026, entrambe release di patch senza cambiamenti API. I valori predefiniti restano invariati, non c'è alcuna migrazione e nulla nel codice sorgente del plugin si è spostato.

La correzione del pool è il motivo

psycopg-pool 3.3.2 propaga la cancellazione e altre eccezioni di base sollevate durante un controllo della connessione. Sembra una nota a piè di pagina finché non si guarda a come è costruito questo plugin.

Apre uno ConnectionPool, condiviso tra il thread dell'agente e il thread di drenaggio async-writer. Prima che il pool assegni una connessione, verifica che la connessione sia ancora sana. Se quel controllo viene interrotto — una cancellazione, uno spegnimento, qualsiasi cosa derivante da BaseException anziché da Exception — il comportamento precedente poteva inghiottirlo invece di lasciarlo passare. Una scrittura in memoria che avrebbe dovuto fallire in modo evidente sparisce invece in silenzio.

Per un componente il cui unico compito è non perdere ciò che un agente ricorda, il silenzio è la peggiore modalità di errore possibile. Questa singola correzione a monte vale da sola una release.

Cos'altro porta 3.3.6

  • Una query cancellata non aspetta più all'infinito quando il server ha smesso di rispondere. Questa modifica richiede libpq 17 o più recente — i wheel binari includono libpq 18, quindi entra in vigore invece di restare inattiva.
  • La query in esecuzione viene cancellata su SystemExit. Questo conta nel momento in cui un worker riceve un SIGTERM a metà query: in precedenza l'istruzione poteva continuare a girare lato server anche dopo che il processo era già in fase di uscita.
  • Le prepared statement vengono scartate su DEALLOCATE ALL, il che evita sorprese del tipo "prepared statement does not exist" quando qualcosa reimposta DISCARD tra un checkout e l'altro.
  • Minore overhead di attesa async e supporto per Python 3.15.

Il pin vive in quattro punti, ed è una scelta deliberata

Il requisito psycopg compare in pyproject.toml, in hermes_pgvector/plugin.yaml, in scripts/install.sh e nel comando di installazione stampato nel README. Tutti e quattro si sono mossi insieme in questa release, e non si tratta di pignoleria da manutenzione.

Una revisione completa del codebase il 7 September ha rilevato che il README e lo script di installazione bloccavano ancora >=3.3.4 mentre pyproject.toml era già passato a >=3.3.5. Chiunque seguisse il percorso di installazione documentato veniva indirizzato esattamente alla versione da cui la release precedente esisteva per spostarsi via. La deriva è sopravvissuta a un intero ciclo di release senza che nessuno se ne accorgesse.

Quindi ora la regola è che i quattro si muovono come uno solo, ogni volta, altrimenti la release non esce.

Aggiornamento

pip install -U hermes-memory-pgvector

Nessuna migrazione, nessuna modifica di configurazione, nessuna differenza comportamentale che noterai — ed è proprio questo il punto di una release come questa.

Il codice sorgente e la referenza completa della configurazione sono su GitHub:

👉 github.com/andreab67/hermes-memory-pgvector