[{"data":1,"prerenderedAt":1170},["ShallowReactive",2],{"docs-pages-it":3,"doc-it-changelog-skills":310},[4,9,15,20,25,30,35,41,52,60,69,77,85,93,97,106,110,118,123,128,133,139,144,149,154,159,164,170,175,180,185,190,195,200,205,210,215,220,225,230,235,240,245,250,255,261,266,270,275,280,285,290,295,300,305],{"path":5,"title":6,"description":7,"order":8,"group":8,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fpermissions","Chi può fare cosa","[object Object]",null,{"path":10,"title":11,"description":12,"order":13,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Finstallation","Installazione","Installa CloseYourIt sul tuo server con un solo comando.",1,"start",{"path":16,"title":17,"description":18,"order":19,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fsettings","Impostazioni","Ogni impostazione del file .env, a cosa serve e quali non vanno mai cambiate.",2,{"path":21,"title":22,"description":23,"order":24,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fdatabase","Database","Cos'è il database, cosa contiene, quanto restano i dati e quanto spazio occupa.",3,{"path":26,"title":27,"description":28,"order":29,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fupdates-and-backups","Aggiornamenti e backup","Aggiorna a una versione nuova, fai e ripristina il backup del database, controlla l'installazione.",4,{"path":31,"title":32,"description":33,"order":34,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Ftroubleshooting","Risolvere i problemi","Cosa controllare quando installazione, certificato, email o dati in arrivo non funzionano.",5,{"path":36,"title":37,"description":38,"order":39,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fconnect-your-apps","Collega le tue app","Tutti gli strumenti che mandano dati a CloseYourIt, e cosa raccoglie ognuno.",6,"connect",{"path":42,"title":43,"description":44,"order":45,"group":8,"parent":46,"package":47,"note":48,"collects":49,"status":8},"\u002Fdocs\u002Fsdk-ruby","Ruby \u002F Rails","La gemma closeyourit-ruby manda errori, log, query lente e metriche dei job da un'app Rails.",7,"connect-your-apps","closeyourit-ruby","Errori, log, query e metodi lenti, job in background.",{"errors":50,"logs":50,"performance":50,"visits":51,"servers":51},"full","none",{"path":53,"title":54,"description":55,"order":56,"group":8,"parent":46,"package":57,"note":58,"collects":59,"status":8},"\u002Fdocs\u002Fsdk-javascript","JavaScript","Il pacchetto @bussolabs\u002Fcloseyourit-js funziona nel browser e su Node 20.16 o più recente.",8,"@bussolabs\u002Fcloseyourit-js","Browser e Node, adattatori framework e query database dalla 0.13.0.",{"errors":50,"logs":50,"performance":50,"visits":50,"servers":51},{"path":61,"title":62,"description":63,"order":64,"group":8,"parent":46,"package":65,"note":66,"collects":67,"status":8},"\u002Fdocs\u002Fsdk-dart","Dart \u002F Flutter","Il pacchetto closeyourit cattura gli errori delle app Flutter, anche quando il telefono è senza rete.",9,"closeyourit","Errori, log e metriche pubblici dalla 0.9.3.",{"errors":50,"logs":68,"performance":68,"visits":51,"servers":51},"partial",{"path":70,"title":71,"description":72,"order":73,"group":8,"parent":46,"package":65,"note":74,"collects":75,"status":76},"\u002Fdocs\u002Fsdk-python","Python","Il pacchetto closeyourit manda errori, log e metriche da applicazioni Python lato server.",10,"Lato server. SQLAlchemy; query Django e FastAPI\u002FStarlette dalla 0.4.0.",{"errors":50,"logs":50,"performance":68,"visits":51,"servers":51},"pre_alpha",{"path":78,"title":79,"description":80,"order":81,"group":8,"parent":46,"package":82,"note":83,"collects":84,"status":8},"\u002Fdocs\u002Fsdk-sentry","SDK Sentry","Invia errori con un SDK Sentry compatibile; sessioni e crash hanno profili separati.",11,"Sentry SDK","Errori compatibili; sessioni e crash richiedono il profilo verificato.",{"errors":50,"logs":51,"performance":51,"visits":51,"servers":51},{"path":86,"title":87,"description":88,"order":89,"group":8,"parent":46,"package":90,"note":91,"collects":92,"status":8},"\u002Fdocs\u002Fagent-server","Agent per server","Un piccolo programma sul server che manda lo stato della macchina ogni 60 secondi.",12,"closeyourit-agent","CPU, memoria, dischi, rete, container e servizi.",{"errors":51,"logs":68,"performance":51,"visits":51,"servers":50},{"path":94,"title":95,"description":96,"order":89,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fnuxt","Vue e Nuxt","Collega gli errori del browser Nuxt e del server Nitro senza esporre un token segreto.",{"path":98,"title":99,"description":100,"order":101,"group":8,"parent":46,"package":102,"note":103,"collects":104,"status":105},"\u002Fdocs\u002Fagent-kubernetes","Kubernetes","Un osservatore in sola lettura del cluster: una copia sola per cluster.",13,"closeyourit-kube","Macchine, app ed eventi di errore del cluster.",{"errors":51,"logs":51,"performance":51,"visits":51,"servers":50},"coming",{"path":107,"title":108,"description":109,"order":101,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fopentelemetry","OpenTelemetry","Invia tracce, metriche e log dei server attraverso il ricevitore OTLP facoltativo.",{"path":111,"title":112,"description":113,"order":114,"group":8,"parent":46,"package":115,"note":116,"collects":117,"status":8},"\u002Fdocs\u002Fcli","CLI cyi","Il comando closeyourit, in breve cyi: gestisci progetti, errori e ticket dal terminale.",14,"@bussolabs\u002Fcloseyourit-cli","Non raccoglie dati: comanda CloseYourIt dal terminale.",{"errors":51,"logs":51,"performance":51,"visits":51,"servers":51},{"path":119,"title":120,"description":121,"order":122,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fhttp-api","API HTTP","Manda errori, log, metriche e visite con semplici richieste HTTP, senza un SDK.",15,{"path":124,"title":125,"description":126,"order":127,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fgithub-app","GitHub","Collega i repository GitHub a ticket e rilasci con una GitHub App tua.",16,{"path":129,"title":130,"description":131,"order":132,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fingest-gateway","Gateway di ingest","Tieni al sicuro errori, log e metriche in arrivo quando l'app è lenta o sta ripartendo.",17,{"path":134,"title":135,"description":136,"order":137,"group":138,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fai","AI","Accendi assistente, analisi, dettatura e ricerca intelligente con una chiave CloseYourIt AI o con il tuo provider.",18,"automation",{"path":140,"title":141,"description":142,"order":143,"group":138,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fautomator","Automator","Fai lavorare i ticket in automatico su una tua macchina Linux, con Claude Code, Codex o tutti e due.",19,{"path":145,"title":146,"description":147,"order":148,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fstack-coverage","Framework e copertura degli stack","Scegli un SDK pubblicato o verifica i limiti di un’integrazione provata localmente.",20,{"path":150,"title":151,"description":152,"order":153,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fmonitoring","Tracce, misure e sessioni","Esplora i nuovi segnali, confronta le versioni e ricostruisci le posizioni originali degli errori.",21,{"path":155,"title":156,"description":157,"order":158,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fnode-database","Database Node","Monitora query lente e ripetute con pg, mysql2, Drizzle e Prisma PostgreSQL.",22,{"path":160,"title":161,"description":162,"order":163,"group":138,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fclaude-code","Claude Code","CloseYourIt dentro Claude Code, in una colonna accanto alla conversazione con produzione e i tuoi ticket aperti.",23,{"path":165,"title":166,"description":167,"order":168,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Ftickets","Ticket e idee","Apri e segui i ticket sulla bacheca, raccoglili in milestone, fai domande e trasforma le idee votate in lavoro.",30,"use",{"path":171,"title":172,"description":173,"order":174,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Ferrors","Errori","Come gli errori delle tue app diventano righe uniche, e come risolverli, ignorarli, fonderli o trasformarli in ticket.",31,{"path":176,"title":177,"description":178,"order":179,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fperformance","Performance","Trova le query e i metodi lenti, leggi i problemi riconosciuti da soli e ricevi un avviso quando ne compare uno.",32,{"path":181,"title":182,"description":183,"order":184,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Flogs","Log","Cerca i messaggi delle tue app, segui una richiesta dall'inizio alla fine e collega un messaggio a un errore o a un ticket.",33,{"path":186,"title":187,"description":188,"order":189,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fsecrets","Segreti","Password, chiavi e file riservati in un posto solo, per progetto e ambiente, letti dall'app senza un .env sul disco.",34,{"path":191,"title":192,"description":193,"order":194,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fservers","Server","Lo stato delle tue macchine in una pagina, con lo storico e gli avvisi quando qualcosa si rompe o si sta riempiendo.",35,{"path":196,"title":197,"description":198,"order":199,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fuptime","Uptime","Controlla che i tuoi siti rispondano, tiene il conto dei guasti e li mostra ai clienti su una pagina di stato.",36,{"path":201,"title":202,"description":203,"order":204,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fcrons","Lavori programmati","Accorgersi quando un lavoro che deve partire da solo smette di partire, o parte e finisce male.",37,{"path":206,"title":207,"description":208,"order":209,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Falerts","Avvisi","Le regole che fanno nascere un avviso, il centro notifiche e dove ognuno sceglie di riceverli.",38,{"path":211,"title":212,"description":213,"order":214,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fhelpdesk","Assistenza","Chi visita il sito di un progetto scrive al team con il bottone «Serve aiuto?», e la richiesta arriva nel progetto giusto.",39,{"path":216,"title":217,"description":218,"order":219,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fanalytics","Statistiche del sito","Quante persone visitano il sito, cosa guardano e da dove arrivano, senza cookie.",40,{"path":221,"title":222,"description":223,"order":224,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Freplays","Session replay","Registra la navigazione di chi usa il sito e la riguardi come un video, anche accanto a un errore.",41,{"path":226,"title":227,"description":228,"order":229,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Freleases","Release","Le versioni che girano in ogni ambiente, legate ai tag di GitHub, e gli errori che tornano dopo una correzione.",42,{"path":231,"title":232,"description":233,"order":234,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fvulnerabilities","Vulnerabilità","I problemi di sicurezza noti nelle librerie dei tuoi progetti e i linguaggi che non ricevono più correzioni.",43,{"path":236,"title":237,"description":238,"order":239,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fseo","SEO","CloseYourIt visita i tuoi siti come un motore di ricerca e ti dice cosa impedisce alle pagine di essere trovate.",44,{"path":241,"title":242,"description":243,"order":244,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fknowledge","Knowledge base","Scrivi note, decisioni e guide dei progetti, ritrovale per significato e fai domande con le fonti.",45,{"path":246,"title":247,"description":248,"order":249,"group":169,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fagents","Agenti AI","Quali ticket prendono gli agenti, cosa ti consegnano, dove decidi tu e come si misura ogni macchina.",46,{"path":251,"title":252,"description":253,"order":254,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog","Versioni","Ogni sistema di CloseYourIt con la sua ultima versione, e le note di ogni rilascio.",50,{"path":256,"title":257,"description":258,"order":259,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-app","App","Tutte le versioni stabili di App, dalla più recente.",51,"changelog",{"path":262,"title":263,"description":264,"order":265,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-cli","Riga di comando (cyi)","Tutte le versioni stabili di Riga di comando (cyi), dalla più recente.",52,{"path":267,"title":141,"description":268,"order":269,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-automator","Tutte le versioni stabili di Automator, dalla più recente.",53,{"path":271,"title":272,"description":273,"order":274,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-agent-server","Agente per server","Tutte le versioni stabili di Agente per server, dalla più recente.",54,{"path":276,"title":277,"description":278,"order":279,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-agent-kubernetes","Agente Kubernetes","Tutte le versioni stabili di Agente Kubernetes, dalla più recente.",55,{"path":281,"title":282,"description":283,"order":284,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-sdk-javascript","SDK JavaScript","Tutte le versioni stabili di SDK JavaScript, dalla più recente.",56,{"path":286,"title":287,"description":288,"order":289,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-sdk-ruby","SDK Ruby","Tutte le versioni stabili di SDK Ruby, dalla più recente.",57,{"path":291,"title":292,"description":293,"order":294,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-sdk-python","SDK Python","Tutte le versioni stabili di SDK Python, dalla più recente.",58,{"path":296,"title":297,"description":298,"order":299,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-sdk-dart","SDK Dart","Tutte le versioni stabili di SDK Dart, dalla più recente.",59,{"path":301,"title":302,"description":303,"order":304,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-skills","Skill per assistenti AI","Tutte le versioni stabili di Skill per assistenti AI, dalla più recente.",60,{"path":306,"title":307,"description":308,"order":309,"group":8,"parent":260,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-site","Sito e documentazione","Tutte le versioni stabili di Sito e documentazione, dalla più recente.",61,{"id":311,"title":302,"body":312,"collects":8,"description":303,"extension":1164,"group":8,"meta":1165,"navigation":1166,"note":8,"order":304,"package":8,"parent":260,"path":301,"seo":1167,"status":8,"stem":1168,"__hash__":1169},"docs_it\u002Fdocs\u002Fchangelog-skills.md",{"type":313,"value":314,"toc":1132},"minimark",[315,320,327,337,341,346,354,358,362,370,374,378,392,396,400,414,418,482,486,490,504,508,512,520,524,528,536,540,544,552,556,560,568,572,577,585,589,593,601,605,609,617,621,625,644,648,656,661,669,673,681,685,689,701,705,709,725,729,733,757,761,765,773,777,781,789,793,797,805,809,817,821,829,833,847,851,873,877,881,889,893,901,905,909,917,921,971,975,979,987,991,996,1000,1004,1009,1013,1017,1025,1029,1034,1038,1042,1047,1051,1055,1067,1071,1075,1086,1090,1101,1105,1109,1123,1127],[316,317,319],"h2",{"id":318},"_0171-2026-10-08","0.17.1 · 2026-10-08",[321,322,323],"p",{},[324,325,326],"strong",{},"Corretto",[328,329,330],"ul",{},[331,332,333,336],"li",{},[324,334,335],{},"La colonna della mod si riempie subito."," Ogni sezione compare appena ha i suoi dati, invece di aspettare le altre. Mentre carica, la scritta è solo «Carico…». (CYSK-41)",[316,338,340],{"id":339},"_0170-2026-10-08","0.17.0 · 2026-10-08",[321,342,343],{},[324,344,345],{},"Aggiunto",[328,347,348],{},[331,349,350,353],{},[324,351,352],{},"Più CloseYourIt nella colonna della mod."," Mostra gli ultimi rilasci, gli errori più recenti da far analizzare a Claude, la scheda del ticket agganciato con i pulsanti per revisione e commento, e le tue cose da fare. (CYSK-41)",[316,355,357],{"id":356},"_0160-2026-10-08","0.16.0 · 2026-10-08",[321,359,360],{},[324,361,345],{},[328,363,364],{},[331,365,366,369],{},[324,367,368],{},"CloseYourIt dentro Claude Code."," Una nuova mod mostra in una colonna la produzione e i tuoi ticket aperti, aggancia un ticket alla sessione con \u002Fticket e blocca la lettura dei segreti. Si installa dal marketplace closeyourit. (CYSK-41)",[316,371,373],{"id":372},"_0151-2026-10-07","0.15.1 · 2026-10-07",[321,375,376],{},[324,377,326],{},[328,379,380,386],{},[331,381,382,385],{},[324,383,384],{},"Due rilasci ravvicinati non si fermano più sul CHANGELOG."," Le due nuove sezioni in cima restano entrambe, la più recente sopra, anche sulle macchine Linux con git meno recente. (CYAU-243, CYAU-246)",[331,387,388,391],{},[324,389,390],{},"La consegna dell'agente non viene più scartata come illeggibile."," Le istruzioni indicano il blocco di consegna, i file cambiati e la forma dei test che il server si aspetta. (CYAU-244, CYAU-245)",[316,393,395],{"id":394},"_0150-2026-10-07","0.15.0 · 2026-10-07",[321,397,398],{},[324,399,345],{},[328,401,402,408],{},[331,403,404,407],{},[324,405,406],{},"Il triage propone da 2 a 4 risposte e spiega quella consigliata."," Chi risponde vede perché una risposta è la preferita e sceglie con un clic. (CYRA-1033)",[331,409,410,413],{},[324,411,412],{},"I piani si leggono senza il codice davanti."," Ogni campo è in parole semplici: niente identificatori né formule, frasi corte, numeri in cifre. Sui ticket di bug la scheda apre con «cosa succede oggi». (CYAU-221)",[321,415,416],{},[324,417,326],{},[328,419,420,426,432,438,444,450,465,471,477],{},[331,421,422,425],{},[324,423,424],{},"Consegna e rilascio vanno solo dove devono."," La consegna spinge soltanto su origin, il rilascio accetta solo main come base, e del manifesto del plugin porta in produzione solo il numero di versione. (CYSK-40)",[331,427,428,431],{},[324,429,430],{},"Il ramo del ticket si allinea a main con una fusione vera."," Prima copiava i file di main e staging vedeva le stesse righe due volte, rifiutando il rilascio. Ora unisce origin\u002Fmain e in caso di conflitto si ferma elencando i file. (CYAU-241)",[331,433,434,437],{},[324,435,436],{},"Il triage legge le risposte quando riprende."," Non ripete più una domanda già chiusa e non scala dopo due giri a vuoto. (CYAU-239)",[331,439,440,443],{},[324,441,442],{},"La consegna non si dichiara già fatta se la revisione precedente ha chiesto modifiche."," (CYAU-236)",[331,445,446,449],{},[324,447,448],{},"La prova di accettazione usa il nome giusto del criterio."," L'agente copiava «id» dal piano invece di «criterion_id» e ogni consegna veniva scartata come illeggibile. (CYAU-233)",[331,451,452,455,456,460,461,464],{},[324,453,454],{},"Staging chiede la stessa intestazione del CHANGELOG della produzione."," Una sezione ",[457,458,459],"span",{},"Unreleased"," piena non basta più: serve la riga ## ",[457,462,463],{},"X.Y.Z",", così la produzione non si ferma. (CYAU-232)",[331,466,467,470],{},[324,468,469],{},"Il rilascio in produzione passa --cwd come vuole il guardrail."," Senza quel parametro ogni rilascio veniva rifiutato.",[331,472,473,476],{},[324,474,475],{},"Il commit salta i file finti che la sandbox monta nel worktree."," Su Linux git add si fermava e nessun lavoro diventava un commit.",[331,478,479],{},[324,480,481],{},"I comandi del controllo qualità restano dentro la sandbox.",[316,483,485],{"id":484},"_0140-2026-10-01","0.14.0 · 2026-10-01",[321,487,488],{},[324,489,345],{},[328,491,492,498],{},[331,493,494,497],{},[324,495,496],{},"Ogni decisione si legge in cinque secondi."," Piano e consegna portano una scheda breve: una frase su cosa si ottiene, fino a tre punti con etichette fisse e il livello di rischio sempre in vista. (CYRA-885)",[331,499,500,503],{},[324,501,502],{},"Domande con risposte pronte."," Quando il triage ha un dubbio propone due o tre risposte, una consigliata: chi risponde sceglie con un clic. (CYRA-887)",[316,505,507],{"id":506},"_0134-2026-09-29","0.13.4 · 2026-09-29",[321,509,510],{},[324,511,326],{},[328,513,514],{},[331,515,516,519],{},[324,517,518],{},"Il rilascio su staging elenca di nuovo i file che porta."," L'elenco usciva sempre vuoto perché il confronto partiva dal ramo principale già aggiornato. (CYRA-877)",[316,521,523],{"id":522},"_0133-2026-09-29","0.13.3 · 2026-09-29",[321,525,526],{},[324,527,326],{},[328,529,530],{},[331,531,532,535],{},[324,533,534],{},"La forma di rischi e deviazioni sta nelle istruzioni principali."," Il modello non sempre apre il riferimento con l'esempio: ora la regola è scritta dove la legge sempre. (CYRA-877)",[316,537,539],{"id":538},"_0132-2026-09-29","0.13.2 · 2026-09-29",[321,541,542],{},[324,543,326],{},[328,545,546],{},[331,547,548,551],{},[324,549,550],{},"La consegna non si perde più per una deviazione scritta male."," Le istruzioni mostrano com'è fatto un rischio e una deviazione: il modello li scriveva come frasi e la macchina scartava tutto il lavoro. (CYRA-876)",[316,553,555],{"id":554},"_0131-2026-09-14","0.13.1 · 2026-09-14",[321,557,558],{},[324,559,326],{},[328,561,562],{},[331,563,564,567],{},[324,565,566],{},"I controlli automatici tornano a girare su ogni proposta di modifica."," Le verifiche erano ferme e le modifiche passavano senza prova. Ora ogni proposta viene controllata prima di essere unita. (CITM-8)",[316,569,571],{"id":570},"_0130-2026-09-07","0.13.0 · 2026-09-07",[321,573,574],{},[324,575,576],{},"Modificato",[328,578,579],{},[331,580,581,584],{},[324,582,583],{},"Lo stato delle domande si legge in un posto solo (CYSK-36)."," Lo smistamento non rilegge più i\nvecchi messaggi nascosti nei commenti: lo chiede al sistema. Se non riesce a saperlo, aspetta e\ndice perché — non tira a indovinare.",[316,586,588],{"id":587},"_0122-2026-09-03","0.12.2 · 2026-09-03",[321,590,591],{},[324,592,326],{},[328,594,595],{},[331,596,597,600],{},[324,598,599],{},"Il rilascio di prova non cancella più le note già pubblicate."," Portava nel rilascio il file delle\nnovità com'era nella sua copia di lavoro, ferma a quando il lavoro è cominciato: tutto ciò che era\nstato pubblicato dopo spariva. Ora i due testi vengono uniti, e se hanno scritto sulle stesse righe\nil rilascio si ferma e dice come uscirne, invece di scegliere da solo cosa perdere.",[316,602,604],{"id":603},"_0121-2026-09-02","0.12.1 · 2026-09-02",[321,606,607],{},[324,608,326],{},[328,610,611],{},[331,612,613,616],{},[324,614,615],{},"Le sezioni fidate del dispacciamento si trovano (CYSK-34)",": piano approvato e numero di\nversione arrivano alla skill insieme al codice del ticket, ma le istruzioni li presentavano come\n«un codice ticket» e il modello dichiarava che mancavano. Ora stanno in un blocco proprio, con la\nregola di cercarli lì prima di fermarsi.",[316,618,620],{"id":619},"_0120-2026-09-02","0.12.0 · 2026-09-02",[321,622,623],{},[324,624,326],{},[328,626,627,638],{},[331,628,629,632,633,637],{},[324,630,631],{},"Il rilascio di prova si chiude anche al secondo giro (CYSK-34)",": la skill aspettava la CI\ndentro la sessione e finiva a vuoto; al riprovo controllava una proposta già unita, la leggeva\ncome «non lo so» e si fermava; e tagliava un secondo numero di prova per lo stesso lavoro. Ora\n",[634,635,636],"code",{},"release.sh"," decide per primo, una proposta unita è un esito riconosciuto, il numero già uscito\nsi ritrova anche sui commit successivi, e nessuna fase aspetta la CI.",[331,639,640,643],{},[324,641,642],{},"L'autopilot conosce tutti i valori ammessi (CYSK-34)",": le istruzioni elencano ogni categoria\ndi blocco e ogni stato di prova e di criterio, con l'alternativa da usare quando nessuno calza;\nuna prova rende rosso il bundle se un valore del contratto manca dal prompt o un esempio usa una\nchiave che il contratto non ha.",[321,645,646],{},[324,647,326],{},[328,649,650],{},[331,651,652,655],{},[324,653,654],{},"Le skill leggono il contratto invece di ricopiarlo (CYSK-33)",": gli stati finali e le regole dei\nchiarimenti erano copie a mano, e una era rimasta indietro — una risposta con uno stato che il\ncontratto non ammette valeva «si può lavorare». Ora il contratto è copiato con il suo sigillo e le\nprove lo leggono: se cambia, la CI lo dice.",[321,657,658],{},[324,659,660],{},"Sicurezza",[328,662,663],{},[331,664,665,668],{},[324,666,667],{},"I passi automatici della CI sono bloccati al contenuto esatto (CYSK-32)",": erano richiamati per\nnome di versione, che chi pubblica l'azione può spostare quando vuole. Ora ognuno è agganciato alla\nsua impronta, e una prova rende rosso qualunque passo aggiunto senza.",[321,670,671],{},[324,672,326],{},[328,674,675],{},[331,676,677,680],{},[324,678,679],{},"Il numero di versione dentro il pacchetto non può più restare indietro (CYSK-31)",": era fermo\na 0.9.0 mentre uscivano 0.10.0 e 0.11.0, quindi la pubblicazione si fermava e le macchine\nusavano skill vecchie. Ora il rilascio scrive il numero anche dentro il pacchetto, e si ferma\nprima di pubblicare se non corrisponde. I due tag restano non pubblicati.",[316,682,684],{"id":683},"_0110-2026-09-01","0.11.0 · 2026-09-01",[321,686,687],{},[324,688,345],{},[328,690,691],{},[331,692,693,696,697,700],{},[324,694,695],{},"deadcode-sweep (CYSK-30)",": la passata periodica che tiene aggiornata la mappa del codice\nmorto. Timer systemd utente (lunedì 03:00, disegno CYSK-22), strato A deterministico\n(fetch + scanner + estratto copertura) e strato B agente (claude headless che segue la skill\ndead-code e apre ticket deduplicati). Heartbeat su cron monitor SOLO a giro completo; un repo\nnon scansionato si dichiara. ",[634,698,699],{},"tools\u002Fdeadcode-sweep\u002F"," con installer idempotente.",[316,702,704],{"id":703},"_0100-2026-09-01","0.10.0 · 2026-09-01",[321,706,707],{},[324,708,345],{},[328,710,711],{},[331,712,713,716,717,720,721,724],{},[324,714,715],{},"plan (CYRA-702)",": il decision packet accetta ",[634,718,719],{},"decision_brief"," al top level — 3-6 frasi in\nitaliano semplice per chi approva dalla coda, senza path né gergo. Opzionale: i planner non\naggiornati consegnano senza. Regole ed esempio in ",[634,722,723],{},"skills\u002Fplan\u002Freferences\u002Fplan-quality.md",".",[316,726,728],{"id":727},"_090-2026-08-31","0.9.0 · 2026-08-31",[321,730,731],{},[324,732,345],{},[328,734,735],{},[331,736,737,740,741,744,745,748,749,752,753,756],{},[324,738,739],{},"dead-code (CYSK-28)",": la skill che mappa il codice che nessuno chiama in un repository Rails.\nScanner senza dipendenze (",[634,742,743],{},"skills\u002Fdead-code\u002Fscripts\u002Fdead_code_inventory.mjs","): censimento token su\ntutti i file tracciati (",[634,746,747],{},".erb"," compresi), famiglia convenzionale SOPPRESSA e contata (mai\ndeclassata), copertura con le tre condizioni di utilizzabilità e i rami mai presi discriminati\ndagli hit della condizione padre. Non decide, non scrive, non cancella. Vive nel plugin nuovo\n",[634,750,751],{},"closeyourit-analysis"," (",[634,754,755],{},".claude-plugin\u002Fmarketplace.json"," elenca i due plugin): il flusso ticket\nnon paga i suoi token.",[316,758,760],{"id":759},"_080-2026-08-28","0.8.0 · 2026-08-28",[321,762,763],{},[324,764,345],{},[328,766,767],{},[331,768,769,772],{},[324,770,771],{},"Prima di pianificare si guarda se è già fatto."," Chi scrive il piano cerca nel codice l'esito che il ticket chiede: se lo trova già presente non pianifica, consegna i file che lo provano e il ticket si chiude. Fatto a metà resta un piano normale, e nel dubbio si pianifica.",[316,774,776],{"id":775},"_070-2026-08-25","0.7.0 · 2026-08-25",[321,778,779],{},[324,780,576],{},[328,782,783],{},[331,784,785,788],{},[324,786,787],{},"Piani e consegne sono scritti per chi deve decidere."," Le procedure separano interventi, motivazioni, rischi, file, test e prove per criterio. Gli scenari diventano frasi leggibili e un blocco dichiara sempre causa, possibilità di riprovare e azione richiesta.",[316,790,792],{"id":791},"_060-2026-08-24","0.6.0 · 2026-08-24",[321,794,795],{},[324,796,345],{},[328,798,799],{},[331,800,801,804],{},[324,802,803],{},"Le prove di questo bundle girano anche sulle proposte, non solo al momento della pubblicazione."," Prima l'unico controllo partiva al tag, a lavoro già unito: una prova rotta usciva senza che niente fosse rosso, e chi rilascia leggeva quel silenzio come «qui i controlli non ci sono».",[321,806,807],{},[324,808,576],{},[328,810,811],{},[331,812,813,816],{},[324,814,815],{},"Lo stato di una domanda in attesa si chiede al sistema, non alla discussione."," Il cancello del triage leggeva un marcatore nascosto in fondo ai commenti e provava a indovinare: bastava che fosse il sistema stesso a scriverci una riga qualsiasi perché venisse scambiata per una risposta e il ticket ripartisse senza che nessuno avesse risposto. Adesso lo chiede a chi lo sa. La lettura dei commenti resta come ripiego e scatta solo se il comando non esiste; se lo stato non si riesce a leggere il cancello risponde «aspetta», mai «si può lavorare».",[321,818,819],{},[324,820,576],{},[328,822,823],{},[331,824,825,828],{},[324,826,827],{},"Il numero della versione si riceve, non si sceglie."," Le istruzioni dicevano di guardare l'ultimo numero uscito e decidere quale cifra cambiare: due lavorazioni dello stesso progetto potevano scegliere lo stesso nome, e la seconda lo scopriva solo pubblicando. Adesso il numero arriva insieme al lavoro, già completo del contatore per la versione di prova e del punto di codice per quella definitiva, e se non arriva la sessione si ferma invece di inventarne uno.",[321,830,831],{},[324,832,326],{},[328,834,835,841],{},[331,836,837,840],{},[324,838,839],{},"La pubblicazione manda fuori esattamente il punto che le viene consegnato, e non se lo sceglie più da sola."," L'ultimo passo — quello che mette una versione in mano alle persone — decideva da solo due cose che nessuno controllava. La prima: quale punto del lavoro pubblicare. Se non glielo si diceva prendeva «quello che c'è adesso in cima al lavoro condiviso»; ma fra la fine della prova in ambiente di collaudo e l'inizio della pubblicazione passano minuti o ore, e in mezzo può essere entrato il lavoro di altri ticket. Quel lavoro usciva in produzione senza che nessuno l'avesse provato né visto. La seconda: se il collaudo fosse andato bene. Bastava che la macchina lo scrivesse — non era un controllo, era una frase, e chi pubblicava non guardava niente. Ora la macchina non decide più niente qui: riceve il punto esatto sigillato quando la versione è stata chiusa e il numero di versione, e pubblica quello e solo quello. Se non li riceve non pubblica: si ferma, dice cosa manca e non finge di aver fatto. La frase «il collaudo è verde» non esiste più come permesso; al suo posto restano i controlli che girano davvero sulla versione pubblicata e che senza verde non fanno partire il rilascio. Prima di taggare verifica l'unica cosa verificabile sul posto — che il punto ricevuto faccia già parte del lavoro condiviso — e si ferma prima della parte irreversibile se non è così. Non pretende invece che ci sia sopra una versione di prova: su sei progetti su otto non ne viene mai tagliata una, e pretenderla vorrebbe dire che lì la produzione non parte più. Per chi usa il prodotto: una versione contiene esattamente quello che era stato sigillato, senza passeggeri arrivati all'ultimo minuto, e il lavoro arrivato tardi scivola nella versione successiva invece di uscire mezzo provato.",[331,842,843,846],{},[324,844,845],{},"Quando il lavoro di un ticket è già uscito, la scheda porta il numero e il punto di QUEL lavoro."," Capita spesso che un ticket venga ripreso quando il suo codice è già entrato nella linea principale — una lavorazione riavviata, un rilascio rifatto. In quel caso non c'è niente da unire e la macchina deve solo dire due cose: con quale numero quel lavoro è uscito, e in che punto è entrato. Sbagliava tutte e due. Il numero lo cercava come «l'ultima etichetta di prova da quel punto in avanti»: se dopo il tuo ticket ne era uscito un altro, restituiva il numero DELL'ALTRO — e quel numero finiva scritto sulla scheda e veniva poi passato al rilascio vero, che portava a tutti il lavoro di un ticket sotto il nome di un altro. Il punto era la punta del ramo di lavoro, che dentro la linea principale non esiste: chi leggeva la scheda non poteva andarlo a ricontrollare da nessuna parte. E il controllo «è già uscito?» veniva fatto sul ramo, non sul codice che avevi approvato, quindi rispondeva su qualcosa che poteva essersi mosso dopo. Ora la domanda è posta sul codice approvato; il punto riportato è quello in cui quel codice è entrato davvero nella linea principale, che si può aprire e guardare; il numero è quello che sta esattamente su quel punto, mai uno raccolto più avanti nella storia. Se un numero lì non c'è ancora e su quel prodotto un canale di prova esiste, viene creato — sul punto d'ingresso, mai sulla punta del ramo — partendo dal numero dichiarato per questo lavoro; dove un canale di prova non esiste non se ne inventa nessuno. In più l'anteprima ora si aggiorna prima di rispondere: prima decideva su una copia vecchia del progetto, quindi poteva dirti una cosa e l'esecuzione vera farne un'altra.",[321,848,849],{},[324,850,576],{},[328,852,853,863],{},[331,854,855,858,859,862],{},[324,856,857],{},"Si rilascia esattamente il codice che hai approvato, o non si rilascia niente."," Quando approvi il lavoro di un ticket guardi una versione precisa del codice. Da lì al rilascio possono passare minuti o ore — il ticket resta in coda finché una macchina libera non prende la fase — e in quella finestra il ramo di lavoro può muoversi: una sessione ripresa, una correzione fatta a mano, una riga corretta dal revisore direttamente sul sito. Niente lo impediva e niente lo segnalava. La macchina che unisce non chiedeva «qual è il codice approvato»: chiedeva «qual è il ramo» e univa quello che ci trovava sopra in quel momento, poi pubblicava e scriveva sul ticket che era fatto. Tutti i controlli restavano verdi, perché nessuno di essi confrontava il codice unito con quello approvato: sulla linea principale, e da lì in produzione, poteva entrare codice che nessuno aveva guardato. C'era anche il modo opposto di sbagliare: la macchina chiedeva al sito se il lavoro era a posto e poi univa la copia sul proprio disco, che non viene mai riallineata — così una correzione fatta dal revisore sul sito faceva arrivare il via libera e poi non veniva pubblicata, e la proposta restava aperta per sempre. Ora la macchina riceve la versione esatta approvata e senza quella non parte; prima di unire la confronta con la punta del ramo ",[324,860,861],{},"così come la vede il sito",", non con la copia sul disco; se coincidono unisce quella versione, non «il ramo»; se non coincidono non unisce, non pubblica e non scrive niente, e mostra le due versioni perché la decisione torni a te. Se non riesce a leggere lo stato del progetto non si dichiara bloccata e non ti chiama: resta dov'è e riprova. Lo stesso controllo vale per l'anteprima, così si ferma prima ancora di cominciare. Nel caso normale, quando il ramo è fermo dove l'hai approvato, per te non cambia niente.",[331,864,865,868,869,872],{},[324,866,867],{},"L'etichetta di prova si mette solo dove un canale di prova esiste davvero, e «provato» non si dichiara più: si guarda."," Per provare un lavoro prima di darlo a tutti, la macchina gli attaccava un'etichetta di prova, e la procedura diceva che quell'etichetta apre ovunque un canale riservato alle prove. Non era vero quasi mai. Su un prodotto solo l'etichetta faceva davvero quello che prometteva, e su un secondo apriva un canale beta. Su tutti gli altri faceva altro: sui pacchetti per JavaScript pubblicava a chiunque, come una versione normale; su quelli per Ruby e Flutter pubblicava il numero scritto dentro il progetto invece di quello dell'etichetta — di nuovo una pubblicazione a tutti; su Python non faceva assolutamente niente e non falliva, quindi sembrava riuscito; sul programma che gira sui server di controllo spostava il segnalibro «ultima versione», quello che tutte le macchine seguono, così un lavoro non ancora provato diventava la versione che tutti scaricano; sul contenitore delle istruzioni falliva e basta. E in ognuno di questi casi veniva poi scritto «rilasciato in prova», senza che nessuno avesse provato niente. Ora l'etichetta si mette solo sui due prodotti dove un canale di prova c'è: altrove il lavoro viene unito al ramo principale e nient'altro. E la macchina non dichiara più: va a guardare il controllo automatico partito su quel codice e riporta cosa ha visto, con quattro esiti distinti scritti sulla scheda. Se il controllo è finito bene ",[324,870,871],{},"e ha davvero eseguito qualcosa",", si va avanti ed è scritto quale controllo è stato guardato. Se è finito male, oppure è finito senza fare niente, la lavorazione si ferma e chiede a te — un controllo che non ha eseguito nulla è verde per costruzione, e prenderlo per buono è il modo più silenzioso di dichiarare provato ciò che nessuno ha provato. Se su quel prodotto un controllo non esiste, si va avanti ma è scritto a chiare lettere che una prova non c'era. Se la macchina non è riuscita a guardare perché il servizio non risponde, la lavorazione resta dov'è, lo dice, riprova da sola, e alla voce «cosa serve da te» scrive «niente»: non ti disturba per un guasto di rete. Per chi usa l'applicazione web non cambia nulla, lì la prova già funzionava. Cambia per chi installa i pacchetti, che smette di ricevere versioni non provate da nessuno; e cambia per chi approva, perché quando la scheda dice «provato» dietro c'è un controllo con un numero, che si può riaprire e guardare.",[316,874,876],{"id":875},"_050-2026-08-21","0.5.0 · 2026-08-21",[321,878,879],{},[324,880,345],{},[328,882,883],{},[331,884,885,888],{},[324,886,887],{},"Chi lavora un ticket dichiara sempre cosa ha trovato di sospetto, anche quando non ha trovato niente."," Se durante il lavoro la macchina si accorge di qualcosa di storto — uno script che va a leggere le password salvate sul computer, una chiave d'accesso scritta dentro un indirizzo — chi deve approvare lo vede in un riquadro rosso in cima al ticket, prima di tutto il resto. Le istruzioni non lo chiedevano da nessuna parte, quindi il riquadro non è mai comparso e l'anomalia, quando c'era, tornava dove stava prima: una frase in mezzo a duecentocinquanta parole, dentro una scheda che nessuno apre. Ora la dichiarazione è obbligatoria nelle istruzioni e compare dentro gli esempi che la macchina copia — che è la parte che conta davvero, perché fra una regola scritta a parole e un esempio che non la contiene vince l'esempio. Se non ha trovato niente lo dice lo stesso, con un elenco vuoto: «ho guardato e non ho trovato niente» è una risposta, e fino a ieri era indistinguibile dal non aver guardato. Non le si chiede di andare a cercare: solo di riferire quello che le è passato davanti.",[321,890,891],{},[324,892,576],{},[328,894,895],{},[331,896,897,900],{},[324,898,899],{},"Le procedure di rilascio dicono con precisione cos'è la sigla del codice rilasciato."," Il campo c'era già negli esempi, ma non era definito: «il commit» da solo lascia passare la punta del ramo, che al momento del rilascio può essere già un'altra cosa. Ora è scritto: è il commit su cui l'etichetta è stata creata, 40 caratteri esadecimali minuscoli, copiato dal blocco delle prove che la procedura stampa. Ed è scritto anche il contrario, che conta altrettanto: un rilascio che si è fermato NON deve portare quella sigla — non ha taggato niente, e pretenderla farebbe perdere l'unica cosa che conta lì, il motivo per cui si è fermato.",[316,902,904],{"id":903},"_040-2026-08-21","0.4.0 · 2026-08-21",[321,906,907],{},[324,908,576],{},[328,910,911],{},[331,912,913,916],{},[324,914,915],{},"Le proposte dell’Autopilot restano bozze finché i controlli non sono davvero verdi."," La procedura apre una\nPR draft — o riporta in draft quella già aperta — e verifica che punti al branch e al commit appena inviati.\nNon aspetta e non interpreta da sola la CI: passa l’indirizzo all’Automator, che attesta i check remoti e la\nrilettura indipendente prima di rendere la proposta pronta per una persona.",[321,918,919],{},[324,920,326],{},[328,922,923,929,935,941,947,953,959,965],{},[331,924,925,928],{},[324,926,927],{},"Nessuna fase finisce più in un discorso."," Quando una macchina finiva il proprio pezzo di lavoro, poteva chiudere scrivendo una frase invece di dichiarare come era andata. Il sistema quella frase non sa leggerla: la lavorazione restava scritta come in corso, non tornava in coda, non compariva fra quelle che aspettano una persona, e l'unica uscita era annullarla a mano. Ora tutte e cinque le procedure dichiarano sempre lo stato di uscita, e chi legge la lavagna vede il vero punto in cui si trova il lavoro.",[331,930,931,934],{},[324,932,933],{},"Quando il rilascio di prova non riesce a leggere i controlli, il sistema riprova invece di chiamarti."," «Non sono riuscito a guardare» non è «serve una persona»: se il servizio esterno non risponde, la cosa giusta è riprovare, e chiamare qualcuno per un servizio che tornerà su da solo lo abitua a ignorare le chiamate. La procedura lo diceva già, ma lo diceva con parole che il sistema non conosce — un nome di campo per un altro, e un valore che non esiste. Il messaggio veniva ignorato in silenzio, e un messaggio assente vale «serve una persona»: cioè esattamente il contrario. Ora le due parti usano le stesse parole, e c'è un controllo che se ne accorge se tornano a divergere.",[331,936,937,940],{},[324,938,939],{},"La voce di changelog si chiede al progetto, sul codice che si sta per rilasciare, e prima che parta qualcosa di irreversibile."," Per decidere se controllare che il diario delle modifiche avesse la riga della versione, la macchina guardava la cosa sbagliata: il tipo di progetto, non il progetto. Da lì nascevano due guasti, tutti e due veri. Un servizio interno del gruppo il diario non ce l'ha proprio: la macchina glielo chiedeva lo stesso e si fermava, quindi quel servizio non riusciva a uscire in produzione — mai — per una riga che nessuno gli ha mai chiesto. I siti, al contrario, il diario ce l'hanno ma alla macchina non risultavano del tipo giusto: non chiedeva niente, andava avanti e metteva il segno della versione. Quel segno non si toglie più. Subito dopo il controllo automatico leggeva il diario, la riga non c'era, e si fermava: in produzione non arrivava niente, ma la lavorazione aveva già detto «rilasciato». C'era anche il momento sbagliato: la domanda arrivava in fondo, quando l'unica cosa ancora possibile era chiamare una persona. Ora la macchina chiede la riga al progetto stesso, guardando il codice esatto che sta per rilasciare: se quel codice porta un diario la riga è obbligatoria, se non lo porta non chiede niente e lo scrive nel resoconto. E si ferma prima di fare qualsiasi cosa che non si possa disfare — nessun segno di versione, niente spinto sul ramo principale — dicendo quale riga manca, su quale codice, e con che parole scriverla. Nella fase di prova, dove la riga si può ancora scrivere da sola, la domanda arriva lì: così il rimedio non ha più bisogno di una persona. Cambia questo, per chi usa il prodotto: una versione o esce davvero, o si ferma prima con scritto cosa manca. Sparisce il caso peggiore, quello in cui il sistema dice «rilasciato» e in produzione non è arrivato niente.",[331,942,943,946],{},[324,944,945],{},"La forma cercata è ora esattamente quella che il controllo automatico pretende."," La macchina accettava anche un titolo scritto con qualche spazio di troppo, che il controllo automatico invece rifiuta: bastava quello per far passare un rilascio che poi si fermava a segno già messo. Ora la forma è la stessa, e nel dubbio è la macchina a essere più severa — al massimo ci si ferma prima, che è il verso giusto in cui sbagliare.",[331,948,949,952],{},[324,950,951],{},"Quando un rilascio si ferma, la spiegazione si legge."," I messaggi scritti su più righe uscivano schiacciati su una sola, con i segni di a capo stampati come lettere. Erano proprio i messaggi che devono dire cosa manca e come rimediare.",[331,954,955,958],{},[324,956,957],{},"La procedura di consegna non sposta più lo stato del ticket."," Quando la macchina finiva di scrivere il codice, era la procedura che segue a spostare il ticket su «Da revisionare», di sua iniziativa e prima che il sistema centrale avesse registrato niente. Un attimo dopo il sistema centrale spostava lo stesso ticket nello stesso punto: due padroni per la stessa casella. Il guaio si vedeva quando la consegna non arrivava a destinazione — se il resoconto finale della macchina veniva scartato, e capita, il ticket era già stato spostato: aprivi l'elenco di quello che c'è da revisionare, trovavi il ticket, e non c'era niente da guardare. Nessuna consegna registrata, nessun lavoro da approvare, un ticket che sembra pronto per te ed è fermo. C'era un secondo guaio, più raro e più caro: per spostare il ticket la procedura doveva prima capire da sola quale fosse lo stato «da revisionare» dell'organizzazione, e ne pretendeva esattamente uno; con due si fermava con un errore, e si fermava a codice già scritto e proposta di modifica già aperta — la consegna risultava fallita e tutto il lavoro veniva rifatto da capo. Ora la procedura fa solo il suo mestiere: manda il codice, apre la proposta, scrive la riga sul ticket. Lo stato lo decide un posto solo. Per chi usa il prodotto cambia questo: un ticket compare fra quelli «Da revisionare» soltanto quando c'è davvero qualcosa da revisionare, e non si perde più una lavorazione intera per il conto degli stati. Subito dopo arriva il divieto di spostare lo stato dai canali automatici: finché la procedura continuava a spostarlo per conto suo, quel divieto avrebbe rifiutato ogni consegna e fermato la coda su ogni ticket.",[331,960,961,964],{},[324,962,963],{},"Il controllo che protegge le skill non si fermava più al primo ostacolo."," Fra le skill era stata aggiunta una cartella di risorse condivise, che skill non è. Il controllo che verifica il contratto di ogni skill le passava in rassegna una per una, arrivava a quella cartella, cercava un documento che lì non c'è e si interrompeva — prima di aver verificato alcunché. Ora si guardano solo le cartelle che portano davvero il documento di una skill. Se a una skill vera quel documento sparisse, il controllo diventa rosso invece di ignorarla in silenzio.",[331,966,967,970],{},[324,968,969],{},"Il via libera al rilascio di prova non si dà più per approvazione, per silenzio o per assenza di controlli."," Prima di mandare una modifica sull'ambiente di prova, la macchina guarda se è sana. Diceva «sana» in tre casi in cui non lo sapeva. Primo: se una persona aveva cliccato «approvo», rilasciava senza nemmeno guardare i controlli automatici — e se erano rossi, il codice rotto andava in prova lo stesso. Approvare vuol dire «voglio questo lavoro», non «i controlli sono passati»: sono due cose diverse. Secondo: se GitHub non rispondeva per un minuto, non sapendo distinguere «non sono riuscito a guardare» da «ho guardato ed è rosso», la lavorazione si fermava e finiva fra le cose che aspettano una tua decisione — che non c'era, era un buco di rete. Terzo, il peggiore: si contavano i controlli andati male, e zero valeva verde. Ma zero è anche il numero dei controlli quando nessuno è partito, e quando su quel progetto controlli non esistono. «Nessuno ha guardato» diventava «hanno guardato tutti ed è a posto». Ora verde vuol dire verde: almeno un controllo dev'essere partito davvero ed essere riuscito. «Non sono riuscito a guardare» è una risposta a sé, e non chiede niente a nessuno: si riprova. E dove i controlli non esistono per davvero il rilascio parte lo stesso — bloccarlo fermerebbe progetti interi — ma il resoconto lo scrive: nessun controllo ha verificato questo codice.",[316,972,974],{"id":973},"_035-2026-08-09","0.3.5 · 2026-08-09",[321,976,977],{},[324,978,326],{},[328,980,981,984],{},[331,982,983],{},"Il controllo che decide se una versione può andare in produzione bocciava proprio i casi buoni: se la\nvoce di changelog c'era, il controllo falliva; se non c'era, falliva lo stesso. Il rilascio si fermava\nquindi sempre, con la spiegazione sbagliata — sembrava che la copia locale del progetto fosse indietro,\nmentre era il controllo a rispondere male. Più lungo il changelog, più l'errore era certo.",[331,985,986],{},"Un rilascio in produzione già avvenuto non riusciva più a essere riconosciuto. Se il resoconto veniva\nscartato più a valle, il passo ripartiva e si fermava perché la versione esisteva già: un rilascio\nriuscito risultava fallito per sempre. Ora viene riconosciuto, il numero di versione non viene mai\nspostato, e se punta a un contenuto diverso lo dice invece di aggiustare da sé.",[321,988,989],{},[324,990,576],{},[328,992,993],{},[331,994,995],{},"Anche il resoconto del rilascio in produzione porta ora le prove di quello che dichiara: quale commit,\nquale versione, quali file.",[316,997,999],{"id":998},"_034-2026-08-08","0.3.4 · 2026-08-08",[321,1001,1002],{},[324,1003,326],{},[328,1005,1006],{},[331,1007,1008],{},"Quando la voce di changelog arrivava in ritardo, su una lavorazione gia' rilasciata, il rilascio\nrestava spaccato in due: il tag che staging aveva verificato puntava a un commit, la voce che la\nproduzione pretende stava su un altro. Ora l'artefatto che porta la voce riceve il numero\nsuccessivo della stessa versione e viene verificato in staging prima di essere promosso. I tag\nesistenti non vengono mai spostati.",[316,1010,1012],{"id":1011},"_033-2026-08-08","0.3.3 · 2026-08-08",[321,1014,1015],{},[324,1016,326],{},[328,1018,1019,1022],{},[331,1020,1021],{},"Una lavorazione già rilasciata in staging non riusciva più a ripartire. Se il resoconto veniva\nscartato più a valle, il rilascio ripartiva da capo e si fermava dicendo che il lavoro \"non è\nrilasciabile\" — perché nel frattempo era stato unito davvero, e una richiesta di unione già chiusa\nrisulta non più unibile. Un rilascio riuscito sembrava così un fallimento, per sempre. Ora la\ndomanda la si fa al repository: se il lavoro è già dentro al ramo principale, il rilascio lo dice e\nsi chiude in pace.",[331,1023,1024],{},"La voce di changelog richiesta per andare in produzione non arrivava mai a destinazione.\nL'assistente doveva scriverla, ma non ha modo di consegnarla: gli strumenti per farlo gli sono\npreclusi, quindi la scriveva e restava lì. Due passi dopo la produzione si fermava su un controllo\nche a quel punto nessuno poteva più soddisfare. Ora è il rilascio a raccoglierla e portarla dentro,\nanche quando arriva in ritardo su una lavorazione già rilasciata.",[321,1026,1027],{},[324,1028,576],{},[328,1030,1031],{},[331,1032,1033],{},"Il resoconto dei due passi di rilascio ora porta le prove di quello che dichiara: quale commit,\nquali file rispetto al ramo principale, quale tag e come stavano i controlli. La revisione li\nbocciava, e a ragione: dicevano solo l'esito, e un rilascio è proprio il punto in cui un'affermazione\ndeve poter essere verificata.",[316,1035,1037],{"id":1036},"_032-2026-08-08","0.3.2 · 2026-08-08",[321,1039,1040],{},[324,1041,326],{},[328,1043,1044],{},[331,1045,1046],{},"Il rilascio in staging si fermava dicendo che mancava l'identità con cui firmare il commit di unione,\nanche su una macchina che quell'identità ce l'ha configurata e leggibile: dentro la cassaforte in cui\ngirano gli assistenti git non riesce a risolverla. Ora è il rilascio stesso a dichiarare chi sta\nfirmando — è l'automazione a creare quel commit, quindi si presenta con il proprio nome invece di\nprendere in prestito quello di chi possiede la macchina. Se chi lo avvia fornisce già un'identità,\nresta quella.",[316,1048,1050],{"id":1049},"_031-2026-08-08","0.3.1 · 2026-08-08",[321,1052,1053],{},[324,1054,326],{},[328,1056,1057,1064],{},[331,1058,1059,1060,1063],{},"Il rilascio in staging non riusciva su nessun progetto Rails. Per unire il lavoro approvato al ramo\nprincipale, il closer riportava prima l'area di lavoro allo stato del ramo principale; ma la cassaforte\nin cui girano gli assistenti protegge in sola lettura tutto ciò che si chiama \"config\" — nasce per i\nfile di configurazione di git e combacia per nome, quindi prendeva anche la cartella ",[634,1061,1062],{},"config\u002F","\ndell'applicazione. L'aggiornamento passava su tutti i file tranne quelli, si fermava a metà e lasciava\nl'area di lavoro in uno stato che non corrispondeva a nessun ramo, da cui l'assistente non poteva più\nuscire da solo. Ora l'unione viene costruita direttamente nell'archivio del repository, senza toccare\nnessun file su disco: niente da aggiornare, niente da proteggere, nessuna cartella lasciata a metà.",[331,1065,1066],{},"Se sulla macchina manca l'identità con cui firmare i commit, il rilascio lo dice subito e con parole\nchiare, invece di fallire più avanti con un messaggio di git che sembra parlare d'altro.",[316,1068,1070],{"id":1069},"_020-2026-08-07","0.2.0 · 2026-08-07",[321,1072,1073],{},[324,1074,326],{},[328,1076,1077,1080,1083],{},[331,1078,1079],{},"Riaprendo un ticket che aveva già completato e pubblicato in un giro precedente, l'assistente non\naveva modo di dirlo: il suo resoconto non rientrava in nessuna forma prevista e veniva scartato,\ncosì la lavorazione risultava non consegnata e il ticket tornava in coda per essere rifatto da\ncapo. Ora quel caso ha una risposta propria, che per essere accettata deve mostrare il lavoro già\npubblicato — non è una scorciatoia per non lavorare.",[331,1081,1082],{},"L'assistente che scrive il codice cercava il piano approvato dentro il ticket, dove non c'è mai\nstato: il piano vive altrove e nessun comando disponibile lo restituisce. Non trovandolo si\nfermava dichiarando che non era stato approvato — su ogni ticket, anche quando l'approvazione\nc'era. Ora il piano gli arriva insieme all'incarico, con le condizioni di completamento, e non\ngli viene più chiesto di verificare un'approvazione che la fase stessa implica.",[331,1084,1085],{},"La pubblicazione del ramo terminava in errore anche quando riusciva, e il lavoro finito veniva\nbuttato via con il codice già pubblicato. Chiedeva di annotare il ramo di riferimento in una\ncartella che l'assistente non può scrivere.",[321,1087,1088],{},[324,1089,345],{},[328,1091,1092,1095,1098],{},[331,1093,1094],{},"I testi lunghi che gli assistenti scrivono su un ticket seguono sempre le stesse etichette, così\nchi apre il ticket capisce in pochi secondi cosa è successo senza doverlo leggere tutto. Prima\narrivavano come muri di testo: le analisi riempivano sempre lo spazio fino all'ultimo carattere\ndisponibile, i resoconti erano lunghi il triplo del necessario.",[331,1096,1097],{},"Fra le etichette c'è \"Consigli\", dove finisce ciò che si è notato ma non riguarda quel ticket:\nsono le righe che diventeranno ticket nuovi, e per questo ognuna deve leggersi da sola.",[331,1099,1100],{},"Un controllo automatico esamina un testo prima che venga scritto sul ticket e segnala cosa non va:\netichette mancanti, periodi troppo lunghi, testo oltre la misura consigliata. Avvisa soltanto, non\nimpedisce nulla.",[316,1102,1104],{"id":1103},"_011-2026-07-30","0.1.1 · 2026-07-30",[321,1106,1107],{},[324,1108,326],{},[328,1110,1111,1114,1117,1120],{},[331,1112,1113],{},"Le istruzioni che gli assistenti seguono ora possono essere eseguite davvero. Erano scritte in\nuna forma che la rete di sicurezza rifiuta, quindi quasi nessun passo veniva compiuto e la\nlavorazione finiva senza consegnare nulla.",[331,1115,1116],{},"Le domande di chiarimento arrivano sul ticket: prima le scriveva l'assistente con un comando che\nnon poteva essere eseguito, e restavano solo nel registro interno.",[331,1118,1119],{},"L'assistente che implementa un ticket ora riesce a salvare il proprio lavoro: creare un commit\nera fra le operazioni rifiutate.",[331,1121,1122],{},"I file di appoggio della sessione non finiscono più dentro il lavoro consegnato.",[321,1124,1125],{},[324,1126,576],{},[328,1128,1129],{},[331,1130,1131],{},"Il risultato di ogni passo viene consegnato come ultimo messaggio della sessione, invece che\ntramite un comando.",{"title":1133,"searchDepth":19,"depth":19,"links":1134},"",[1135,1136,1137,1138,1139,1140,1141,1142,1143,1144,1145,1146,1147,1148,1149,1150,1151,1152,1153,1154,1155,1156,1157,1158,1159,1160,1161,1162,1163],{"id":318,"depth":19,"text":319},{"id":339,"depth":19,"text":340},{"id":356,"depth":19,"text":357},{"id":372,"depth":19,"text":373},{"id":394,"depth":19,"text":395},{"id":484,"depth":19,"text":485},{"id":506,"depth":19,"text":507},{"id":522,"depth":19,"text":523},{"id":538,"depth":19,"text":539},{"id":554,"depth":19,"text":555},{"id":570,"depth":19,"text":571},{"id":587,"depth":19,"text":588},{"id":603,"depth":19,"text":604},{"id":619,"depth":19,"text":620},{"id":683,"depth":19,"text":684},{"id":703,"depth":19,"text":704},{"id":727,"depth":19,"text":728},{"id":759,"depth":19,"text":760},{"id":775,"depth":19,"text":776},{"id":791,"depth":19,"text":792},{"id":875,"depth":19,"text":876},{"id":903,"depth":19,"text":904},{"id":973,"depth":19,"text":974},{"id":998,"depth":19,"text":999},{"id":1011,"depth":19,"text":1012},{"id":1036,"depth":19,"text":1037},{"id":1049,"depth":19,"text":1050},{"id":1069,"depth":19,"text":1070},{"id":1103,"depth":19,"text":1104},"md",{},true,{"title":302,"description":303},"docs\u002Fchangelog-skills","OpjrhrNcmBClBxP70VknOtZyf_OTFBIdQ6mdAH9ppU0",1791469655331]