← Novità

v0.28

2026-08-07 → 2026-08-08 · 4 voce/i di changelog

La scatola nera: progettata la telemetria di playtest, aperti i ticket della sola fase 12026-08-08

  • [docs] Nuovo brief OPUS_BRIEFS/T1_SCATOLA_NERA.md — design chiuso con la skill progetta-feature a partire da SU-321, dopo che Ivan ha sciolto l'ambiguità del ticket: non una feature di gioco (l'AI che commenta la run al giocatore) ma uno strumento per noi, per sapere cosa un tester usa e cosa non tocca mai, dove si pianta, quale errore ripete a ogni partita. 📌 L'inventario prima del design ha cambiato il preventivo: il gioco sa già identificare il dispositivo in modo pseudonimo (BetaGate.device_code(), SHA-256 salato di OS.get_unique_id(), già mappato sui nomi in BETATESTING/devices_mappa.csv), sa già parlare in HTTPS (BetaGate scarica devices.json con timeout e gestione del fallimento), conta già le azioni della run (ScoreSystem.counts) e i totali a vita (MetaProgress.counters), ed espone 36 segnali in EventBus come superficie d'ascolto — mentre TestBot stampa da sempre una riga JSON per volta col motivo e l'istante della morte, cioè il formato era già stato progettato una volta. Mancano solo tre cose piccole in fila: un file che ascolta, un file che si scrive, un consenso onesto. Decisioni di Ivan da non riaprire: invio automatico con consenso una tantum (scartati il silenzioso, che costa la fiducia dei tester, e la spedizione manuale, da cui arriverebbero pochi file); eventi + posizioni, che è ciò che rende «dove si pianta» una domanda con risposta geografica; replay completo scartato perché pretende determinismo al fotogramma e un solo dettaglio non deterministico mostrerebbe una partita mai avvenuta; file grezzi e analisi a comando, niente rapporto automatico né cruscotto finché i file non saranno tanti. ⚠️ Il tono del pannello di consenso è deliberatamente serio nel corpo (titolo in tono, «IL BARBONE PRENDE APPUNTI»): una battuta mentre si chiede il permesso di raccogliere dati fa sospettare che si stia nascondendo qualcosa, e con dei tester amici quel sospetto costa più della telemetria. ⚠️ Un guardrail inesistente, smentito per iscritto nel brief: I1 scrive «niente autoload nuovi» citando 00_CONTESTO_PROGETTO.md, ma in quel file la regola non c'è (l'unica riga sugli autoload dice di non *rinominare* quelli esistenti), e il changelog di SU-268 corregge già un divieto analogo («il divieto di toccare project.godot era mio ed era sbagliato»); TestBot, BetaGate, EOSBridge, NetworkManager e DemoMode sono tutti autoload aggiunti strada facendo. 📌 Vincoli trovati e scritti nel brief perché non vengano riscoperti dopo: la demo web non deve scrivere niente (DemoMode, promessa già verificata con una misura in SU-268), il tutorial va registrato perché è dove la gente si arena, il flush serve anche su NOTIFICATION_APPLICATION_PAUSED o si perde la coda del file di chi schiaccia il tasto home, e su iOS OS.get_unique_id() va verificato prima di contarci.
  • [docs] Jira: epic SU-324 «T1 — La scatola nera» e ticket della sola fase 1 — SU-325 (il registratore che scrive su file, spento di default, nessuna rete), SU-326 (posizioni ed euristica «si è piantato qui»), SU-327 (misure di peso e fps, con l'A-B-A imposto dalla deriva termica dell'Honor 10), concatenati con link «blocca». SU-321 chiuso con il commento di progetto e portato In revisione. I ticket non sono stati messi nello sprint: la prontezza la decide Ivan.

Un interruttore per riga: chi avvisare della nuova versione lo decide l'Excel2026-08-08

  • [feat] Colonna «Avvisa tester» in B, subito prima di «Nome»: spuntata = riceve l'annuncio con /avvisa-tester, = viene saltato. Tendina Sì/— come le colonne di piattaforma, default su tutte le 71 righe già presenti e su quelle nuove (la regola è finita nella fase 1 di arruola-tester e in messaggi_beta.py --nuovo, che ora scrive sulla riga che crea). Serve a mettere in pausa qualcuno senza cancellargli la riga né falsargli lo Stato. ⚠️ Lo spostamento in testa è stato fatto a mano, cella per cella, e non con insert_cols/move_range: quelli perdono collegamenti, celle unite, convalide, filtro e larghezze e lasciano il file rotto in silenzio — è come le lettere sono già slittate due volte. Il rimappaggio ricostruisce merge (E1:F1 → F1:G1, H1:L1 → I1:M1, M1:N1 → N1:O1), convalide (H3:N197 → I3:O197, P → Q, la nuova su B3:B197), larghezze e blocco riquadri (H3 → I3, così restano ferme le stesse colonne di prima più il flag). ⚠️ Un errore preso in corsa proprio lì: rimappando gli intervalli per estremi il filtro automatico A2:Y73 diventava A2:B73 — due colonne su venticinque — perché la colonna spostata *era* l'estremo; ora si rimappa l'insieme delle colonne, con un assert che protesta se un intervallo si spezza. Verifica: confronto cella per cella di tutto il foglio (197×25) contro lo scatto di prima, 0 differenze su valori, link, riempimenti, grassetti, allineamenti e formati; 70 link WhatsApp/Telegram ancora cliccabili e con il ref aggiornato alla colonna nuova. Backup in Beta_Tester_Homeless_City.BACKUP-2026-08-08-pre-avvisa.xlsx. Riga aggiunta anche al foglio Legenda. 📌 Gli altri script che leggono il foglio (messaggi_beta.py, genera_whitelist.py) cercano le colonne per intestazione e non si sono accorti di niente: provati dopo lo spostamento, --nuovo scrive la riga 74 con in B e la whitelist rigenera la stessa lista di dispositivi di prima.
  • [change] tools/release/genera_link_messaggi.py salta gli esclusi e gli ripulisce i link. Non basta non metterli nel TSV: le colonne «Link WhatsApp»/«Link Telegram» sono il piano B cliccabile a mano, quindi per gli esclusi vengono svuotate, altrimenti resterebbe in foglio un link della release scorsa che manda l'avviso lo stesso. Escono su stderr come SALTATO ESCLUSO (categoria distinta da PROBLEMA/FUTURO: è una scelta di Ivan, non un contatto mancante) e in modo normale come riga ⏸ Esclusi…. 📌 La cella vuota vale «Sì»: si esclude solo con una negazione esplicita (, No, 0, falso), così una riga aggiunta a mano senza compilare la colonna riceve comunque il messaggio invece di sparire in silenzio; una x NON è una negazione, perché nella casella significa spuntata. 📌 Su un Excel che la colonna non ce l'ha ancora (file vecchio o clone), lo script se la crea in coda e la nasce spuntata per tutti, tendina compresa — provato su BACKUP-2026-08-08.xlsx. Prova su copia del foglio vero: con due righe messe a /No i destinatari passano da 70 a 68, i due spariscono dal TSV con le celle link vuote, e chi ha la cella vuota resta dentro. Aggiornati /avvisa-tester (chi avvisare, e che il flag non lo tocca l'agente) e i README di BETATESTING/.

Ricognizione delle risposte beta: una tester registrata, una mail che la tester stessa smentisce2026-08-08

  • [change] Francesca Bonino: dalla risposta su WhatsApp fino a tester ammessa su Play, giro chiuso. Registrata arch.francescabonino@gmail.com in Email e Utente Play Store con Android = Sì, aggiunta alla mailing list «Test Interno Street University Android» del canale Alpha (32 → 33 indirizzi, ✅ verificato ricaricando la pagina e non solo dopo il salvataggio, che è la forma di verifica già imposta dal giro del 2026-08-06), avvisata col messaggio 2 di messaggio_reclutamento_beta.md — pescato senza riscriverlo, cambiato solo il saluto in «Ciao Pocket!» — e portata a Invitato. Ricognizione partita dai 14 tester in «Messaggio inviato» che aspettavano risposta su WhatsApp (Matteo Bertalot escluso perché è un contatto Telegram, e quelle risposte le porta Ivan a mano — regola sua del 2026-08-06). 📌 La piattaforma non è stata dedotta: nella chat c'è la domanda esplicita di Ivan «Android giusto?» e il «sì sì» di lei, quindi il criterio «se non dicono la piattaforma non tirare a indovinare» non è stato aggirato. 📌 Prima di aggiungerla, letti tutti i 32 indirizzi già in lista per escludere un doppione. Backup del foglio prima di scrivere in Beta_Tester_Homeless_City.BACKUP-2026-08-08.xlsx.
  • [note] ⚠️ La ricognizione per numero di telefono dà «nessun messaggio» anche quando la risposta c'è, ed è la trappola LID già annotata. list_messages(sender_phone_number=…) ha risposto a vuoto su tutti e 14, compresi quelli che avevano scritto il giorno prima. Le chat stanno sotto LID, non sotto numero: la corrispondenza va ricostruita da whatsmeow_lid_map (lidpn, 843 voci) dentro whatsapp.db, e solo allora i messaggi saltano fuori. 📌 Il caso che mostra quanto inganna: la chat di Alice Timpanaro *esiste* sotto 393491366404@s.whatsapp.net ma è ferma al 2026-06-26, quindi una verifica fatta lì dentro sembra riuscita e conclude il falso. 📌 La ricerca è stata rifatta su tutta la storia e non solo sull'ultima settimana, apposta per pescare eventuali risposte vecchie mai registrate: nelle 14 chat compaiono in tutto due indirizzi email, nessun altro.
  • [note] ⚠️ Alice Biondin NON è stata registrata, e la mail nel foglio sarebbe stata sbagliata. Ha scritto biondin.alice@gmail.com aggiungendo di suo pugno «credo non sia quella», e Ivan le ha già risposto spiegandole dove leggere la mail vera (App Store → immagine in alto a destra → info account). Registrarla avrebbe prodotto un invito TestFlight verso un indirizzo che la destinataria stessa dà per probabilmente inesistente. Resta in attesa della conferma; la piattaforma è Apple. 📌 Gli altri 11 non hanno risposto affatto — diversi non scrivono da mesi (Massimo Capietti dal 2025-10-04) — e tre hanno reagito senza dare la mail: Lucrezia Cerutti chiacchiera del gioco, Giulia Gasverde ha detto «appena torno lo devo provare», Alessandro Peyrachia ha ricevuto la richiesta il 2026-08-06 e non ha ancora risposto.
  • [note] 📌 Il cronometro dei 14 giorni è partito, ed è al primo giorno. La dashboard di Play dice «Al momento partecipano 12 tester per 1 giorno»: i due requisiti per chiedere la produzione sono spuntati (release di test chiuso pubblicata, almeno 12 tester attivati), resta solo «esegui il test chiuso con almeno 12 tester per almeno 14 giorni». ⚠️ È il conteggio di cui DISTRIBUZIONE_STORE.md §2.5 avvertiva che non parte finché il canale resta bozza: ora scorre, e la data utile per chiedere la produzione cade intorno al 2026-08-20. 📌 Il canale mostra ancora come ultima release la 27 (0.27), non la 0.28 appena taggata: chi installa da Play prende la 0.27 finché non si carica il bundle nuovo.
  • [note] 📌 Tre incoerenze preesistenti nel foglio, segnalate e non toccate: Alessandro Conenna (Stato Attivo), Umberto Audisio (Invitato) e Umberto Martelli (Attivo) hanno la mail in Email ma nessuna colonna store compilata e nessuna spunta di piattaforma. È la combinazione che arruola-tester definisce «errore di compilazione»: si segnala a Ivan invece di indovinare a quale store appartengano.

Release v0.28: le note in-game e il numero di versione2026-08-07

  • [release] Sezione v0.28 in cima a assets/release_notes_it.txt e config/version a 0.28. Venti voci in tono da giocatore ricavate dal delta CHANGELOG dall'ultimo tag (v0.27-nove-vite-otto-lingue-android-web-apple-luci-notte-carte-super, quattro giri di sprint dall'ottavo all'undicesimo): la reazione al colpo (posa, sbalzo, lampeggio), il cuore rotto alato a ogni vita persa, il rifugio che apre a mezzanotte e ridà tre vite, rivale e ronda rallentati, lo spawn verificato calpestabile, i muri a sagoma che tolgono i muri invisibili, le monete che escono solo dove si cammina, il crash iOS di fine partita, la partita nuova che non eredita meteo e difficoltà, le OPZIONI dalla pausa, gli avvisi meteo che si nascondono in pausa, il tasto pausa in alto a destra, la nuvoletta al 50%, la freccia con la coda più ciccia, i quattro lavori sul tutorial, le tre ombre della pensilina, la barbona rimessa nel verso giusto, la trombetta in cinque lingue, il CHIEDI che cambia lingua a partita in corso e la levetta che non salta più la carta di mezzo. Le sezioni delle versioni precedenti non sono state toccate: il file è cumulativo e il parser di MainMenu.gd inietta BBCode senza escape, quindi niente parentesi quadre — verificato che nella sezione nuova non ce ne sia nessuna, e che il diff sia 22 righe aggiunte e 0 rimosse. 📌 Restano fuori dalle note in-game due lavori grossi del delta, ed è voluto: SU-296 è un brainstorm chiuso con una decisione (LA FUMAROLA passa a «3 notti fuori») ma l'implementazione è nei ticket SU-310/311/312, quindi il giocatore non vede ancora niente; e tutto il filone store — TestFlight, ponte EOS Android a 16 KB, privacy policy, asset della scheda Play — è infrastruttura di distribuzione, non gioco. 📌 Entrano nello stesso commit i lavori rimasti sul disco senza mai essere committati: DISTRIBUZIONE_STORE.md (§6, §7.4, §7.5 e §7.6 riscritte), la skill di progetto arruola-tester con la riga che la annuncia in CLAUDE.md, tools/store/genera_asset_play.py e scripts/tools/shot_store_play.gd con i loro prodotti in STORE_ASSETS/google_play/ (icona 512, feature graphic 1024×500 e i dieci screenshot per tablet), e il version/code dei due preset Android da 26 a 27. ⚠️ Gli asset della scheda Play sono 15 MB di PNG come blob git normali.gitattributes manda in LFS solo sprites_raw/** e Sounds_raw/** — ed è una scelta esplicita di Ivan: la scheda resta archiviata esattamente com'è stata caricata, invece di essere solo rigenerabile. ⚠️ Restano fuori dal commit e è voluto: sprites_raw/barbone_colpito.png (raw LFS, non si committano), finale_check.log (scarto di lavorazione) e .claude/settings.local.json (configurazione locale della macchina).