Vai al contenuto
SIMONE PIZZI
Progetti ↗
Runtime TelegramBot Desktop Titan Edition

Titan funzionava. Poi l’ha letto Opus 5.5

Titan ha pubblicato per un mese senza un intoppo. Poi Claude Opus 5.5 l’ha letto chiedendosi cosa succede quando le cose vanno male: ne sono uscite la 2.4.0 e la 2.4.1.

Data
Lettura
8 minuti
Sezioni
6
Copertina: Titan funzionava. Poi l’ha letto Opus 5.5

Il 7 luglio ho scritto che Runtime TelegramBot Desktop Titan Edition era arrivato al capolinea. Ne ero convinto, e l’ho messo nero su bianco in quell’articolo: «per noi Titan è completo al cento per cento. Fa quello che deve, lo fa bene». Ad agosto è diventato open source, a settembre ha avuto due aggiornamenti piccoli, e dal 20 settembre non l’ho più toccato.

Per un mese ha lavorato senza un intoppo. Pubblicava sui canali di Runtime Radio di giorno e di notte, gli episodi arrivavano, il diario scorreva pulito, o quasi. Avevo tutte le prove che Titan funzionasse, e infatti funzionava.

Il 19 ottobre l’ho fatto leggere a Claude Opus 5.5, dall’inizio alla fine, con una domanda sola: che cosa succede quando le cose vanno male? Nel pomeriggio sono uscite la 2.4.0 e la 2.4.1. Dentro ci sono tre difetti gravissimi, sei gravi, dieci medi e una manciata di lievi, più un’interfaccia rifatta da capo. Il programma che funzionava era pieno di bug.

La schermata d’ingresso di Titan 2.4.1: il logo con l’orbita, il titolo Runtime TelegramBot Desktop Titan Edition, la scelta della lingua, il pulsante Entra in Titan e il marchio Runtime Utilities
La nuova schermata d’ingresso. In fondo c’è la firma nuova: Titan adesso è un software di Runtime Utilities.

Un mese di bel tempo

Le due cose stanno insieme meglio di quanto sembri. Un bot come Titan passa le giornate a ripetere lo stesso giro: legge i feed, trova le novità, le manda a Telegram, aspetta il turno successivo. Finché la rete regge, Telegram risponde e nessuno tocca le impostazioni a motore acceso, quel giro è perfetto.

I difetti abitavano tutti fuori da lì. Nel blackout di due minuti, nel motore fermato e riacceso di fretta, nella data scritta male in un profilo, nel database che una mattina non si apre. Un mese di bel tempo non li sfiora nemmeno, e io guardavo il bel tempo.

Di revisioni ne avevo già fatte: a maggio, dopo il silenzio di YouTube, e ad agosto, prima di rendere pubblico il codice, quella volta con Opus 5. Avevano trovato parecchio. Stavolta la domanda puntava altrove, e il lettore era un altro.

Tre cose che non dovevano esserci

La prima sta sotto il cofano. Titan è costruito su Electron, cioè su una copia di Chromium che viaggia dentro l’app. Girava sulla versione 32, che da oltre un anno non riceveva più correzioni di sicurezza: npm audit ne elencava una quarantina, alcune proprio sull’isolamento fra la pagina e il sistema. Il salto alla 44 era bloccato dalla libreria del database, che andava ricompilata a ogni versione di Electron; la sua versione 13 arriva già compilata, e il blocco è caduto. Le dipendenze dell’app distribuita oggi hanno zero vulnerabilità note.

La seconda è quella che mi brucia di più. Quando un invio a Telegram falliva, Titan riprovava tre volte a pochi secondi di distanza. Al terzo fallimento scriveva nel diario una riga che adesso rileggo con un certo imbarazzo: «marcato come processato per evitare loop infinito». Vuol dire che bastavano due minuti di Telegram irraggiungibile perché un episodio venisse dato per pubblicato senza esserlo mai. In più il controllo degli errori di rete cercava la parola ETIMEOUT, mentre quella vera è ETIMEDOUT, con la D. Il refuso c’era già nel primo commit del repository, il 2 marzo.

Adesso ogni errore viene classificato. Se manca la rete, il contenuto resta nel feed e torna al giro dopo; se il token o il canale sono sbagliati, il bot smette di inviare senza segnare nulla finché non lo correggo. Un messaggio si salta solo quando è Telegram a rifiutarlo davvero, e il diario lo dice.

La terza era una porta socchiusa. La parte dell’app che disegna l’interfaccia poteva parlare con qualunque canale interno del programma, grazie a un vecchio ponte che esponeva tutto e che nessun componente usava. Sommato a un’anteprima dei template che inseriva l’HTML così com’era, anche quello di un profilo .rtb ricevuto da qualcun altro, formava una catena da spezzare. Il ponte non c’è più. L’anteprima passa da un filtro che tiene solo i tag ammessi da Telegram, e la finestra non può navigare verso altri indirizzi.

E poi tutto il resto

Fra i difetti gravi, un paio spiegano bene di che genere fossero. Se cambiavo il token o il canale di un bot a motore acceso, i messaggi continuavano ad andare al canale vecchio fino al riavvio. Se fermavo e riavviavo il motore durante una scansione, restavano vive due catene di pianificazione, con due giri e due code di invio in parallelo. Una data di partenza illeggibile, magari in un profilo ritoccato a mano, faceva pubblicare l’intero arretrato del feed, perché in JavaScript un confronto con un valore non numerico risulta sempre falso. E se il database non si apriva, Titan restava un processo invisibile che impediva perfino di rilanciarlo.

Le medie hanno lo stesso sapore. Il log di un’app accesa per giorni finiva tutto nel file del giorno d’avvio. Un riepilogo con venti titoli lunghi superava il limite di Telegram e restava bloccato per sempre. Un feed impostato ogni 5 minuti su un bot a 15 veniva letto ogni 15. Perfino npm run dev, il comando per lavorare sull’app, era rotto da sempre. L’elenco completo, voce per voce, sta nel changelog della 2.4.0.

L’avviso che leggevo ogni giorno

La 2.4.1 è uscita mezz’ora dopo e riguarda una riga che avevo sotto gli occhi da agosto. A ogni giro, per ogni canale YouTube, il diario scriveva: Direct getChannel failed for "@canale", trying search... La leggevo e tiravo dritto, perché i video arrivavano lo stesso.

Arrivavano per la strada sbagliata. Titan chiedeva il canale usando il nome con la chiocciola, ma la funzione della libreria accetta solo l’identificativo interno, quello che comincia con UC. YouTube rispondeva con un errore, sempre, e Titan ripiegava su una ricerca per nome prendendo il primo risultato: due richieste in più per canale a ogni giro, proprio il traffico che l’antibot di Google punisce, e il rischio di pescare un omonimo. Ora l’identificativo si ricava dalla pagina del canale e resta in memoria. Dal secondo giro Titan va dritto al punto.

Da programma che funziona a programma premium

Correggere non bastava, e la seconda metà del pomeriggio è andata a come Titan si presenta e si usa. Titan resta gratuito e sotto licenza MIT: «premium» qui vuol dire la cura che di solito si trova nei programmi a pagamento.

L’interfaccia è stata ridisegnata in blu, con un solo colore d’accento e i caratteri inclusi nell’app, così a ogni avvio non si chiede più niente a Google Fonts. Il comando del motore è salito nella barra in alto, con lo stato e l’ora del prossimo giro: il motore è uno solo per tutti i bot, e prima il pulsante sembrava accendere solo quello selezionato.

La plancia di Titan nella versione 2.1.5, in inglese: i bot a sinistra, le sorgenti al centro, il grande pulsante rosso del motore e la console dei log a destra
Prima: la plancia vecchia, qui in una schermata della 2.1.5, con il grande pulsante del motore in mezzo alle statistiche.
La plancia di Titan 2.4: barra in alto con Motore acceso, Controlla adesso e Ferma il motore; a sinistra i bot, al centro le statistiche e le sorgenti, a destra il diario delle attività
Dopo: la plancia della 2.4. I dati sono finti, presi dal banco di prova dell’interfaccia.

L’accessibilità è stata misurata invece che dichiarata: zero violazioni di axe-core su oltre venti stati dell’interfaccia, sessantacinque coppie di colori controllate contro le soglie WCAG 2.2 AA, ogni comando raggiungibile da tastiera e l’interfaccia ingrandibile dall’80 al 180 per cento.

Poi sono arrivate le funzioni che mancavano da sempre. La X della finestra chiudeva Titan e fermava tutti i bot senza dire una parola: un clic distratto e i canali smettevano di pubblicare. Adesso, a motore acceso, Titan chiede se continuare nell’area di notifica. Può anche partire con il computer e accendere il motore da solo, e così dopo un riavvio riprende a pubblicare senza che nessuno apra la finestra.

Le impostazioni generali di Titan 2.4, sezione Avvio e chiusura: Avvia Titan con il computer, Avvia il motore all’apertura, e la scelta di che cosa fa la X della finestra
Avvio e chiusura: Titan può restare al lavoro anche quando la finestra non c’è.

Il pulsante Prova il bot chiede a Telegram se il token è valido, se il canale esiste e se il bot ha il permesso di pubblicarci, senza scrivere niente. Prima questi errori si scoprivano avviando il motore e leggendo il diario.

La finestra delle impostazioni del bot con il riquadro Prova il bot: token valido, destinazione trovata, permessi per pubblicare
Prova il bot: tre controlli, nessun messaggio nel canale. Si può fare anche prima di salvare.

Controlla adesso fa un giro immediato su tutte le sorgenti, senza fermare e riavviare il motore come toccava fare prima. La pubblicazione senza suono manda i messaggi di notte senza far vibrare il telefono degli iscritti. L’avvio silenzioso, infine, toglie il «🟢 Online» che Titan scriveva a ogni accensione, per i canali che non lo gradiscono.

La scheda Pianificazione delle impostazioni del bot: data di partenza, intervallo di controllo, fascia oraria di pubblicazione e pubblicazione senza suono dalle 23:00 alle 07:00
La pianificazione di un bot, con la fascia senza suono che scavalca la mezzanotte.

Quello che mi porto via

Titan l’ho scritto con l’aiuto massiccio dei modelli linguistici, e non l’ho mai nascosto. Ogni modello che ci ha messo le mani ha trovato qualcosa che il precedente aveva lasciato passare. Stavolta però la differenza si può contare. Prima della 2.4 Titan non aveva un solo test automatico; adesso ne ha settantuno. Le licenze delle librerie di terze parti, che la compilazione cancellava, finiscono di nuovo nell’installer. Ogni correzione è stata provata su una build vera, con un profilo separato e un bot finto, mai sui canali di Runtime Radio.

A luglio avevo scritto che Titan non aveva più bisogno di noi seduti accanto a controllarlo. Era vero per il giro di tutti i giorni. Per il giorno in cui Telegram non risponde, non lo era mai stato.

La 2.4.1 si scarica gratis per Windows e Linux dalla pagina di Titan su Ecosystem, aggiornata per l’occasione, oppure dalle release su GitHub. Chi lo ha già installato se la vede proporre all’avvio.

Ogni tanto scrivo una lettera

Nessuna cadenza fissa, nessun riassunto automatico: parte solo quando ho qualcosa da raccontare. In fondo a ognuna c'è il link per uscire.

↑ Su

Cerca nel sito

Condividi

L'indirizzo di questa pagina:

Scrivi a Simone

Segnalazioni, correzioni, o solo per dire che una cosa non funziona: quest'ultima è la più utile di tutte.