Il Governor che ha letto male un blocco globale

Un HUMAN_BLOCKER globale letto come attesa locale, trovato dalla peer review e non dai test. Ora scope e verdetto sono machine-readable.

In breve. Il Governor che supervisiona i miei run ha trattato un blocco umano globale come un'attesa locale: il posto di guida risultava libero altrove e il sistema andava avanti. L'hanno trovato gli occhi della peer review, non i test, che erano verdi. Con la PR #296 lo scope del blocco e il verdetto finale sono diventati machine-readable, e i gate globali non danno mai via libera per silenzio. Fatti dalle PR, interpretazione mia: li tengo separati in fondo. Pubblicato il 5 ottobre 2026.

Il fatto: un blocco globale scambiato per attesa locale

Fatto, dal body della PR #296 (Governor global-blocker fix, mergiata il 26 settembre 2026): la peer review aveva aperto una CONCERN, identificativo gov1:c5d56f63 — un HUMAN_BLOCKER globale veniva letto come "il seat continua altrove". Il blocco riguardava tutto il sistema, ma il Governor lo interpretava come una questione locale: da qualche altra parte si poteva procedere. Il risultato è il peggiore possibile per un controllo: non un errore visibile, ma un via libera dato nel punto in cui serviva uno stop.

Il contesto viene dalla PR #295 (Autonomous Governor Phase A shadow, mergiata lo stesso giorno): il Governor nasceva come capability nativa in sola osservazione, verdetti a forma chiusa, nessun percorso di esecuzione per costruzione. Una Direttiva owner lo definiva provider-agnostic fin dal primo giorno.

Il punto che mi ha colpito di più: i test erano verdi. La #295 riportava 27 test del Governor verdi e una suite completa da 2959 verdi, con un solo fallimento pre-esistente su una guardia documentale. Il difetto è passato attraverso una suite verde perché nessun test chiedeva al sistema la domanda giusta: questo blocco vale qui o vale ovunque? La domanda sulla scala dell'informazione non era scritta da nessuna parte, quindi nessuno la poneva — né il codice, né i test. Solo una revisione umana l'ha posta.

Ne ho parlato dal lato dei controlli in autonomia progettata: un controllo che non distingue la scala di ciò che governa governa a metà.

La correzione: scope e verdetto leggibili dalla macchina

Sempre dal body della PR #296, la correzione ha quattro parti.

La prima: blockerScope e finalResponseLegal sono diventati machine-readable. Lo scope del blocco — locale o globale — e la legalità della risposta finale non sono più lasciati all'interpretazione del lettore: sono campi che una macchina sa leggere. È lo stesso principio del loop che non si fida delle parole: le decisioni si prendono su strutture, non su frasi.

La seconda: i gate globali giudicano, non proseguono. Di fronte a un blocco globale il gate scala la questione o la riconcilia — non emette mai un via libera per prosecuzione. Il silenzio non è più un'opzione nel punto in cui serve una decisione.

La terza: le attese locali restano invariate. La correzione non ha reso tutto globale per paura: ciò che è locale continua a comportarsi da locale. Allargare ogni blocco a globale sarebbe stato un altro modo di sbagliare scala, nella direzione opposta.

La quarta: campi di divergenza tra provider sui record. Il Governor è provider-agnostic per direttiva, e la correzione registra dove i provider divergono invece di presumere che si comportino uguali.

Il body riporta Governor 32 più live 28 verdi, vicini verdi, tsc pulito: i numeri vengono da lì, non da mie misure.

La regola: il difetto tipico è la scala

Questa è interpretazione, mia, e la marco come tale: nei sistemi multi-agente il difetto ricorrente non è il contenuto di un'informazione, è la sua scala. Locale o globale? Vale per questo agente o per tutti? Il contenuto era corretto in entrambe le PR — il blocco esisteva davvero, l'attesa era reale. Sbagliata era solo la portata attribuita all'informazione, e quella portata non era scritta in nessun campo leggibile dalla macchina.

Il test che uso adesso è corto: per ogni informazione che governa qualcosa, chiedo dove è scritta la sua scala. Se la risposta è "da nessuna parte, si capisce dal contesto", ho trovato il prossimo gov1:c5d56f63. Il contesto lo capisce un umano che c'era; la macchina che arriva dopo legge solo i campi. E i sistemi multi-agente sono fatti di macchine che arrivano dopo.

C'è un corollario che tengo vicino al caso dell'orologio dell'agente: lì il dato che governava era scritto dal controllato, qui la scala non era scritta da nessuno. Due modi diversi di mancare lo stesso requisito — un controllo fondato su ciò che una macchina sa leggere davvero, non su ciò che un umano avrebbe capito.

Fatti e interpretazione, separati

Fatti (dai body delle PR #295 e #296): la #295 ha introdotto il Governor in shadow, verdetti a forma chiusa, nessun percorso di esecuzione, 27 test verdi più suite 2959 con un fallimento pre-esistente; la peer review ha aperto la CONCERN gov1:c5d56f63 su un HUMAN_BLOCKER globale letto come prosecuzione altrove; la #296 ha reso machine-readable blockerScope e finalResponseLegal, i gate globali giudicano senza mai dare via libera per prosecuzione, le attese locali invariate, campi di divergenza provider, suite Governor 32 più live 28 verdi e tsc pulito; entrambe mergiate il 26 settembre 2026.

Interpretazione (mia, non verificata oltre il mio caso): il difetto tipico dei sistemi multi-agente è la scala dell'informazione; ogni informazione che governa deve portare la sua scala in un campo machine-readable; il test "dove è scritta la scala" trova la classe di bug prima della prossima peer review. Due PR non fanno una statistica: sono la prova che la regola esiste e ha già pagato una volta.

Domande frequenti

Perché i test verdi non hanno trovato il difetto?

Perché verificavano il comportamento a scala data, non l'attribuzione della scala. Tutti i casi coperti partivano da un blocco già classificato correttamente; nessuno chiedeva al sistema di classificarlo. Un test controlla ciò che è scritto: la scala non era scritta da nessuna parte, quindi non era controllata da niente.

Rendere tutto globale non risolveva più in fretta?

No, spostava l'errore. Un'attesa locale trattata come globale ferma il sistema intero per un problema di una parte: è il fermo ingiustificato, speculare al via libera ingiustificato. La correzione ha tenuto le due scale distinte e ha reso esplicita l'attribuzione, in entrambe le direzioni.

Quando un campo deve diventare machine-readable?

Quando una decisione dipende dal suo valore. Finché un'informazione è consultiva, la frase libera basta; dal momento in cui un gate ci fonda un verdetto, deve stare in un campo che una macchina sa leggere senza interpretare. La domanda guida è sempre la stessa: chi legge questo valore alle tre di notte, un collega o un processo?