tools/analizza_sfx.py: misura un file audio invece di ascoltarlo, e ne traduce i numeri in aggettivi da prompt.
L'avviso agli Android si porta dietro il link, e non dipende più da chi scrive il messaggio2026-08-27
- [change] Ogni annuncio di versione a un tester Android finisce con
👉 La trovi qui: e il link alla scheda Play. Richiesta di Ivan in chat: «così non devono andare a ricercarselo a ritroso». L'aggiornamento da Play arriverebbe anche da solo, ma chi se lo vuole installare subito senza link deve risalire nella chat fino al giorno in cui è entrato nella beta — per molti il messaggio di conferma di mesi prima. - [change] Messo nello script, non nelle istruzioni (
tools/release/genera_link_messaggi.py, CODA_PLAY + lettura della colonna Android): una regola che vive solo nella skill dipende da chi compone la frase quel giorno, e questa deve valere sempre. 📌 Ne segue che la coda NON va scritta a mano nella frase, o esce doppia — detto anche in .claude/commands/avvisa-tester.md §1. - [verifica] Provato su una copia del foglio, contando invece di guardare a occhio: 69 destinatari nel TSV, 38 con
Android = Sì, 38 messaggi che portano il link, e controprova sull'unico Apple-only via Telegram (Matteo Bertalot) che non ce l'ha. La colonna Android si legge per intestazione, come tutte le altre. - 📌 Il link è quello della scheda (
store/apps/details?id=…), non quello di adesione (apps/testing/…): il destinatario è già dentro la beta, gli serve la pagina col tasto Aggiorna, non quella per iscriversi. L'apps/testing resta il rimedio da mandare a mano a chi risponde «app non disponibile» — vuol dire che è uscito dal programma. - ⚠️ Il record
--tsv di un tester Android occupa ora più righe, quindi il messaggio si legge come «tutto fino al prossimo nome» e non «fino a fine riga». Non è colpa di questa coda: dal 2026-08-25 anche la <frase> conserva i suoi a capo (l'annuncio della v0.40 erano mille caratteri su cinque argomenti). La prima stesura evitava l'a capo proprio per paura di rompere il TSV — ed era una precauzione contro un formato che era già multiriga. - ⚠️ Il collaudo ha sporcato
tools/release/annunci_usati.json e andava ripristinato. Lo script registra l'apertura anche quando gliela passi con --annuncio: la prova ha scritto ultimo_annuncio: "PROVA {v}" al posto di quella vera della v0.41. Copia fatta prima, file rimesso a posto, git status di nuovo pulito. 📌 Chi prova questo script usi sempre una copia dell'Excel *e* si tenga da parte il JSON degli annunci: il file Excel è protetto dal flag --excel, il JSON no. - Su Apple la coda non c'è: TestFlight non ha una pagina pubblica equivalente e l'invito è personale. Se la si vuole anche lì, prima va deciso quale link.
Elisa Berbotto «Breliz» arruolata: la beta Android passa a 40 iscritti2026-08-27
- [chore] Elisa Berbotto arruolata e invitata. Ivan ha portato nome, soprannome, numero, mail e piattaforma insieme, quindi è valsa la scorciatoia della skill (niente messaggio di reclutamento, dritti alla registrazione della risposta). Riga 79 dell'Excel, ID 78,
elisa.berbotto@gmail.com in Email e in Utente Play Store, Android = Sì, Avvisa tester = Sì, +39 347 002 6914 in WhatsApp / Tel., Nickname Breliz (è il saluto dei messaggi); backup in Beta_Tester_Homeless_City.BACKUP-2026-08-27-pre-berbotto.xlsx. Controllati i doppioni sul Nome: l'unica altra Elisa in elenco è Grosso, persona diversa. - [chore] I due elenchi Android fatti tutti e due, ed è la parte che si dimentica. Mailing list del canale Alpha «Test Interno Street University Android» da 39 a 40 indirizzi, ✅ verificato ricaricando la pagina (la casella del canale resta spuntata); e utenti di prova della schermata di consenso OAuth (
axiomatic-path-505007-u7) da 51 a 52. Chi sta solo nel primo scarica la beta e poi viene respinto al login Google. 📌 Google non ha rifiutato l'indirizzo, che è la conferma indiretta che corrisponde a un account Google vero. Prima di aggiungere si è controllato in entrambi gli elenchi che non ci fosse già: filtro berbotto sugli utenti di prova → «Nessuna riga», e lettura a vista della mailing list nel punto alfabetico dove sarebbe caduta (fra carlo.rossetti86 ed emilio.passannanti) — non per find, che il 17/08 su questa stessa pagina aveva inventato una corrispondenza. - [chore] La 0.41 è
Disponibile per tester selezionati sul canale Alpha, quindi il link del messaggio porta a un gioco davvero installabile: è l'equivalente Play del controllo IN_BETA_TESTING che su Apple si fa prima di invitare. - ⚠️ Elisa non risulta fra i contatti del bridge WhatsApp (
search_contacts a vuoto su cognome, nome e numero): nessuna chat pregressa, quindi il messaggio di conferma è il primo in assoluto su quel numero. Segnalato a Ivan nell'anteprima, che ha risposto «invia» scegliendo il messaggio 2 standard senza riga di presentazione — stessa scelta del caso Goria dell'08/08. Invio success: true, Stato → Invitato. 📌 Il messaggio non si ritroverà in messages.db: il bridge non salva i propri invii. - ⚠️ L'URL diretto
/tracks/closed-testing della Play Console non esiste: risponde «Si è verificato un errore imprevisto. Riprova. (7A4028F8)», che sembra un guasto e invece è solo il percorso sbagliato. Al canale Alpha si arriva da Testa e rilascia → Test chiusi, e da lì l'URL vero porta l'id numerico del canale (/tracks/4699904369365616160).
Lo strumento che legge un suono per riscriverne il prompt entra nel repo2026-08-27
- [feat]
tools/analizza_sfx.py: misura un file audio invece di ascoltarlo, e ne traduce i numeri in aggettivi da prompt. Da un wav/mp3/ogg (normalizzato mono a 44,1 kHz con ffmpeg) tira fuori durata, tempo d'attacco, decadimento a −20 dB, RMS, centroide spettrale, flatness, frequenza dominante, quota di energia sotto 250 Hz e sopra 4 kHz, numero di colpi distinti e direzione del pitch — poi li volta in una riga inglese pronta per un text-to-sound-effects («short, sharp instant attack, noisy and textured, 3 distinct hits in sequence»). 📌 Il file originale non lascia il Mac: si misura in locale e si spedisce solo la descrizione.- Era sul disco dal 25/08 e non era mai stato committato, come
leggi_documento.py prima di lui. Provato prima di entrare, su Sounds_raw/bench.wav: 1,00 s, 3 colpi, «deep and bassy». - Dipende da
numpy e scipy (già sul Mac) e da ffmpeg: sono fuori dal repo, quindi su un clone fresco vanno installati.
Apple approva la 0.41: 22 tester Apple su 23 subito, il ventitreesimo appena torna Chrome2026-08-27
- [release] Beta review Apple approvata, tutti e 23 i tester Apple avvisati. La sorveglianza schedulata ieri (cron ogni 30 minuti) ha letto
PRONTO alle 06:40 e ha mandato da sola, come autorizzato da Ivan. Tutti e 22 gli invii WhatsApp con success: true. Tempi Apple per la 0.41: caricata il 26/08 alle 17:16, approvata entro le 06:40 del 27/08 — meno di 13 ore e mezza, contro le ~20 ore di coda della 0.40. Esclusi 53: 45 su altra piattaforma (già avvisati col giro Android), 7 con «Avvisa tester» a —, 1 è Ivan.- Marco Bianco, l'unico su Telegram (
@toredane), recuperato alle 08:47. Al primo giro era rimasto scoperto: l'estensione Chrome non era connessa, e Telegram è l'unico canale che passa per forza dal browser perché non ha un MCP. Ivan ha riaperto Chrome e il messaggio è partito. 23 su 23. ⚠️ A salvarlo è stato il nome scritto DENTRO il marcatore: il marcatore da solo avrebbe detto «fatto» e il mancante sarebbe sparito. - 📌 Il marcatore è stato scritto lo stesso, di proposito. Senza, il giro successivo avrebbe rimandato il messaggio ai 22 già serviti: fra un doppione a 22 persone e un mancante annotato, il mancante è il male minore. Verificato subito dopo: il controllore risponde
GIA_FATTO.
- [verifica] Il rimedio di ieri all'apertura ha retto: lo script ha stampato «Apertura (già usata per questa versione): 🚀 Street University v0.41 è decollata dal cassonetto!», cioè gli Apple hanno ricevuto la stessa apertura degli Android invece di una pescata nuova. Era esattamente il difetto corretto ieri sera.
- [infra] Cron
1fc121c3 cancellato: aveva finito il suo lavoro.
I 37 tester Android avvisati, e l'apertura scritta a mano che non veniva ricordata2026-08-26
- [release] Play ha finito la revisione e i 37 tester Android sono avvisati — 36 su WhatsApp (MCP, tutti
success: true) e 1 su Telegram (Matteo Bertalot, dal client web: il testo su Telegram non si può precompilare). Esclusi 39: 31 su altra piattaforma (vanno col giro Apple), 7 con «Avvisa tester» a —, 1 è Ivan. Il conto combacia con la 0.40 (37 Android + 23 Apple).- Come si è stabilito che Android fosse aperto, senza fidarsi di un segnale solo: l'API di Play non espone lo stato della revisione (dice solo che il bundle è sul canale, e lo diceva già un'ora prima). I tre segnali concordi sono arrivati dalla Console: la colonna «Stato dell'aggiornamento» passata da «In revisione» a vuota, il bundle 41 marcato Attivo, e la Panoramica della pubblicazione vuota con «Data ultima pubblicazione: 26 agosto 2026». Una cella vuota da sola non basta: può essere solo non ancora disegnata.
- [fix]
--annuncio non veniva registrato, e la stessa versione sarebbe uscita con DUE aperture diverse. scegli_annuncio() salva in annunci_usati.json solo le aperture che pesca da sé; passandone una a mano il file restava a v0.40. Conseguenza concreta, non teorica: gli Android hanno ricevuto «🚀 …decollata dal cassonetto!», e al giro Apple lo script ne avrebbe pescata un'altra per la stessa 0.41 — più il fatto che un'apertura davvero usata non sarebbe mai finita fra le «usate», quindi poteva ripresentarsi a una release futura. Ora il ramo --annuncio registra come l'altro; annunci_usati.json è stato rimesso a mano su v0.41 + 🚀, così il giro Apple riusa la stessa. - [infra] Sorveglianza Apple schedulata (cron
1fc121c3, ogni 30 minuti ai minuti :07 e :37, per 24 ore). Su PRONTO manda ai tester Apple senza chiedere conferma, autorizzato da Ivan in chat. Il guardiano contro il doppio invio è il marcatore BETATESTING/avvisati_apple_v041.marker, scritto solo a invio finito.- ⚠️ Il controllore distingue ERRORE da NON_PRONTO, e non è pignoleria:
testflight_tester.chiama() fa sys.exit sugli errori di curl, quindi una lettura fallita si presenterebbe come un silenzio identico a «non ancora approvata» — la trappola già pagata il 26/08 con la sentinella che usciva 0 senza approvazione. - ⚠️ Il cron vive solo dentro la sessione che lo ha creato: chiusa quella, la sorveglianza sparisce senza dirlo.
La 0.41 esce sui quattro canali, e tre strumenti del rilascio mentivano in silenzio2026-08-26
- [release] v0.41 taggata e distribuita. Tag
v0.41-performance-improvements-telemetry-fix-2sec-cooldown-hit su main (merge 93c4155), pagina Changelog rigenerata e online. macOS (dmg 158 MB) e Windows (zip 94 MB) pubblicati su iCloud e Google Drive; Play Alpha versionCode 41 (verificato all'API, non solo dall'uscita dello script: alpha → versionCodes ['41'], status completed); TestFlight build 254cf570… elaborata VALID e portata fino a externalBuildState = WAITING_FOR_BETA_REVIEW (note What to Test in italiano sullo slot en-US, gruppo esterno «Divano», betaAppReviewSubmission: i tre passi che --invia non fa da solo). Tutti i pacchetti con stage (69fcb3a5…) verificato dentro. - [fix] L'AAB stava per partire con le credenziali di
dev, e sarebbe passato tutti i controlli. La skill pubblica-store insegnava a esportarlo col comando Godot diretto (--export-release "Android Play (AAB)"), ma export_all.sh rimette le credenziali di lavoro a fine giro: subito dopo l'export di mac+win nel progetto c'era di nuovo dev (f324e539…). Il bundle che ne è uscito era firmato, con versionCode giusto, EOS a 16 KB — e puntava all'ambiente sbagliato. Se ne sarebbe accorta solo la guardia di EOSBridge a gioco avviato, spegnendo l'online, col versionCode già bruciato (Play non lo riusa). Riesportato con export_all.sh --env stage aab e skill corretta.- 📌 La riga «
export_all.sh non conosce il target aab» era vera fino al 25/08 e falsa dal 25/08 (voce 9): la skill non era stata aggiornata insieme allo script. Una documentazione che invecchia di un giorno basta a produrre il pacchetto sbagliato.
- [fix]
play_upload.sh: il controllo sul versionCode falliva APERTO. La lettura del canale (GET /edits/<id>/tracks/alpha) finiva in massimo = 0 su qualunque HTTP diverso da 200, e stampava «✅ sul canale «alpha» ora c'è versionCode nessuno» — indistinguibile da un canale davvero vuoto. Visto dal vero il 26/08: la prima chiamata ha detto «nessuno» mentre su alpha c'era la 0.40, la seconda identica ha letto 40. Ora su HTTP≠200 lo script si ferma e lo dice, invece di caricare alla cieca. - [fix]
prepare_release.sh si faceva dirottare da un tag di lavoro (dettagli nella voce 25): dev-perf-2026-08-26 scavalcava v0.40 e il tag proposto diventava v0.1. - [change]
version/code a 41 su entrambi i preset Android (Android e Android Play (AAB)): nessuno script lo scrive, e Play non riusa mai un numero già visto. - [doc]
esporta.md dava export_presets.cfg per gitignored: è tracciato, riverificato oggi con git ls-files. È una buona notizia — una riscrittura dell'editor si vede nella diff invece di sparire — e cambia l'istruzione finale: quel file, se toccato, va committato. - [infra]
play_upload.sh non era nell'allowlist, e la modalità auto l'ha bloccato: export_all.sh e testflight.sh c'erano dal 17/08, lui è nato il 09/08 e non è mai stato aggiunto. Serve Bash(bash tools/release/play_upload.sh:*) in .claude/settings.local.json — la riga la mette Ivan, perché una regola di permesso non me la scrivo da solo. - [decisione] Ivan in chat, 26/08 — l'avviso ai tester si manda a CANALE APERTO, non a build caricata. Agli utenti Android quando la revisione di Google rende disponibile l'aggiornamento; a quelli Apple quando la beta review approva e la build diventa scaricabile. Stessa regola del 24/08. E per questo giro una frase sola, approvata in chat e messa per iscritto in
BETATESTING/frase_annuncio_v041.txt (fuori git, come tutta la cartella): «Stavolta sono piccoli hotfix e soprattutto una bella spinta alle prestazioni su mobile: più fps per chi ne aveva pochi, meno calore e meno consumo di batteria per tutti. Aggiorna da Play, e grazie di provarla!» — variante Apple con «La trovi su TestFlight». Apertura scelta fra le 12 mai usate: «🚀 Street University v0.41 è decollata dal cassonetto!». 📌 Correzione di Ivan sulla prima stesura: «meno batteria» si legge come *meno carica*, non come meno consumo. - [release] Lista beta rigenerata: 3 dispositivi di 2 persone,
ultima_versione 0.41, obbligatoria_dal 2026-09-02. I dispositivi sono pochi perché quasi nessuno ha ancora mandato il codice, e non pesa: il gate all'avvio non esiste ancora (SU-219/SU-221), quindi la lista oggi non chiude fuori nessuno. - 📌 Filo comune delle tre: nessuno dei tre difetti si annunciava come errore. Uscivano tutti 0, con un ✅ o un piano di comandi perfettamente formato. Il modo in cui sono venuti fuori è sempre lo stesso — guardare il fatto invece dell'esito dello strumento: l'elenco dei track all'API, le credenziali dentro il progetto, il tag confrontato con l'elenco vero.
Le note della v0.41 in otto lingue, e il tag di lavoro che dirottava il rilascio2026-08-26
- [fix]
prepare_release.sh prendeva come base l'ultimo tag QUALSIASI, non l'ultimo di release. git tag --sort=-creatordate | head -1 pescava dev-perf-2026-08-26 — un tag di lavoro spinto su origin — invece di v0.40-…, e il guasto era silenzioso e triplo: senza vX.Y nel nome VERCORE esce vuoto, quindi il tag proposto diventava v0.1-SLUG, il ripiego su config/version non partiva (pretende VERCORE pieno) e il delta CHANGELOG veniva calcolato dal punto sbagliato. Ora il filtro è --list 'v[0-9]*'. ⚠️ Nessuno dei tre sintomi si annuncia come errore: lo script esce 0 e stampa un piano di comandi perfettamente formato per la versione sbagliata. - [release] Sezione v0.41 delle note in-game, scritta in tutte e otto le lingue (it master + en/fr/es/de/ru/zh/pt), cumulativa in cima come da regola. Cinque voci, dal delta di 22 commit dal tag v0.40: la grazia di 2 s col lampeggio (SU-588), la città quasi al doppio dei fotogrammi (SU-581/582/583 + gli overlay mai spenti), le schermate carte che non arrancano più e la cerimonia senza scatto (SU-583/586), l'ondata di caldo che finalmente si vede, e l'alone rosso di fame/sonno rimosso.
- ⚠️ Prima stesura buttata: accenti ASCII-fati (
citta', e', grace, dano) scritti per cautela sull'encoding dell'heredoc. I file gemelli usano da sempre i caratteri veri: in gioco la differenza si sarebbe vista, e in una sola lingua su otto sarebbe passata inosservata. Rifatta con la punteggiatura giusta. - 📌 I nomi dei personaggi non si inventano in traduzione: presi dai file gemelli già in linea —
cat lady, dame aux chats, señora de los gatos, Katzenfrau, кошатница, 喂猫大妈, senhora dos gatos.
- [test] La sonda delle note non è più legata alla v0.40: adesso segue
config/version (probe_note_v040.gd). Prima aveva scritti dentro tre letterali — v0.40, «24 voci» e una frase-spia della sezione 0.40 — cioè si sarebbe dovuta ricucire a mano a ogni release, e chi non lo avesse fatto avrebbe visto 31 OK su una versione che non esiste più. Ora la versione arriva da project.godot e il numero di voci più la frase-spia si ricavano dalla sezione italiana. Girata sulla v0.41: 31 OK, 0 KO, riferimento riconosciuto da sé (v0.41 · 5 voci), nessun ripiego italiano in nessuna delle sette traduzioni.- 📌 Il file non è rinominato pur chiamandosi ancora
probe_note_v040: in Godot il .uid dipende dal path, quindi il rinomino costa un reimport dell'intero progetto. Il perché è scritto nell'intestazione del file, dove lo trova chi lo apre.
config/version era già a 0.41 (ci era arrivato con SU-587), quindi il passo 3 del giro di release era di fatto già fatto.