[{"data":1,"prerenderedAt":4796},["ShallowReactive",2],{"docs-pages-it":3,"doc-it-changelog-cli":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":263,"body":312,"collects":8,"description":264,"extension":4790,"group":8,"meta":4791,"navigation":4792,"note":8,"order":265,"package":8,"parent":260,"path":262,"seo":4793,"status":8,"stem":4794,"__hash__":4795},"docs_it\u002Fdocs\u002Fchangelog-cli.md",{"type":313,"value":314,"toc":4712},"minimark",[315,320,327,337,341,346,367,371,375,383,387,391,411,415,426,430,435,460,464,468,479,483,488,507,511,515,544,548,568,572,576,587,591,595,621,625,629,641,645,649,694,698,703,707,711,722,726,730,741,745,749,786,790,794,802,806,810,824,828,839,843,847,855,859,880,884,888,900,904,908,939,943,947,955,959,963,1014,1018,1692,1695,1699,1723,1727,1731,1746,1750,1754,1811,1815,1819,1906,1910,2030,2034,2038,2058,2062,2079,2083,2087,2152,2156,2160,2193,2197,2201,2249,2253,2257,2277,2281,2285,2316,2320,2324,2339,2343,2347,2409,2413,2423,2427,2431,2473,2477,2482,2513,2517,2521,2574,2579,2593,2597,2601,2642,2646,2650,2688,2692,2696,2744,2748,2752,2768,2772,2776,2790,2794,2798,2816,2820,2824,2851,2855,2859,2871,2875,2879,2897,2901,2905,2943,2947,2951,2966,2970,2974,2988,2992,2996,3054,3058,3062,3107,3111,3115,3188,3193,3208,3212,3216,3234,3238,3242,3268,3272,3276,3359,3363,3367,3440,3444,3448,3483,3487,3491,3535,3539,3544,3612,3617,3640,3644,3722,3726,3730,3912,3916,3920,3968,3972,4001,4005,4009,4059,4063,4067,4133,4137,4141,4208,4212,4216,4240,4244,4248,4287,4292,4311,4315,4319,4364,4368,4372,4417,4421,4425,4457,4462,4467,4471,4475,4490,4494,4498,4506,4510,4514,4523,4527,4531,4590,4594,4611,4615,4619,4630,4634,4638,4667,4671,4676,4680,4684],[316,317,319],"h2",{"id":318},"_0341-2026-10-08","0.34.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],{},"L'avviso di aggiornamento arriva subito."," Ora segnala una nuova versione appena esce, senza aspettare 24 ore.",[316,338,340],{"id":339},"_0340-2026-10-08","0.34.0 · 2026-10-08",[321,342,343],{},[324,344,345],{},"Aggiunto",[328,347,348],{},[331,349,350,353,354,358,359,362,363,366],{},[324,351,352],{},"Solo i tuoi ticket ancora aperti."," ",[355,356,357],"code",{},"tickets list"," accetta ",[355,360,361],{},"--assignee me"," e ",[355,364,365],{},"--open",": mostra solo i ticket assegnati a te e non ancora conclusi.",[316,368,370],{"id":369},"_0331-2026-10-07","0.33.1 · 2026-10-07",[321,372,373],{},[324,374,326],{},[328,376,377],{},[331,378,379,382],{},[324,380,381],{},"L'avviso propone solo versioni installabili."," L'avviso di aggiornamento indica solo versioni uscite da almeno 24 ore, quelle che mise accetta di installare.",[316,384,386],{"id":385},"_0330-2026-10-07","0.33.0 · 2026-10-07",[321,388,389],{},[324,390,345],{},[328,392,393],{},[331,394,395,402,403,406,407,410],{},[324,396,397,398,401],{},"Avviso quando ",[355,399,400],{},"cyi"," è vecchia."," Una volta al giorno la CLI controlla se c'è una versione nuova e, se serve, stampa come aggiornarla. L'avviso esce su stderr, quindi ",[355,404,405],{},"--json"," resta pulito. In CI o con ",[355,408,409],{},"CLOSEYOURIT_NO_UPDATE_CHECK=1"," tace.",[321,412,413],{},[324,414,326],{},[328,416,417],{},[331,418,419,353,422,425],{},[324,420,421],{},"Mapping ProGuard fino a 8 MiB.",[355,423,424],{},"artifacts proguard-maps"," accetta file di mapping fino a 8 MiB.",[316,427,429],{"id":428},"_0321-2026-10-07","0.32.1 · 2026-10-07",[321,431,432],{},[324,433,434],{},"Sicurezza",[328,436,437],{},[331,438,439,353,442,362,445,448,449,452,453,452,456,459],{},[324,440,441],{},"Segreti che non toccano le variabili di sistema.",[355,443,444],{},"cyi run",[355,446,447],{},"cyi personal run"," ignorano i segreti chiamati come ",[355,450,451],{},"PATH",", ",[355,454,455],{},"NODE_OPTIONS",[355,457,458],{},"LD_*"," e simili, avvisandoti per nome. Il login apre il browser solo su un indirizzo https dello stesso server e su Windows non passa più dal prompt dei comandi. (CYCL-74)",[316,461,463],{"id":462},"_0320-2026-10-07","0.32.0 · 2026-10-07",[321,465,466],{},[324,467,345],{},[328,469,470],{},[331,471,472,353,475,478],{},[324,473,474],{},"Il tuo computer per i Puckies.",[355,476,477],{},"cyi puck connect"," collega questo computer a un Puck: ogni sua richiesta aspetta il tuo sì e può usare solo cartelle e comandi permessi. Ctrl+C lo scollega. (CYRA-1029)",[316,480,482],{"id":481},"_0310-2026-10-06","0.31.0 · 2026-10-06",[321,484,485],{},[324,486,487],{},"Modificato",[328,489,490],{},[331,491,492,495,496,498,499,502,503,506],{},[324,493,494],{},"Indirizzo predefinito app.closeyour.it."," Senza configurazione, ",[355,497,400],{}," si collega a ",[355,500,501],{},"https:\u002F\u002Fapp.closeyour.it",". Chi ha già salvato ",[355,504,505],{},"www.closeyour.it"," continua a funzionare. (CYRA-996)",[316,508,510],{"id":509},"_0300-2026-10-04","0.30.0 · 2026-10-04",[321,512,513],{},[324,514,345],{},[328,516,517,527,535],{},[331,518,519,522,523,526],{},[324,520,521],{},"Source map private dal terminale."," I comandi ",[355,524,525],{},"artifacts source-maps"," caricano, elencano, mostrano ed eliminano le mappe. Il caricamento estrae gli intervalli delle funzioni e rimuove il codice sorgente incorporato. (CYRA-955)",[331,528,529,522,532,534],{},[324,530,531],{},"Mapping ProGuard\u002FR8 con identità esplicita.",[355,533,424],{}," gestiscono mapping privati associati a release e debug ID, preservando i commenti necessari alla ricostruzione dello stack. (CYRA-956)",[331,536,537,522,540,543],{},[324,538,539],{},"Simboli nativi associati alla build.",[355,541,542],{},"artifacts native-symbols"," gestiscono file ELF, Mach-O, PE e PDB con architettura e identità esatte. I nuovi comandi richiedono le corrispondenti API e i servizi del backend. (CYRA-957)",[321,545,546],{},[324,547,434],{},[328,549,550,556,562],{},[331,551,552,555],{},[324,553,554],{},"Credenziali legate al server corretto."," Cambiare URL non inoltra il token salvato a un altro backend e un login fallito conserva la configurazione precedente. I download privati creano file accessibili solo al proprietario senza seguire collegamenti simbolici.",[331,557,558,561],{},[324,559,560],{},"Caricamenti limitati a file espliciti."," Gli artifact sono letti da un solo descrittore con limiti di dimensione; i sistemi senza apertura sicura rifiutano il caricamento. Contenuti sorgente, mapping e binari non vengono stampati.",[331,563,564,567],{},[324,565,566],{},"Dipendenze aggiornate."," Rimosse le dipendenze vulnerabili degli strumenti di sviluppo e aggiornati i pacchetti usati dalla CLI. Questi aggiornamenti non modificano i comandi esistenti.",[316,569,571],{"id":570},"_0295-2026-10-01","0.29.5 · 2026-10-01",[321,573,574],{},[324,575,487],{},[328,577,578],{},[331,579,580,583,584,586],{},[324,581,582],{},"Manutenzione interna."," Commenti e test sono in inglese e i controlli automatici girano senza cache condivisa. Per chi usa ",[355,585,400],{}," non cambia niente.",[316,588,590],{"id":589},"_0294-2026-09-23","0.29.4 · 2026-09-23",[321,592,593],{},[324,594,326],{},[328,596,597],{},[331,598,599,353,606,609,610,613,614,617,618,620],{},[324,600,601,602,605],{},"Gli argomenti dopo ",[355,603,604],{},"--"," arrivano intatti al comando lanciato.",[355,607,608],{},"cyi run -p KEY -e development -- bin\u002Frails server -p 3021"," non si ferma più su «spawn -p ENOENT»: anche ",[355,611,612],{},"-p"," ed ",[355,615,616],{},"-e"," scritti dopo ",[355,619,604],{}," restano del comando figlio. (CYCL-63)",[316,622,624],{"id":623},"_0293-2026-09-14","0.29.3 · 2026-09-14",[321,626,627],{},[324,628,326],{},[328,630,631],{},[331,632,633,636,637,640],{},[324,634,635],{},"La guida dei comandi di modifica dice cosa cambia davvero."," Testo di aiuto ed esempi di ",[355,638,639],{},"update"," chiariscono che vengono inviati solo i campi passati. Il difetto che azzerava gli altri campi stava nel server ed è corretto lì. (CYCL-62)",[316,642,644],{"id":643},"_0292-2026-09-09","0.29.2 · 2026-09-09",[321,646,647],{},[324,648,345],{},[328,650,651,685],{},[331,652,653,353,656,362,659,662,663,362,666,669,670,673,674,362,677,680,681,684],{},[324,654,655],{},"Monetizzazione, rischi e idee collegate dal terminale.",[355,657,658],{},"ideas create",[355,660,661],{},"ideas update"," accettano ",[355,664,665],{},"--monetization",[355,667,668],{},"--risks","; ",[355,671,672],{},"ideas create --evolves \u003Cid>"," propone un'evoluzione già collegata alla base; ",[355,675,676],{},"ideas link",[355,678,679],{},"ideas unlink"," collegano due idee. ",[355,682,683],{},"ideas show"," stampa tutto. (CYCL-61)",[331,686,687,693],{},[324,688,689,692],{},[355,690,691],{},"secrets set"," avvisa quando il valore è già in altri progetti."," Se lo stesso valore esiste in altri progetti dell'organizzazione, dopo il salvataggio la CLI stampa quanti sono e il link alla pagina del vault per portarlo tra i Secret dell'organizzazione. Mai i nomi dei progetti.",[321,695,696],{},[324,697,326],{},[328,699,700],{},[331,701,702],{},"Le 0.29.0 e 0.29.1 non sono uscite: prima un controllo della CI, poi la pubblicazione su npm che cercava un token invece di usare l'accesso fidato. Stesso contenuto, numero nuovo.",[316,704,706],{"id":705},"_0280-2026-09-06","0.28.0 · 2026-09-06",[321,708,709],{},[324,710,345],{},[328,712,713],{},[331,714,715,353,718,721],{},[324,716,717],{},"Le domande di un ticket si fanno e si rispondono dal terminale.",[355,719,720],{},"tickets questions"," le elenca, ne pone una (anche bloccante), risponde e ritira quelle rimaste senza risposta. Prima esistevano solo sul sito.",[316,723,725],{"id":724},"_0270-2026-09-03","0.27.0 · 2026-09-03",[321,727,728],{},[324,729,345],{},[328,731,732],{},[331,733,734,353,737,740],{},[324,735,736],{},"La ricerca della conoscenza può guardare anche fra le proposte.",[355,738,739],{},"kb search --status all"," include le pagine in attesa di revisione e quelle scartate, con lo stato in colonna. Senza il flag trova solo le accettate, come prima.",[316,742,744],{"id":743},"_0260-2026-09-03","0.26.0 · 2026-09-03",[321,746,747],{},[324,748,345],{},[328,750,751,760,769],{},[331,752,753,353,756,759],{},[324,754,755],{},"La salute della conoscenza si controlla con un comando.",[355,757,758],{},"kb doctor"," dice quali pagine nessuna ricerca troverà, quali collegamenti sono rimasti appesi e quali proposte sono ferme da settimane. Ogni verifica porta il passo sicuro da fare: il comando non cambia niente da solo.",[331,761,762,353,765,768],{},[324,763,764],{},"La conoscenza si legge da qualunque assistente.",[355,766,767],{},"cyi mcp"," la offre con il protocollo standard MCP: cercare, chiedere, leggere e proporre pagine senza istruzioni scritte su misura. Una proposta entra sempre in revisione, e i limiti restano quelli del proprio accesso.",[331,770,771,353,774,777,778,781,782,785],{},[324,772,773],{},"La conoscenza del progetto si legge senza chiederla.",[355,775,776],{},"kb context"," stampa l'elenco corto delle pagine del progetto della cartella corrente, riconosciuto dal remote git. Con ",[355,779,780],{},"--quiet"," non disturba mai: fuori da un progetto tace, se il servizio non risponde scrive una riga. ",[355,783,784],{},"KB_CONTEXT_DISABLE=1"," lo spegne.",[316,787,789],{"id":788},"_0251-2026-09-03","0.25.1 · 2026-09-03",[321,791,792],{},[324,793,326],{},[328,795,796],{},[331,797,798,801],{},[324,799,800],{},"Creando un ticket, un guasto nella stampa non lo fa più sembrare mai nato."," Se qualcosa andava storto dopo la creazione, il comando usciva in errore senza nominarlo: chi leggeva lo ricreava, e così è nato un doppione. Ora il codice del ticket esce comunque, insieme al motivo del guasto.",[316,803,805],{"id":804},"_0250-2026-09-03","0.25.0 · 2026-09-03",[321,807,808],{},[324,809,345],{},[328,811,812],{},[331,813,814,353,817,362,820,823],{},[324,815,816],{},"Accettare e scartare le pagine di conoscenza dal terminale.",[355,818,819],{},"kb approve",[355,821,822],{},"kb reject"," chiudono la revisione di una pagina proposta senza aprire il sito. Restano decisioni di una persona: un accesso automatico viene rifiutato.",[321,825,826],{},[324,827,326],{},[328,829,830],{},[331,831,832,835,836,838],{},[324,833,834],{},"Il rifiuto del revisore automatico dice tutto quello che c'è da correggere."," Prima si leggeva una riga sola; ora compaiono tutte le regole violate, il formato riconosciuto, il titolo suggerito e l'eventuale doppione. Con ",[355,837,405],{}," i dettagli sono nella busta dell'errore.",[316,840,842],{"id":841},"_0242-2026-09-02","0.24.2 · 2026-09-02",[321,844,845],{},[324,846,434],{},[328,848,849],{},[331,850,851,854],{},[324,852,853],{},"I passi automatici della pubblicazione sono bloccati sul contenuto verificato."," Erano richiamati per nome di versione: chi controlla quel nome poteva spostarlo su codice diverso e la nostra pubblicazione lo avrebbe eseguito. Ora ognuno è bloccato sulla sua impronta esatta, e un controllo ferma chi torna indietro.",[321,856,857],{},[324,858,326],{},[328,860,861,874],{},[331,862,863,870,871,873],{},[324,864,865,866,869],{},"Le azioni pericolose si confermano con ",[355,867,868],{},"--yes","."," Importare o cancellare segreti, eliminare un progetto e le altre azioni che il server considera pericolose si fermavano con un errore che chiedeva una conferma impossibile da dare. Ora ogni comando accetta ",[355,872,868],{},"; senza, l'errore spiega cosa aggiungere.",[331,875,876,879],{},[324,877,878],{},"Ogni gruppo di comandi dice a cosa serve."," Nell'aiuto e nel catalogo pubblicato trentacinque gruppi apparivano senza una riga che li spiega: avvisi, ambienti, membri, ruoli, team, monitor e gli altri ora ce l'hanno. Un controllo automatico ferma un gruppo nuovo che nasce muto.",[316,881,883],{"id":882},"_0241-2026-08-31","0.24.1 · 2026-08-31",[321,885,886],{},[324,887,326],{},[328,889,890],{},[331,891,892,895,896,899],{},[324,893,894],{},"Il comando della copertura ora c'è davvero."," Una regola troppo larga sull'elenco dei file da\nignorare aveva escluso dal rilascio proprio il comando ",[355,897,898],{},"coverage show",": la 0.24.0 esiste come\netichetta ma non è mai stata pubblicata. La regola ora ignora solo la cartella dei report.",[316,901,903],{"id":902},"_0240-2026-08-31","0.24.0 · 2026-08-31",[321,905,906],{},[324,907,345],{},[328,909,910,918,930],{},[331,911,912,917],{},[324,913,914,916],{},[355,915,898],{},": la copertura pubblicata dalla CI si legge senza rigirare le prove."," Per ogni ramo del progetto vedi l'ultima fotografia: righe e rami percorsi, file mai caricati, quando è stata presa. È il dato su cui si decide se fidarsi della misura.",[331,919,920,929],{},[324,921,922,362,925,928],{},[355,923,924],{},"usage list",[355,926,927],{},"usage reporters",": cosa viene davvero usato, e chi lo sta dicendo."," Il primo elenca le parti del prodotto viste in esecuzione; il secondo dice quale applicazione sta mandando il dato e da quando — la differenza fra «mai chiamata» e «nessuno ancora misura».",[331,931,932,938],{},[324,933,934,937],{},[355,935,936],{},"tickets clarifications",": lo stato di una domanda in attesa lo dice il sistema."," Prima quello stato viveva nel testo della discussione, e chi lo leggeva doveva indovinarlo: 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 c'è un comando che lo chiede a chi lo sa: quanti giri sono stati fatti, se è arrivata una risposta, e cosa è stato chiesto in ognuno.",[316,940,942],{"id":941},"_0231-2026-08-21","0.23.1 · 2026-08-21",[321,944,945],{},[324,946,326],{},[328,948,949],{},[331,950,951,954],{},[324,952,953],{},"Il controllo che confronta il numero del rilascio col numero dentro il pacchetto non dà più la colpa alla cosa sbagliata."," Prima di pubblicare, il sistema verifica che l'etichetta della versione e il numero scritto dentro il pacchetto coincidano. Quel controllo gira per primo, apposta, così se qualcosa non torna te ne accorgi in pochi secondi invece che a lavoro finito. Ma leggeva il numero con uno strumento che a quel punto non è ancora disponibile: non trovandolo, leggeva «niente» e concludeva che il pacchetto avesse il numero sbagliato. Il messaggio mandava a cercare il guasto dalla parte sbagliata — «il pacchetto dice , il rilascio dice 0.23.0» — mentre il pacchetto era a posto e mancava lo strumento. Ora il numero si legge senza dipendere da niente, e se proprio non si riesce a leggerlo il sistema lo dice con quelle parole invece di inventare un colpevole. La 0.23.0 esiste come etichetta ma non è mai stata pubblicata: si è fermata su questo controllo.",[316,956,958],{"id":957},"_0230-2026-08-21","0.23.0 · 2026-08-21",[321,960,961],{},[324,962,326],{},[328,964,965,971,996],{},[331,966,967,970],{},[324,968,969],{},"Togliere un prerequisito senza nominarlo non cancella più quello che non puoi vedere."," Se un prerequisito sta in un prodotto che il tuo accesso non vede, il comando ne dice l'esistenza ma non il nome. Quel nome mancante valeva però come nome vuoto: lanciando il comando di rimozione con un prerequisito vuoto, veniva tolto proprio quello nascosto — cioè l'unico di cui non ti saresti accorto. Ora un prerequisito senza nome viene rifiutato prima di toccare qualsiasi cosa, e un nome mancante non combacia più con niente. Vale anche per l'aggiunta, che nello stesso caso diceva «già presente» e usciva bene su un errore vero.",[331,972,973,976,977,980,981,983,984,986,987,989,990,992,993,995],{},[324,974,975],{},"Un nome o un'email si ritrovano anche nelle organizzazioni grandi"," (CYCL-42): quando si indica",[978,979],"br",{},"un team per nome o una persona per email, il comando andava a cercarli in un elenco che il server",[978,982],{},"consegna dieci righe per volta — e leggeva solo la prima. L'undicesimo team e l'undicesima persona",[978,985],{},"risultavano «non trovati» pur esistendo, e chi ha più di dieci colleghi non poteva aggiungerli a",[978,988],{},"un'attività scrivendone l'email. Ora l'elenco viene letto tutto. E quando è un permesso a mancare,",[978,991],{},"il rifiuto dice cosa fare — indicare il codice identificativo invece del nome — invece del solo",[978,994],{},"«Permesso negato», che sembrava riguardare l'attività e non l'elenco letto per comodità.",[331,997,998,1001,1002,1004,1005,1007,1008,1010,1011,1013],{},[324,999,1000],{},"Il numero del rilascio e quello dentro il pacchetto non possono più divergere"," — non li",[978,1003],{},"confrontava nessuno: il rilascio poteva chiamarsi in un modo e pubblicare un altro numero, senza",[978,1006],{},"che nulla diventasse rosso. E se quel numero era già uscito, il magazzino rifiutava il rilascio",[978,1009],{},"buono lasciando il lavoro a metà. Adesso il rilascio si ferma prima di pubblicare, e dice quale",[978,1012],{},"dei due va aggiornato.",[321,1015,1016],{},[324,1017,345],{},[328,1019,1020,1026,1126,1250,1312,1367,1474,1563,1644],{},[331,1021,1022,1025],{},[324,1023,1024],{},"I prerequisiti fra ticket si scrivono, si rileggono e si tolgono dal terminale."," L'ordine del lavoro lo decidi tu approvando il piano: dici quale ticket viene prima e quale dopo, e finché il primo non è concluso il secondo non parte. Finora l'unico modo di trasferire quell'ordine nel sistema era aprire la pagina di un ticket, scegliere il prerequisito da un menu e premere Aggiungi — un legame, un giro completo di pagina. Per il piano di questo giro vuol dire cinquantacinque volte. E c'era di peggio: quel menu propone solo ticket dello stesso prodotto, mentre dodici di quei cinquantacinque legami uniscono due prodotti diversi. Il sistema li accetta senza problemi, è la pagina che non li propone: dalla pagina, dodici legami su cinquantacinque non si potevano proprio scrivere. Mancava anche il terzo pezzo, rileggere: il terminale sapeva dire che un ticket è bloccato, ma non da chi, quindi dopo cinquantacinque giri a mano non c'era modo di ricontrollare quello che avevi scritto. Ora dal terminale si elencano, si aggiungono e si tolgono. I cinquantacinque legami diventano un file di cinquantacinque righe che parte in un colpo solo, e rilanciarlo è sicuro: un legame già scritto non viene raddoppiato e non fa fallire il lancio, il comando dice che c'era già e va avanti — mentre una riga davvero sbagliata si ferma, dice quale e perché, e non porta giù le altre. I legami fra prodotti diversi diventano possibili nominando il prerequisito col suo codice. Rileggendo vedi codice, titolo e se è già concluso; e se un prerequisito sta in un prodotto che il tuo accesso non vede, il comando dice che c'è e se è concluso ma non ne rivela nome e titolo, esattamente come fa già la pagina. Per chi lavora dalla pagina web non cambia niente.",[331,1027,1028,1031,1032,1034,1035,1037,1038,1040,1041,1043,1044,1047,1048,1050,1051,1054,1055,1057,1058,1060,1061,1063,1064,1066,1067,1069,1072,1073,1075,1076,1078,1079,1082,1083,1085,1086,1088,1089,1092,1093,1095,1096,1098,1099,1101,1102,1104,1105,1107,1108,1110,1111,1113,1114,1116,1117,1119,1120,1122,1123,1125],{},[324,1029,1030],{},"Un account di servizio si guarda e si corregge senza doverlo rifare"," (CYCL-46): dalla riga di",[978,1033],{},"comando si potevano solo creare, elencare ed eliminare gli accessi automatici; per cambiare in",[978,1036],{},"quali ambienti uno di essi può leggere i segreti, o anche solo per sapere quali chiavi aveva",[978,1039],{},"ancora in mano, bisognava aprire il sito — oppure cancellarlo e rifarlo, che significa spegnere",[978,1042],{},"tutto quello che lo stava usando. Ora ",[355,1045,1046],{},"service-accounts show \u003Cid>"," mostra chi è, quante chiavi ha",[978,1049],{},"attive e il confine dei suoi ambienti, e ",[355,1052,1053],{},"service-accounts tokens list \u003Cid>"," elenca le sue chiavi",[978,1056],{},"una per una dicendo quali funzionano ancora e quali sono state ritirate, con l'ultima volta che",[978,1059],{},"sono state usate. Il valore di una chiave non ricompare mai: si vede solo l'inizio, quello che",[978,1062],{},"serve a riconoscerla, e viene tolto anche dalla risposta per le macchine — una chiave si mostra",[978,1065],{},"una volta sola, quando nasce.",[978,1068],{},[355,1070,1071],{},"service-accounts update \u003Cid> --secret-environment staging"," cambia il confine senza toccare",[978,1074],{},"nient'altro. Qui c'era una trappola che il comando adesso disinnesca: un elenco vuoto di ambienti",[978,1077],{},"non vuol dire «nessun ambiente», vuol dire ",[324,1080,1081],{},"tutti",". Quindi un ",[355,1084,639],{}," senza indicazioni non",[978,1087],{},"parte affatto, e per togliere davvero la restrizione bisogna dirlo con ",[355,1090,1091],{},"--all-environments",": così",[978,1094],{},"nessuno allarga un accesso credendo di non aver cambiato niente. E siccome il server accetta",[978,1097],{},"soltanto i codici degli ambienti che esistono davvero e scarta gli altri in silenzio, un ambiente",[978,1100],{},"scritto male lascerebbe l'account senza confine, cioè libero ovunque: ora il comando controlla i",[978,1103],{},"nomi prima di scrivere e si ferma elencando quelli buoni, senza aver toccato niente. Il controllo",[978,1106],{},"prima non basta da solo — leggere l'elenco degli ambienti richiede un permesso che chi gestisce gli",[978,1109],{},"accessi può non avere, e un ambiente può sparire nel frattempo — quindi resta anche quello dopo: il",[978,1112],{},"comando confronta ciò che ha chiesto con ciò che è stato applicato, in tutti e due i versi (un",[978,1115],{},"ambiente sparito, o uno comparso che nessuno aveva chiesto), scrive quale confine è in vigore",[978,1118],{},"adesso ed esce con errore se non sono la stessa cosa. Progetti, gruppi e ruoli restano fuori: il",[978,1121],{},"server li cambia con scritture separate, e un permesso applicato a metà sarebbe peggio di nessun",[978,1124],{},"cambiamento.",[331,1127,1128,1131,1133,1134,1136,1137,1139,1140,1143,1144,1146,1147,1150,1151,1153,1154,1156,1157,1159,1160,1162,1163,1166,1167,1169,1170,1172,1173,1176,1177,1179,1180,1182,1183,1186,1187,1189,1190,1192,1193,1196,1197,1199,1202,1203,1205,1206,1209,1210,1212,1213,1215,1216,1218,1219,1222,1223,1225,1226,1229,1230,1233,1234,1236,1237,1239,1240,1242,1243,1246,1247,1249],{},[324,1129,1130],{},"Dopo un rilascio rumoroso gli errori si ripuliscono dal terminale, non uno alla volta",[978,1132],{},"(CYCL-44): quando un rilascio sbagliato produce trenta gruppi d'errore quasi identici, dalla riga",[978,1135],{},"di comando si poteva solo chiuderli a uno a uno, e i duplicati restavano lì perché fonderli si",[978,1138],{},"poteva soltanto dal sito. Ora ",[355,1141,1142],{},"errors bulk-triage"," chiude, silenzia o riapre tutti i gruppi",[978,1145],{},"indicati in un colpo, e ",[355,1148,1149],{},"metrics bulk-triage"," fa lo stesso con le query e i metodi lenti. Se il",[978,1152],{},"server non restituisce tutti i gruppi chiesti — un identificativo di un altro progetto viene",[978,1155],{},"scartato senza dire niente — il comando elenca quelli rimasti fuori ed esce con errore, invece di",[978,1158],{},"far credere che siano stati sistemati tutti; gli altri restano cambiati, perché disfare la parte",[978,1161],{},"riuscita sarebbe peggio, ma nessuno se lo sente dire a cose fatte. ",[355,1164,1165],{},"errors merge"," fonde i",[978,1168],{},"duplicati dentro un gruppo che tiene tutto: le occorrenze si spostano, i conteggi si sommano, i",[978,1171],{},"gruppi assorbiti spariscono. È irreversibile e chiede ",[355,1174,1175],{},"--confirm","; gli identificativi partono",[978,1178],{},"esattamente come sono stati scritti, così basta che uno non sia di quel progetto perché la",[978,1181],{},"fusione non parta affatto e nessun gruppo resti modificato a metà. ",[355,1184,1185],{},"errors split"," fa il gesto",[978,1188],{},"opposto — stacca alcune occorrenze in un gruppo nuovo, con la stessa regola del tutto-o-niente —",[978,1191],{},"ed ",[355,1194,1195],{},"errors delete --confirm"," cancella per sempre un gruppo con tutte le sue occorrenze.",[978,1198],{},[355,1200,1201],{},"errors assign"," mette l'errore nelle mani di una persona, indicata per email o per",[978,1204],{},"identificativo, e ",[355,1207,1208],{},"--unassign"," lo lascia a nessuno: se quella persona non fa parte",[978,1211],{},"dell'organizzazione il server rifiuta in silenzio e lascia l'errore senza nessuno, quindi il",[978,1214],{},"comando controlla la risposta e lo dice invece di annunciare un'assegnazione mai avvenuta.",[978,1217],{},"Infine ",[355,1220,1221],{},"errors grouping-rules"," porta sul terminale le regole con cui un progetto piega il",[978,1224],{},"raggruppamento automatico: ",[355,1227,1228],{},"list"," le mostra nell'ordine in cui vengono applicate, ",[355,1231,1232],{},"create"," ne",[978,1235],{},"aggiunge una (quale campo guardare, come confrontarlo, sotto quale chiave far confluire ciò che",[978,1238],{},"combacia), ",[355,1241,639],{}," la corregge o la spegne senza cancellarla, ",[355,1244,1245],{},"delete --confirm"," la toglie",[978,1248],{},"lasciando dov'erano i gruppi che aveva già formato.",[331,1251,1252,1255,1256,1258,1259,1261,1262,1264,1265,1268,1269,1271,1272,1274,1275,1277,1278,1280,1281,1283,1284,1287,1288,1290,1293,1294,1296,1297,1299,1300,1302,1303,1305,1306,1308,1309,1311],{},[324,1253,1254],{},"Le richieste di modifica ai segreti si decidono dal terminale"," (CYCL-40): quando un segreto vive",[978,1257],{},"in un ambiente protetto, la modifica non parte da sola — resta in attesa che una seconda persona la",[978,1260],{},"guardi. Quella coda esisteva già, ma si poteva leggere e decidere soltanto dal sito: per approvare",[978,1263],{},"una riga bisognava interrompere il lavoro e aprire il browser. Ora ",[355,1266,1267],{},"vault requests list"," mostra",[978,1270],{},"tutto quello che aspetta, su tutti i progetti che si vedono — chi ha chiesto cosa, su quale",[978,1273],{},"progetto e quale ambiente, se è una modifica o una cancellazione, e da quando è lì. Il valore",[978,1276],{},"proposto non compare mai, né a schermo né in ",[355,1279,405],{},": una richiesta si giudica dal nome e",[978,1282],{},"dall'intento, mai leggendo il segreto. ",[355,1285,1286],{},"vault requests approve \u003Cid>"," applica la modifica,",[978,1289],{},[355,1291,1292],{},"vault requests reject \u003Cid> --reason \"...\""," la congela senza toccare niente nel vault. Il motivo",[978,1295],{},"del rifiuto è obbligatorio e non può essere fatto di soli spazi: il rifiuto chiude la pratica per",[978,1298],{},"sempre, e a chi aveva chiesto resta solo quella frase per capire cosa correggere. I quattro modi in",[978,1301],{},"cui una decisione può essere respinta non si assomigliano più: la propria richiesta non si approva",[978,1304],{},"da soli e il comando dice di passarla a un collega; una chiave di servizio non decide mai al posto",[978,1307],{},"di una persona e il comando dice di usare il proprio accesso; una richiesta già decisa da qualcun",[978,1310],{},"altro rimanda a rivedere la coda; un motivo vuoto viene fermato prima ancora di partire.",[331,1313,1314,1317,1319,1320,1322,1323,1325,1326,1328,1329,1331,1332,1334,1335,1337,1338,1341,1342,1345,1346,1348,1349,1351,1352,1354,1355,1357,1358,1360,1361,1363,1364,1366],{},[324,1315,1316],{},"Dal terminale si vede quale contesto è stato davvero consegnato alla presa in carico",[978,1318],{},"(CYCL-47): il sistema fotografa i riferimenti e le procedure dati a chi prende in carico un",[978,1321],{},"ticket, ma finora quella fotografia si poteva leggere solo dal sito — dalla riga di comando si",[978,1324],{},"vedeva la configurazione di oggi, che nel frattempo può essere cambiata, e un controllo finiva per",[978,1327],{},"giudicare il lavoro con istruzioni che al momento del lavoro non c'erano. Ora `tickets",[978,1330],{},"work-context DRFL-3 -p acme-api` mostra la copia congelata: quando è stata scattata, a chi, con",[978,1333],{},"quale firma, e l'elenco dei riferimenti e delle procedure di allora. Il comando non ripiega mai",[978,1336],{},"sulla configurazione corrente — se serve quella, resta ",[355,1339,1340],{},"guidance show",". Con ",[355,1343,1344],{},"--full"," stampa anche",[978,1347],{},"il testo integrale delle istruzioni congelate; ",[355,1350,405],{}," lo restituisce sempre per intero. La",[978,1353],{},"fotografia la scatta soltanto la presa in carico automatica, quella in cui una macchina pesca il",[978,1356],{},"ticket dalla coda: un ticket preso in carico a mano non ne ha una, e il comando lo dice con",[978,1359],{},"parole sue invece di rispondere «non trovato», che farebbe pensare a un ticket sbagliato. La",[978,1362],{},"lettura resta materiale di controllo: senza quel permesso il comando lo scrive a chiare lettere",[978,1365],{},"invece di limitarsi a «permesso negato».",[331,1368,1369,1370,1372,1373,1375,1376,1378,1379,358,1382,452,1385,362,1388,1391,1392,1394,1395,1397,1398,1400,1401,1403,1404,1407,1408,1410,1411,1414,1415,1417,1418,1420,1421,1424,1425,1427,1428,1430,1431,1434,1435,1437,1438,1440,1441,1443,1444,1447,1448,1450,1451,1453,1454,1457,1458,1460,1461,1464,1465,1467,1470,1471,1473],{},"**Una pagina di conoscenza tiene insieme tutti i suoi ambiti, i suoi tag e i suoi allegati anche",[978,1371],{},"dal terminale** (CYCL-45): una procedura che vale per tre progetti, o per un intero gruppo, dalla",[978,1374],{},"riga di comando nasceva legata a uno solo — gli altri collegamenti si aggiungevano poi dal sito, a",[978,1377],{},"mano. Ora ",[355,1380,1381],{},"kb create",[355,1383,1384],{},"--project",[355,1386,1387],{},"--group",[355,1389,1390],{},"--tag"," ripetuti quante volte servono, così",[978,1393],{},"la pagina nasce già completa: `kb create -p acme-api -p billing --group Piattaforma --tag deploy",[978,1396],{},"--title \"Rollback\" --body-file .\u002Fnota.md`. Una pagina che segue un gruppo intero può ora nascere",[978,1399],{},"senza nominare alcun progetto: basta il gruppo, e i progetti che ci entreranno domani se la",[978,1402],{},"troveranno collegata. Lo stesso vale per ",[355,1405,1406],{},"kb update",", con una regola che vale la pena conoscere:",[978,1409],{},"indicare progetti, gruppi o tag ",[324,1412,1413],{},"sostituisce"," l'elenco con quello che si scrive, mentre non",[978,1416],{},"indicarli lascia tutto com'era — correggere una virgola nel testo non scollega più niente, e per",[978,1419],{},"togliere i tag c'è la forma esplicita ",[355,1422,1423],{},"--tag \"\"",". Vale anche al contrario: cambiare i soli",[978,1426],{},"collegamenti o i soli tag non riscrive il testo, quindi non cancella la modifica di chi stava",[978,1429],{},"scrivendo nello stesso momento. ",[355,1432,1433],{},"kb show"," di conseguenza non",[978,1436],{},"mostra più solo il primo progetto: elenca tutti gli ambiti della pagina e i suoi tag. I file",[978,1439],{},"allegati, che finora si potevano gestire solo dal sito, hanno i loro quattro comandi: `kb",[978,1442],{},"attachments",[355,1445,1446],{},"li elenca tutti — non i primi cento — dicendo anche quali sono script,","kb attach",[978,1449],{},"--file .\u002Frollback.sh` ne carica uno o più in una volta sola (se un percorso è sbagliato non ne",[978,1452],{},"carica nessuno), ",[355,1455,1456],{},"kb attachment-download"," li salva sul disco, sempre dentro la cartella che si è",[978,1459],{},"scelta, e ",[355,1462,1463],{},"kb detach --confirm"," li elimina. Infine",[978,1466],{},[355,1468,1469],{},"--author-origin"," dichiara chi ha scritto davvero il testo — l'assistente o la skill — che non è",[978,1472],{},"la persona a cui appartiene la chiave usata per scrivere.",[331,1475,1476,1479,1480,1482,1483,1485,1486,1488,1489,1491,1492,1494,1495,1497,1498,1501,1502,1505,1506,1508,1509,1512,1513,1515,1516,1519,1520,1175,1522,1525,1526,1528,1529,1531,1532,1534,1535,1538,1539,1541,1542,1544,1545,1547,1548,1550,1551,1553,1554,1556,1557,1559,1560,1562],{},[324,1477,1478],{},"L'assistente e «chiedi ai ticket» si usano dal terminale"," (CYCL-43): la parte server c'era già",[978,1481],{},"da tempo, ma dalla riga di comando non si poteva né parlare con l'assistente né interrogare i",[978,1484],{},"ticket a parole — per farlo serviva scrivere un programma apposta. Ora `assistant ask \"quanti",[978,1487],{},"ticket aperti ha acme-api?\"` pone la domanda e aspetta la risposta, che arriva insieme all'elenco",[978,1490],{},"degli strumenti che l'assistente ha consultato: si vede su cosa si fonda invece di crederci sulla",[978,1493],{},"parola. Il filo del discorso non si perde: il comando stampa l'identificativo della conversazione",[978,1496],{},"e ",[355,1499,1500],{},"--conversation \u003Cid>"," continua a chiedere lì dentro. ",[355,1503,1504],{},"assistant conversations list"," mostra le",[978,1507],{},"conversazioni con l'attività più recente in cima, ",[355,1510,1511],{},"assistant conversations show"," le rilegge per",[978,1514],{},"intero, ",[355,1517,1518],{},"assistant conversations create"," ne apre una vuota e `assistant conversations delete",[978,1521],{},[355,1523,1524],{},"la cancella per sempre, domande e risposte comprese.","tickets ask \"cosa manca al",[978,1527],{},"prossimo rilascio?\"` fa lo stesso sui ticket visibili — tutti i progetti insieme, senza indicarne",[978,1530],{},"uno — e cita quelli su cui la risposta si appoggia. L'attesa non è mai infinita e non martella il",[978,1533],{},"server: le richieste si diradano man mano, e allo scadere di ",[355,1536,1537],{},"--timeout"," (tre minuti se non si",[978,1540],{},"dice altro) il comando si ferma spiegando dove ritrovare la risposta rimasta indietro: per",[978,1543],{},"l'assistente basta rileggere la conversazione, per i ticket serve rifare la domanda dandole più",[978,1546],{},"tempo, perché ripeterla subito ne farebbe partire una seconda invece di raccogliere la prima. Quando invece la risposta non arriverà, il",[978,1549],{},"messaggio distingue i tre casi che chiedono reazioni diverse: il servizio non è collegato — e",[978,1552],{},"finché qualcuno non lo collega non cambierà niente —, la domanda non è stata capita e va",[978,1555],{},"riformulata, oppure è un intoppo momentaneo e conviene riprovare. Con ",[355,1558,405],{}," restano nel",[978,1561],{},"risultato lo stato, le fonti, gli strumenti usati e l'eventuale errore.",[331,1564,1565,1568,1569,1571,1572,1574,1575,1578,1579,1581,1582,1584,1587,1588,1590,1591,1594,1595,1597,1600,1601,1603,1604,1606,1607,1610,1611,1613,1614,1616,1617,1620,1621,1624,1625,1627,1628,1630,1631,1634,1635,1637,1638,1640,1641,1643],{},[324,1566,1567],{},"Il carico di lavoro si gestisce dal terminale"," (CYCL-42): le attività non tecniche di un team",[978,1570],{},"— una fiera, un incontro, la preparazione del materiale — si potevano registrare solo dal sito,",[978,1573],{},"benché la parte server per la riga di comando ci fosse già. Ora ",[355,1576,1577],{},"workload list"," mostra quelle dei",[978,1580],{},"team di cui si fa parte, con stato, persone coinvolte, date e l'eventuale ticket collegato, e",[978,1583],{},[355,1585,1586],{},"workload show"," apre la singola attività con i nomi dei partecipanti. `workload create --team",[978,1589],{},"Marketing --title \"Fiera di Rimini\"",[355,1592,1593],{},"la crea,","workload update` ne cambia solo i campi indicati e",[978,1596],{},[355,1598,1599],{},"workload delete --confirm"," la toglie — la conferma è obbligatoria perché non si torna indietro, e",[978,1602],{},"un ticket già collegato sopravvive perdendo solo il collegamento. Le persone si gestiscono una per",[978,1605],{},"una con ",[355,1608,1609],{},"workload participant add|remove",", indicandole per email: chi non è nel team viene",[978,1612],{},"rifiutato con un messaggio, non aggiunto a metà. Un ticket esistente si lega scrivendolo come lo si",[978,1615],{},"legge (",[355,1618,1619],{},"--ticket DRFL-3",") invece di andarne a cercare il codice interno, e ",[355,1622,1623],{},"--ticket \"\""," lo",[978,1626],{},"scollega; se il ticket indicato non è visibile, il comando lo dice invece di lasciar credere che il",[978,1629],{},"legame ci sia. Infine ",[355,1632,1633],{},"workload promote \u003Cattività> --project acme-api"," genera il ticket vero e",[978,1636],{},"proprio a partire dall'attività e lo collega. Le attività di un team a cui non si appartiene",[978,1639],{},"restano invisibili: il server risponde «non esiste», e il comando riporta quella risposta tale e",[978,1642],{},"quale.",[331,1645,1646,1649,1650,1652,1653,1655,1656,1659,1660,1662,1663,1665,1666,1669,1670,1672,1673,1675,1676,1679,1680,1682,1683,1685,1686,1688,1689,1691],{},[324,1647,1648],{},"Le variabili segrete condivise si gestiscono dal terminale"," (CYCL-41): si potevano già",[978,1651],{},"impostare dal sito, e la parte server per la riga di comando c'era da tempo, ma il comando non",[978,1654],{},"esisteva: chi lavora dal terminale doveva aprire il browser. Ora ",[355,1657,1658],{},"shared list"," elenca le variabili",[978,1661],{},"dell'organizzazione — nome, descrizione, ultimo aggiornamento — pescando tutte le pagine, non solo",[978,1664],{},"la prima, e senza mostrare mai i valori. ",[355,1667,1668],{},"shared set -e production NOME=valore"," ne imposta una su",[978,1671],{},"un ambiente, e i progetti a cui è stata delegata su quell'ambiente leggono subito il nuovo valore;",[978,1674],{},"la conferma dice nome e ambiente, mai il valore. ",[355,1677,1678],{},"shared delete NOME --confirm"," la toglie: qui la",[978,1681],{},"conferma è obbligatoria perché non esiste una cancellazione «solo su produzione» — la variabile",[978,1684],{},"sparisce da tutti gli ambienti in un colpo solo, e sia il rifiuto senza conferma sia il messaggio",[978,1687],{},"finale lo dicono a chiare lettere. Un ambiente scritto male o un permesso mancante fanno arrivare",[978,1690],{},"intero il messaggio del server invece di un errore generico.",[321,1693,1694],{},"||||||| 336e656",[321,1696,1697],{},[324,1698,434],{},[328,1700,1701],{},[331,1702,1703,1706,1707,1709,1710,1712,1713,1715,1716,1718,1719,1722],{},[324,1704,1705],{},"Solo versioni definitive arrivano a chi installa lo strumento"," — chi lo installa senza chiedere",[978,1708],{},"un numero preciso riceve quella che il magazzino pubblico segna come «l'ultima buona». Finora",[978,1711],{},"bastava un'etichetta di prova per far partire la pubblicazione vera: il commento sopra al lavoro",[978,1714],{},"diceva «solo versioni definitive», la regola scritta accettava qualunque etichetta che cominciasse",[978,1717],{},"per ",[355,1720,1721],{},"v",". Non è mai successo solo perché i rilasci li ha fatti una persona a mano.",[316,1724,1726],{"id":1725},"_0220-2026-08-16","0.22.0 · 2026-08-16",[321,1728,1729],{},[324,1730,345],{},[328,1732,1733],{},[331,1734,1735,1738,1739,1742,1743,1745],{},[324,1736,1737],{},"La scheda di un sito sotto controllo SEO si apre dal terminale"," (CYCL-36): i siti si potevano\nelencare, dichiarare, modificare e togliere, ma non guardare uno per uno: per sapere com'era\nmesso un sito bisognava leggerne la riga in tabella e poi indovinare il resto. Ora\n",[355,1740,1741],{},"seo-sites show \u003Cid>"," risponde in un colpo solo alle quattro domande che contano: com'è\nconfigurato (indirizzo, ogni quanto si controlla, quante pagine visita, quando tocca di nuovo),\nquanti problemi ha aperti, com'è andato l'ultimo giro e quanto è veloce. I blocchi che il server\nnon manda non compaiono affatto — né come intestazione vuota, che si leggerebbe come «qui non c'è\nniente», né come riga vuota in mezzo alle impostazioni. Se il server aggiunge un\nblocco nuovo, il comando lo mostra lo stesso invece di buttarlo via, e ",[355,1744,405],{}," resta quello che\narriva dal server, parola per parola. Il comando parla con la parte server introdotta da\nCYRA-541: senza quella, risponde con l'errore del server.",[316,1747,1749],{"id":1748},"_0210-2026-08-15","0.21.0 · 2026-08-15",[321,1751,1752],{},[324,1753,345],{},[328,1755,1756,1778],{},[331,1757,1758,1761,1762,1765,1766,1769,1770,1773,1774,1777],{},[324,1759,1760],{},"Una fonte di conoscenza si pubblica dal terminale e si può ripubblicare"," (CYCL-8): per tenere\naggiornata una pagina da un'automazione bisognava prima cercarla, poi decidere se crearla o\nmodificarla, e un tentativo interrotto a metà lasciava doppioni. Ora ",[355,1763,1764],{},"kb publish"," fa tutto in un\ncolpo solo: si dà un nome stabile alla fonte con ",[355,1767,1768],{},"--publication-key",", e da lì in poi lo stesso\ncomando ripetuto atterra sempre sulla stessa pagina. La risposta dice se la pagina è nata adesso\no è stata aggiornata, così chi lancia il comando lo sa senza andare a controllare. Il testo si\npassa con ",[355,1771,1772],{},"--body"," o si legge da un file con ",[355,1775,1776],{},"--body-file",": uno dei due, mai nessuno e mai\nentrambi. Chi non indica il tipo non lo cambia — una guida resta una guida — e una pagina nuova\nnasce come nota. Un nome di fonte scritto male, un titolo o un testo troppo lunghi vengono\nrespinti prima di partire, dicendo cosa non va. Se il server è più vecchio di questa funzione il\ncomando lo dice apertamente, invece di far sembrare sparito il progetto.",[331,1779,1780,1783,1784,1787,1788,1790,1791,1794,1795,1798,1799,1802,1803,1806,1807,1810],{},[324,1781,1782],{},"I book della base di conoscenza si guidano dal terminale"," (CYCL-7): i comandi che le\nautomazioni chiamavano non esistevano, quindi un book si poteva leggere e comporre solo dal sito.\nOra ",[355,1785,1786],{},"kb book list"," elenca i book dei progetti che vedi — con l'id già in tabella, così da lì si\npassa direttamente agli altri due — e si restringe con ",[355,1789,1384],{}," o cercando nel titolo con\n",[355,1792,1793],{},"--q",". ",[355,1796,1797],{},"kb book show"," apre il sommario: ogni pagina con la sua posizione, che parte da 0.\n",[355,1800,1801],{},"kb book add-page"," mette una pagina nel sommario, in fondo oppure al posto indicato da\n",[355,1804,1805],{},"--position",", che conta come il sommario stesso: ",[355,1808,1809],{},"0"," è la cima. Ripetere lo stesso comando non elenca mai la stessa pagina due\nvolte, quindi un'automazione che non sa se il tentativo precedente è andato a buon fine può\nrilanciarlo senza rovinare l'indice. Un numero di pagina o una posizione senza senso vengono\nrespinti subito, con scritto cosa non va, invece di partire e riportare dati plausibili ma\nsbagliati.",[316,1812,1814],{"id":1813},"_0200-2026-08-15","0.20.0 · 2026-08-15",[321,1816,1817],{},[324,1818,345],{},[328,1820,1821,1865,1878],{},[331,1822,1823,1826,1827,1830,1831,452,1834,1837,1838,1841,1842,1844,1845,1848,1849,1852,1853,1856,1857,1860,1861,1864],{},[324,1824,1825],{},"Il controllo SEO dei siti si guida da terminale"," (CYRA-528): ",[355,1828,1829],{},"seo list"," elenca i problemi\ntrovati su tutti i siti visibili — il più grave in cima — e stampa l'id, così da lì si passa\ndirettamente a ",[355,1832,1833],{},"seo ignore",[355,1835,1836],{},"seo reopen"," o ",[355,1839,1840],{},"seo promote"," senza rileggere con ",[355,1843,405],{},".\n",[355,1846,1847],{},"seo show"," apre la prova in un blocco a sé: quale indirizzo, cosa c'era, cosa ci doveva essere.\n",[355,1850,1851],{},"seo pages"," mostra com'è messa ogni pagina visitata e dice ",[355,1854,1855],{},"missing"," dove manca il titolo\nprincipale. I siti si governano con ",[355,1858,1859],{},"seo-sites list|create|update|delete",", e ",[355,1862,1863],{},"seo rescan --site","\nfa ripartire il controllo subito invece di aspettare il giro programmato. Un sito il cui ultimo\ngiro è fallito non mostra la data come se fosse andato bene: dice che è fallito e perché.",[331,1866,1867,1873,1874,1877],{},[324,1868,1869,1872],{},[355,1870,1871],{},"--event-type"," accetta il nuovo avviso SEO",": ",[355,1875,1876],{},"seo_issue_new"," era già valido sul server e la\nCLI lo avrebbe rifiutato, come era successo con gli altri tipi aggiunti dopo l'elenco.",[331,1879,1880,1883,1884,1887,1888,1890,1891,1893,1894,1897,1898,1901,1902,1905],{},[324,1881,1882],{},"Il resoconto di una lavorazione si scrive dal terminale"," (CYCL-31): il testo lungo di fine\nlavorazione non aveva posto dove stare — il commento si ferma a 240 caratteri e il rifiuto\nrimandava a un campo che dal terminale non esisteva, quindi il resoconto andava riscritto a mano\ndal sito oppure non veniva scritto. Ora ",[355,1885,1886],{},"tickets report"," lo salva per intero, passandolo con\n",[355,1889,1772],{}," o leggendolo da un file con ",[355,1892,1776],{},". Ogni scrittura aggiunge una versione e non\ncancella la precedente: ",[355,1895,1896],{},"tickets report-show"," mostra quella corrente (o una passata, con\n",[355,1899,1900],{},"--version","), ",[355,1903,1904],{},"tickets report-versions"," elenca la cronologia dalla più recente. Riscrivere lo\nstesso identico testo non crea una versione in più, quindi ripetere il comando non sporca la\ncronologia. E il commento troppo lungo non rimanda più a un posto che dal terminale non esiste:\nil rifiuto stampa il comando pronto da eseguire, col ticket e il progetto già scritti dentro.",[321,1907,1908],{},[324,1909,326],{},[328,1911,1912,1947,1957,1974,2004],{},[331,1913,1914,1917,1918,1837,1921,452,1924,1927,1928,362,1931,1934,1935,1938,1939,1942,1943,1946],{},[324,1915,1916],{},"Aprire un ticket non chiede più due codici che l'aiuto dava per facoltativi"," (CYCL-34): stato e\npriorità comparivano fra parentesi quadre, cioè come se si potessero omettere, ma senza di loro la\ncreazione veniva rifiutata con un messaggio che parlava di dati inesistenti; per farla passare\nbisognava prima elencare stato e priorità con due comandi a parte e ricopiare due codici lunghi.\nOra chi non li indica ottiene comunque il ticket, aperto e a priorità media, e chi li vuole\ndiversi li scrive come li legge: ",[355,1919,1920],{},"--status in_progress",[355,1922,1923],{},"--status \"In Progress\"",[355,1925,1926],{},"--priority High",". Un codice continua a funzionare dov'era, e i vecchi ",[355,1929,1930],{},"--status-id",[355,1932,1933],{},"--priority-id"," restano\nvalidi, quindi gli script già scritti non vanno toccati. Lo stesso vale quando si cambia il\nticket (",[355,1936,1937],{},"tickets update","), quando se ne cambia solo lo stato (",[355,1940,1941],{},"tickets status",") e quando nasce da\nun'idea (",[355,1944,1945],{},"ideas convert","). Se il nome scritto non esiste, il comando si ferma prima di creare\nqualcosa ed elenca i nomi buoni, così non serve un secondo comando per scoprirli.",[331,1948,1949,1952,1953,1956],{},[324,1950,1951],{},"Quanto può essere lungo un testo si legge prima di scriverlo"," (CYCL-32): i limiti di lunghezza\nsi scoprivano solo sbagliando — l'aiuto dei comandi non li nominava e il rifiuto arrivava a testo\ngià scritto, uno per volta: si accorciava il corpo della pagina, si riprovava, e solo allora\nusciva che era troppo lunga anche la parte tecnica. Ora ogni campo con un tetto lo dichiara nel\nproprio aiuto (",[355,1954,1955],{},"--help","): corpo di una pagina o descrizione di un ticket 4000 caratteri, parte\ntecnica e analisi tecnica 1500, titolo 255, nota di revisione e commento 240, resoconto di\nlavorazione 20000. E il controllo avviene prima di spedire: se i campi troppo lunghi sono più di\nuno, il comando li elenca tutti insieme, con la lunghezza di ciascuno e il suo limite, senza\nchiamare il server — anche quando il ticket nasce da un'idea, dove il controllo arriva prima dei\ntrenta secondi di scrittura assistita, non dopo. Chi ha una pagina o un ticket scritti prima che\nil limite esistesse può continuare a correggerli: il testo già oltre soglia si blocca solo se si\nallunga.",[331,1958,1959,1962,1963,1965,1966,1969,1970,1973],{},[324,1960,1961],{},"Cambiare un campo di un ticket non cancella più gli altri"," (CYCL-30): ",[355,1964,1937],{},"\nsostituiva il ticket intero con quello che gli si passava, quindi cambiare il titolo svuotava\ndescrizione, analisi tecnica, peso, scadenza, assegnatario, traguardo e piattaforme; e senza\nripassare stato e priorità il comando non partiva nemmeno («Priority must exist»). Ora legge il\nticket e rimanda com'era tutto ciò che non è stato nominato: cambia solo quello che si scrive.\nPer svuotare un campo lo si chiede a parte, con ",[355,1967,1968],{},"--clear \u003Ccampo>"," (descrizione, analisi tecnica,\npeso, scadenza, assegnatario, traguardo, epica, piattaforme), e chiedere insieme di scrivere e\nsvuotare lo stesso campo viene rifiutato. Chi vuole la sostituzione totale di prima la chiede con\n",[355,1971,1972],{},"--replace",". Se un aggancio attuale non è più riconoscibile (assegnatario, traguardo o\npiattaforma con più corrispondenze o nessuna), il comando si ferma prima di scrivere e dice quale\nopzione passare, invece di cancellarlo in silenzio. Scenari e condizioni non cambiano\ncomportamento: restano come sono finché non se ne passano di nuovi, che li sostituiscono.",[331,1975,1976,1982,1983,1986,1987,1989,1990,1993,1994,452,1997,452,2000,2003],{},[324,1977,1978,1979,1981],{},"Con ",[355,1980,405],{}," l'errore dice cosa manca, non «Command failed»"," (CYCL-33): chiedendo la risposta\nin formato JSON, qualunque comando incompleto tornava lo stesso messaggio generico\n(",[355,1984,1985],{},"C500-SYS-001",", «Command failed»), come se fosse guasto il server, mentre senza ",[355,1988,405],{}," lo\nstesso comando spiegava esattamente cosa mancava. Ora una riga di comando da correggere torna\n",[355,1991,1992],{},"C400-INP-001"," con il messaggio per esteso — ",[355,1995,1996],{},"Missing required flag project",[355,1998,1999],{},"Nonexistent flag: --nope",[355,2001,2002],{},"Refusing to delete without --confirm"," — e il codice generico resta ai guasti veri.",[331,2005,2006,2009,2010,452,2013,452,2016,2019,2020,362,2023,2026,2027,2029],{},[324,2007,2008],{},"Un'opzione scritta male non viene più ignorata"," (CYCL-33): ",[355,2011,2012],{},"whoami",[355,2014,2015],{},"logout",[355,2017,2018],{},"org show",",\n",[355,2021,2022],{},"alerts preferences show",[355,2024,2025],{},"alerts notifications read-all"," non controllavano affatto la riga di\ncomando, quindi un'opzione inesistente passava in silenzio e il comando rispondeva come se fosse\ntutto a posto — ",[355,2028,2015],{}," cancellava comunque le credenziali. Ora si fermano e dicono qual è\nl'opzione sbagliata, come tutti gli altri comandi.",[316,2031,2033],{"id":2032},"_0190-2026-08-13","0.19.0 · 2026-08-13",[321,2035,2036],{},[324,2037,345],{},[328,2039,2040],{},[331,2041,2042,2045,2046,2049,2050,2053,2054,2057],{},[324,2043,2044],{},"I contenitori da ignorare di una macchina si leggono e si scrivono da terminale"," (CYRA-519):\n",[355,2047,2048],{},"servers ignored-containers \u003Cid>"," stampa l'elenco dei nomi che quella macchina non considera\nservizi; ",[355,2051,2052],{},"--set buildkit,runner"," lo sostituisce, ",[355,2055,2056],{},"--clear"," lo svuota. Prima quel campo si compilava\nsolo dalla pagina web, e chi lavora da terminale doveva aprire il browser per una lista di due\nrighe. Un aggiornamento parziale non tocca gli altri campi della macchina.",[321,2059,2060],{},[324,2061,326],{},[328,2063,2064],{},[331,2065,2066,2071,2072,362,2075,2078],{},[324,2067,2068,2070],{},[355,2069,1871],{}," accetta di nuovo tutti i tipi di avviso"," (CYRA-519): l'elenco si era fermato ai\nprimi quindici, quindi ",[355,2073,2074],{},"alerts create",[355,2076,2077],{},"alerts update"," rifiutavano ogni tipo aggiunto dopo —\ncontenitori, replica, inode, automazione, vulnerabilità. Il comando sembrava rotto mentre il\nserver li accettava. Ora sono tutti e 43, nello stesso ordine del server.",[316,2080,2082],{"id":2081},"_0180-2026-08-11","0.18.0 · 2026-08-11",[321,2084,2085],{},[324,2086,345],{},[328,2088,2089],{},[331,2090,2091,2094,2095,2098,2099,2102,2103,2105,2106,2109,2110,2112,2113,452,2116,2019,2119,1794,2122,2125,2126,2129,2130,1901,2133,362,2136,2139,2140,2143,2144,2147,2148,2151],{},[324,2092,2093],{},"Le vulnerabilità delle dipendenze da terminale"," (CYCL-29): nuovo gruppo ",[355,2096,2097],{},"vulnerabilities","\n(abbreviabile in ",[355,2100,2101],{},"vulns","). ",[355,2104,1228],{}," è cross-progetto come ",[355,2107,2108],{},"logs list"," — senza ",[355,2111,1384],{}," copre tutti\ni progetti visibili, ordinati dalla gravità più alta, e filtra per ",[355,2114,2115],{},"--severity",[355,2117,2118],{},"--status",[355,2120,2121],{},"--package",[355,2123,2124],{},"show"," stampa advisory, pacchetto, manifest e la versione che risolve; ",[355,2127,2128],{},"ignore","\n(con ",[355,2131,2132],{},"--note",[355,2134,2135],{},"reopen",[355,2137,2138],{},"promote"," fanno il triage; ",[355,2141,2142],{},"rescan --project"," fa ripartire la scansione\nsenza aspettare il giro notturno; ",[355,2145,2146],{},"runtimes"," elenca le versioni di linguaggio fuori supporto.\nLe mutazioni richiedono ",[355,2149,2150],{},"vulnerabilities.triage"," sul progetto della riga; una riga di un progetto\nche non vedi resta un 404, non un 403.",[316,2153,2155],{"id":2154},"_0171-2026-08-10","0.17.1 · 2026-08-10",[321,2157,2158],{},[324,2159,326],{},[328,2161,2162,2179],{},[331,2163,2164,2167,2168,2171,2172,2175,2176,869],{},[324,2165,2166],{},"L'indirizzo del server passato al volo viene rispettato"," (CYCL-15): ",[355,2169,2170],{},"CLOSEYOURIT_API_URL"," ora\nvince sull'",[355,2173,2174],{},"apiUrl"," già salvato in configurazione, invece di essere ignorato appena un indirizzo\nera stato memorizzato una volta. L'override vale per il comando in corso e non viene mai\npersistito su disco: la configurazione salvata resta quella scelta con ",[355,2177,2178],{},"login",[331,2180,2181,2184,2185,2188,2189,2192],{},[324,2182,2183],{},"L'elenco dei comandi distribuito torna aggiornato"," (CYCL-16): ",[355,2186,2187],{},"opencli.json"," viene rigenerato\ndal manifest oclif in ",[355,2190,2191],{},"prepack",", così la descrizione dei comandi pubblicata col pacchetto segue la\nversione pubblicata invece di restare ferma a undici versioni fa.",[316,2194,2196],{"id":2195},"_0170-2026-08-09","0.17.0 · 2026-08-09",[321,2198,2199],{},[324,2200,345],{},[328,2202,2203,2217,2240],{},[331,2204,2205,2208,2209,2212,2213,2216],{},[324,2206,2207],{},"Proporre una pagina della knowledge invece di pubblicarla"," (CYCL-17): ",[355,2210,2211],{},"kb create --in-review","\ncrea la pagina in attesa di revisione, con ",[355,2214,2215],{},"--review-note"," per la riga che spiega perché vale la\npena tenerla. Finché aspetta non compare nelle ricerche, nelle risposte e nei suggerimenti a lato\ndei ticket: decide una persona, dalla pagina Revisione del sito.",[331,2218,2219,1873,2222,2225,2226,452,2229,362,2232,2235,2236,2239],{},[324,2220,2221],{},"Vedere cosa aspetta e cosa manca",[355,2223,2224],{},"kb list --status in_review"," mostra la coda delle proposte\n(",[355,2227,2228],{},"published",[355,2230,2231],{},"rejected",[355,2233,2234],{},"all"," per gli altri casi), e ",[355,2237,2238],{},"kb list --awaiting-consolidation"," elenca\nle pagine già accettate che non sono ancora state scritte fra i documenti del repository. La\ncolonna dello stato compare solo quando serve, così l'elenco di sempre resta identico.",[331,2241,2242,1873,2245,2248],{},[324,2243,2244],{},"Registrare dove è finito il documento",[355,2246,2247],{},"kb consolidate \u003Cid> --path \u003Cpercorso>"," segna una pagina\naccettata come archiviata e tiene traccia del file che la contiene.",[316,2250,2252],{"id":2251},"_0160-2026-08-07","0.16.0 · 2026-08-07",[321,2254,2255],{},[324,2256,345],{},[328,2258,2259],{},[331,2260,2261,2264,2265,2268,2269,2272,2273,2276],{},[324,2262,2263],{},"Presa in carico dei ticket con scadenza"," (CYCL-14): ",[355,2266,2267],{},"tickets lease claim"," prenota un ticket a\ntuo nome per un tempo limitato (di default 8 ore), così due persone o due agenti automatici non ci\nlavorano sopra insieme senza saperlo. ",[355,2270,2271],{},"tickets lease renew"," allunga la prenotazione prima che scada,\n",[355,2274,2275],{},"tickets lease release"," la libera quando hai finito. Se il ticket è già prenotato da qualcun altro,\nil comando si ferma con un errore che dice chi lo tiene e fino a quando — utile soprattutto per gli\nscript, che possono passare al ticket successivo invece di aspettare a vuoto.",[316,2278,2280],{"id":2279},"_0150-2026-08-03","0.15.0 · 2026-08-03",[321,2282,2283],{},[324,2284,345],{},[328,2286,2287],{},[331,2288,2289,2292,2293,2296,2297,2300,2301,2304,2305,2308,2309,1844,2312,2315],{},[324,2290,2291],{},"La tabella delle funzionalità si usa da terminale"," (CYCL-13): ",[355,2294,2295],{},"matrix show \u003Cprodotto>"," stampa\nquali funzionalità esistono e a che punto sono su ogni piattaforma, con la versione da cui sono\narrivate agli utenti. Una casella vuota è un trattino; una funzionalità data per disponibile ma\nsenza versione è segnata con un punto interrogativo, e in fondo trovi quante sono. Da qui si\ngestisce anche tutto il resto: ",[355,2298,2299],{},"matrix categories"," per i gruppi di funzionalità, ",[355,2302,2303],{},"matrix features","\nper le funzionalità, ",[355,2306,2307],{},"matrix cells set"," per dire a che punto è una funzionalità su una\npiattaforma. Una funzionalità si richiama come la vedi scritta, per esempio ",[355,2310,2311],{},"\"Accesso\u002F2FA\"",[355,2313,2314],{},"matrix statuses"," elenca gli stati che puoi usare. Cancellare qualcosa chiede sempre conferma.",[316,2317,2319],{"id":2318},"_0140-2026-08-01","0.14.0 · 2026-08-01",[321,2321,2322],{},[324,2323,345],{},[328,2325,2326],{},[331,2327,2328,2331,2332,2334,2335,2338],{},[324,2329,2330],{},"Gli elenchi dicono quante pagine ci sono"," (CYCL-11): prima ogni elenco mostrava le prime dieci\nrighe e si fermava lì senza dirlo — su un progetto con centinaia di ticket sembravano tutti. Ora,\nquando la pagina che vedi non è l'ultima, in fondo compare una riga che te lo dice e ti indica come\nchiedere la successiva. La riga esce una volta sola, solo nell'output per le persone: con ",[355,2333,405],{},"\nnon cambia nulla, e i comandi che raccolgono già tutte le pagine da soli non stampano niente. Il\nsuggerimento appare solo sui comandi che hanno davvero ",[355,2336,2337],{},"--page",", mai su quelli che non ce l'hanno.",[316,2340,2342],{"id":2341},"_0130-2026-07-31","0.13.0 · 2026-07-31",[321,2344,2345],{},[324,2346,487],{},[328,2348,2349,2384],{},[331,2350,2351,1873,2354,2357,2358,452,2361,452,2364,613,2367,2370,2371,362,2374,2377,2378,2381,2382,869],{},[324,2352,2353],{},"Tipi di ticket standard",[355,2355,2356],{},"--kind"," accetta ora ",[355,2359,2360],{},"bug",[355,2362,2363],{},"story",[355,2365,2366],{},"task",[355,2368,2369],{},"epic",". I vecchi nomi\n",[355,2372,2373],{},"feature",[355,2375,2376],{},"improvement"," non esistono più: uno script che li passa riceve un errore invece di\ncreare un ticket sbagliato in silenzio. Vale anche per ",[355,2379,2380],{},"ideas convert --kind",", il cui default\ndiventa ",[355,2383,2363],{},[331,2385,2386,2392,2393,452,2396,452,2399,2019,2402,362,2405,2408],{},[324,2387,2388,2391],{},[355,2389,2390],{},"--roadmap-enabled"," rimosso"," da ",[355,2394,2395],{},"projects create",[355,2397,2398],{},"projects update",[355,2400,2401],{},"projects settings update",[355,2403,2404],{},"groups create",[355,2406,2407],{},"groups update",". La roadmap non è più una funzione da accendere: ce l'hanno tutti\ni progetti, quindi il flag non aveva più niente da governare.",[321,2410,2411],{},[324,2412,345],{},[328,2414,2415],{},[331,2416,2417,2422],{},[324,2418,2419],{},[355,2420,2421],{},"tickets create|update --parent-id",": aggancia il ticket a un'epic dello stesso progetto.\nPassando una stringa vuota lo stacca.",[316,2424,2426],{"id":2425},"_0120-2026-07-29","0.12.0 · 2026-07-29",[321,2428,2429],{},[324,2430,345],{},[328,2432,2433,2457,2465],{},[331,2434,2435,2440,2441,2444,2445,2448,2449,2452,2453,2456],{},[324,2436,2437],{},[355,2438,2439],{},"tickets eligibility",": decidi da terminale se un ticket può essere lavorato dagli agenti che\nlavorano da soli — ",[355,2442,2443],{},"--allow"," per permetterlo, ",[355,2446,2447],{},"--block"," per tenerlo a una persona, ",[355,2450,2451],{},"--auto"," per\ntornare alla valutazione automatica, con ",[355,2454,2455],{},"--reason"," per scrivere il perché. Senza nessuna di queste\nscelte il comando non fa nulla: non c'è un comportamento predefinito, così una svista di\ndigitazione non può aprire il cancello su un ticket che volevi tenerti.",[331,2458,2459,2464],{},[324,2460,2461],{},[355,2462,2463],{},"tickets list --agent-eligibility",": filtra l'elenco per stato del cancello, e una colonna\nAGENTS dice a colpo d'occhio quali ticket gli agenti possono prendere.",[331,2466,2467,2472],{},[324,2468,2469],{},[355,2470,2471],{},"tickets show"," mostra il verdetto, chi l'ha deciso e soprattutto la motivazione — è quella che\nserve per capire se ribaltarlo.",[316,2474,2476],{"id":2475},"_0110-2026-07-28","0.11.0 · 2026-07-28",[321,2478,2479],{},[324,2480,2481],{},"Rimosso",[328,2483,2484],{},[331,2485,2486,1873,2489,452,2492,452,2494,452,2496,452,2498,452,2501,2504,2505,2508,2509,2512],{},[324,2487,2488],{},"Comandi degli agenti automation",[355,2490,2491],{},"agents list",[355,2493,2124],{},[355,2495,1232],{},[355,2497,639],{},[355,2499,2500],{},"assign",[355,2502,2503],{},"delete"," e\n",[355,2506,2507],{},"agents runs"," non esistono più. CloseYourIt non ha più un catalogo di agenti da gestire: l'unità che lavora\nè la macchina registrata, che si vede e si certifica dal sito. Restano ",[355,2510,2511],{},"agents tokens",", che servono a\nregistrare una macchina nuova.",[316,2514,2516],{"id":2515},"_0100-2026-07-27","0.10.0 · 2026-07-27",[321,2518,2519],{},[324,2520,345],{},[328,2522,2523,2538,2551,2566],{},[331,2524,2525,1873,2530,2533,2534,2537],{},[324,2526,2527,2528],{},"Guidance nel ticket e nuovo ",[355,2529,1340],{},[355,2531,2532],{},"cyi tickets show"," mostra ora le references e le procedure effettive del progetto; il nuovo comando ",[355,2535,2536],{},"cyi guidance show -p \u003Cprogetto>"," le consulta direttamente. (CYCL-2)",[331,2539,2540,2546,2547,2550],{},[324,2541,2542,2545],{},[355,2543,2544],{},"projects show"," più informativo",": elenca gli ambienti dichiarati del progetto e le capabilities attive per ciascuno, così puoi consultarli prima di modificarli con ",[355,2548,2549],{},"set-environments",". (CYCL-4)",[331,2552,2553,1873,2558,2561,2562,2565],{},[324,2554,2555,2556],{},"Sezione tecnica in ",[355,2557,1433],{},[355,2559,2560],{},"cyi kb show"," mostra ora anche la sezione tecnica (",[355,2563,2564],{},"tech_spec",") delle pagine della knowledge base. (CYCL-9)",[331,2567,2568,2573],{},[324,2569,2570],{},[355,2571,2572],{},"secrets list --all",": elenca esplicitamente tutti i secret di un ambiente senza troncamento silenzioso ai primi 10. (CYCL-5)",[321,2575,2576],{},[324,2577,2578],{},"Migliorato",[328,2580,2581],{},[331,2582,2583,2588,2589,2592],{},[324,2584,2585],{},[355,2586,2587],{},"projects github",": mostra lo stato della sincronizzazione dei secret (",[355,2590,2591],{},"sync_secrets",") del progetto. (CYCL-3)",[316,2594,2596],{"id":2595},"_090-2026-07-26","0.9.0 · 2026-07-26",[321,2598,2599],{},[324,2600,345],{},[328,2602,2603],{},[331,2604,2605,1873,2608,362,2610,2612,2613,2616,2617,2620,2621,2623,2624,2626,2627,2629,2630,2632,2633,2635,2636,2623,2639,869],{},[324,2606,2607],{},"Sezione tecnica nella knowledge base da CLI",[355,2609,1381],{},[355,2611,1406],{}," accettano ora ",[355,2614,2615],{},"--tech-spec"," (testo inline) e ",[355,2618,2619],{},"--tech-spec-file"," (da file), speculari a ",[355,2622,1772],{},"\u002F",[355,2625,1776],{},", per scrivere il campo ",[355,2628,2564],{}," di una pagina — la parte tecnica tenuta separata dal corpo semplice. Su ",[355,2631,1406],{}," il valore corrente della sezione tecnica viene preservato quando non passi il flag (merge parziale come per gli altri campi). Il backend accettava già ",[355,2634,2564],{}," su ",[355,2637,2638],{},"POST",[355,2640,2641],{},"PUT \u002Fcli\u002Fv1\u002Fknowledge\u002Fpages",[316,2643,2645],{"id":2644},"_080-2026-07-25","0.8.0 · 2026-07-25",[321,2647,2648],{},[324,2649,345],{},[328,2651,2652],{},[331,2653,2654,2657,2658,2661,2662,2623,2665,2635,2668,452,2670,2635,2673,2676,2677,2680,2681,2684,2685,2687],{},[324,2655,2656],{},"Pagine collegate nella knowledge base",": nuovo ",[355,2659,2660],{},"cyi kb related \u003Cid>",", più ",[355,2663,2664],{},"--related",[355,2666,2667],{},"--question",[355,2669,1433],{},[355,2671,2672],{},"--with-related",[355,2674,2675],{},"kb search"," e un blocco «Related» in coda a ",[355,2678,2679],{},"kb ask",". Mostrano cosa leggere dopo una pagina: quello che cita con ",[355,2682,2683],{},"[[collegamenti]]",", chi la cita e le pagine vicine per significato. Con ",[355,2686,2667],{}," restano solo quelle inerenti alla domanda, ordinate per pertinenza. (CYRA-144)",[316,2689,2691],{"id":2690},"_073-2026-07-14","0.7.3 · 2026-07-14",[321,2693,2694],{},[324,2695,326],{},[328,2697,2698],{},[331,2699,2700,2715,2716,2719,2720,2723,2724,2726,2727,452,2730,2623,2733,2736,2737,2740,2741,2743],{},[324,2701,2702,2703,2705,2706,452,2709,362,2712],{},"Contratto ",[355,2704,405],{}," di ",[355,2707,2708],{},"secrets list",[355,2710,2711],{},"secrets assets list",[355,2713,2714],{},"secrets assets shared-list",": l'aggregazione di tutte le pagine restituiva ",[355,2717,2718],{},"{data}"," senza ",[355,2721,2722],{},"meta",", rompendo gli script che leggono l'envelope. Ora l'envelope conserva un ",[355,2725,2722],{}," coerente con l'aggregato (",[355,2728,2729],{},"page: 1",[355,2731,2732],{},"per",[355,2734,2735],{},"total"," = numero elementi, ",[355,2738,2739],{},"total_pages: 1",") invece del ",[355,2742,2722],{}," di pagina 1, che dopo l'aggregazione descriveva male i dati. Regressione introdotta con l'aggregazione delle pagine in 0.7.1\u002F0.7.2.",[316,2745,2747],{"id":2746},"_072-2026-07-14","0.7.2 · 2026-07-14",[321,2749,2750],{},[324,2751,326],{},[328,2753,2754],{},[331,2755,2756,2761,2762,2623,2764,2767],{},[324,2757,2758,2759],{},"Compatibilità ",[355,2760,2711],{},": ripristinati i flag ",[355,2763,2337],{},[355,2765,2766],{},"--per"," (ora deprecati e ignorati; la lista aggrega comunque tutte le pagine). La 0.7.1 li aveva rimossi, rompendo gli script che li passavano.",[316,2769,2771],{"id":2770},"_071-2026-07-14","0.7.1 · 2026-07-14",[321,2773,2774],{},[324,2775,326],{},[328,2777,2778],{},[331,2779,2780,1873,2783,362,2786,2789],{},[324,2781,2782],{},"Elenco secret completo",[355,2784,2785],{},"cyi secrets list",[355,2787,2788],{},"cyi secrets assets list"," ora aggregano tutte le pagine e mostrano tutti gli elementi, non più solo i primi. Prima veniva letta solo la prima pagina (10 per default), falsando i conteggi.",[316,2791,2793],{"id":2792},"_070-2026-07-13","0.7.0 · 2026-07-13",[321,2795,2796],{},[324,2797,345],{},[328,2799,2800],{},[331,2801,2802,2811,2812,2815],{},[324,2803,2804,2807,2808],{},[355,2805,2806],{},"--sync-secrets"," in ",[355,2809,2810],{},"projects github-update",": attiva\u002Fdisattiva da CLI il push dei secret del vault sui GitHub Environment secrets (",[355,2813,2814],{},"SECRETS_JSON","), prima possibile solo dalla scheda web del progetto. Sblocca la configurazione della sincronizzazione secret su più progetti in serie. (CYCL-3)",[316,2817,2819],{"id":2818},"_060-2026-07-13","0.6.0 · 2026-07-13",[321,2821,2822],{},[324,2823,345],{},[328,2825,2826],{},[331,2827,2828,2836,2837,452,2840,2842,2843,2846,2847,2850],{},[324,2829,2830,362,2833],{},[355,2831,2832],{},"cyi tickets statuses",[355,2834,2835],{},"cyi tickets priorities",": elencano gli status e le priority dei ticket a livello di organizzazione (",[355,2838,2839],{},"ID | CODE | LABEL",[355,2841,405],{}," per il payload completo) dagli endpoint ",[355,2844,2845],{},"\u002Fcli\u002Fv1\u002Ftypes\u002Fticket_statuses|ticket_priorities",". Restituiscono gli id che ",[355,2848,2849],{},"tickets create --status-id\u002F--priority-id"," richiede (obbligatori) e che prima non erano scopribili dalla CLI.",[316,2852,2854],{"id":2853},"_050-2026-07-13","0.5.0 · 2026-07-13",[321,2856,2857],{},[324,2858,345],{},[328,2860,2861],{},[331,2862,2863,2870],{},[324,2864,2865,2807,2868],{},[355,2866,2867],{},"--preview-environment-id",[355,2869,2810],{},": mappa l'environment di anteprima del progetto allo slot \"preview\" della sincronizzazione secret verso GitHub, per gli ambienti di anteprima effimeri per pull request. (CYRA-86)",[316,2872,2874],{"id":2873},"_040-2026-07-12","0.4.0 · 2026-07-12",[321,2876,2877],{},[324,2878,345],{},[328,2880,2881],{},[331,2882,2883,2888,2889,2892,2893,2896],{},[324,2884,2885],{},[355,2886,2887],{},"cyi tokens provision",": genera e distribuisce un token ingest nel vault destinatario senza\nmostrarne il valore; ",[355,2890,2891],{},"tokens provisions show\u002Fretry"," espongono stato e retry secret-free. Tutti i\ncomandi blind ricostruiscono l'output da una allow-list anche se il backend restituisse campi\nsensibili per errore. Il comando umano ",[355,2894,2895],{},"tokens create"," resta reveal-once. (CYRA-94)",[316,2898,2900],{"id":2899},"_030-2026-07-12","0.3.0 · 2026-07-12",[321,2902,2903],{},[324,2904,345],{},[328,2906,2907],{},[331,2908,2909,2914,2915,452,2917,452,2920,452,2923,2019,2925,452,2928,452,2931,2934,2935,2938,2939,2942],{},[324,2910,2911],{},[355,2912,2913],{},"cyi personal",": vault di secret personale per-utente (",[355,2916,1228],{},[355,2918,2919],{},"get",[355,2921,2922],{},"set",[355,2924,2503],{},[355,2926,2927],{},"download",[355,2929,2930],{},"import",[355,2932,2933],{},"run","), indipendente da progetto e ambiente. ",[355,2936,2937],{},"cyi personal run -- \u003Ccmd>","\ninietta le variabili personali come env e ",[355,2940,2941],{},"use_cyi_personal"," (direnv) le carica in shell, come i\npersonal secrets di Doppler. (CYRA-92)",[316,2944,2946],{"id":2945},"_021-2026-07-12","0.2.1 · 2026-07-12",[321,2948,2949],{},[324,2950,434],{},[328,2952,2953],{},[331,2954,2955,2958,2959,2961,2962,2965],{},[324,2956,2957],{},"Redazione token",": gli errori diagnostici ",[355,2960,405],{}," non serializzano più lo stato interno o la\nconfigurazione oclif; ",[355,2963,2964],{},"cyi whoami"," restituisce soltanto campi allow-listed e il prefisso del token.",[316,2967,2969],{"id":2968},"_020-2026-07-12","0.2.0 · 2026-07-12",[321,2971,2972],{},[324,2973,345],{},[328,2975,2976],{},[331,2977,2978,2983,2984,2987],{},[324,2979,2980],{},[355,2981,2982],{},"cyi projects github-connect",": collega un progetto a un repository GitHub usando ",[355,2985,2986],{},"owner\u002Fname",";\nil backend accetta esclusivamente repository realmente visibili alla GitHub App dell'organizzazione.",[316,2989,2991],{"id":2990},"_010-2026-07-12","0.1.0 · 2026-07-12",[321,2993,2994],{},[324,2995,345],{},[328,2997,2998,3013,3048],{},[331,2999,3000,3005,3006,452,3009,3012],{},[324,3001,3002],{},[355,3003,3004],{},"cyi projects github-map [--connected-only]",": espone in formato tabellare o JSON il mapping completo\ntra progetti CloseYourIt visibili e repository GitHub collegati (",[355,3007,3008],{},"project_key",[355,3010,3011],{},"full_name",", branch di\ndefault), aggregando automaticamente tutte le pagine per gli orchestratori multi-repository.",[331,3014,3015,1873,3018,3021,3022,2623,3025,2623,3028,3031,3032,3035,3036,3039,3040,3043,3044,3047],{},[324,3016,3017],{},"Capability per-ambiente (servers\u002Fuptime\u002Fsecrets)",[355,3019,3020],{},"cyi environments create\u002Fupdate"," accettano\n",[355,3023,3024],{},"--servers",[355,3026,3027],{},"--uptime",[355,3029,3030],{},"--secrets"," (con le forme ",[355,3033,3034],{},"--no-*",") per i DEFAULT dell'ambiente; nuovo comando\n",[355,3037,3038],{},"cyi projects set-environment-capabilities -p KEY -e ENV --uptime off --secrets inherit"," per gli\nOVERRIDE tri-state (",[355,3041,3042],{},"inherit|on|off",") di un ambiente del progetto\n(",[355,3045,3046],{},"PUT \u002Fcli\u002Fv1\u002Fprojects\u002F:id\u002Fenvironments\u002F:env\u002Fcapabilities",").",[331,3049,3050,3053],{},[324,3051,3052],{},"Manifest OpenCLI",": allineato ai comandi environment\u002Fcapability e al nuovo mapping GitHub.",[316,3055,3057],{"id":3056},"_0027-2026-07-11","0.0.27 · 2026-07-11",[321,3059,3060],{},[324,3061,345],{},[328,3063,3064],{},[331,3065,3066,3071,3072,452,3074,452,3077,2019,3079,452,3082,452,3085,452,3088,3091,3092,3095,3096,3099,3100,669,3103,3106],{},[324,3067,3068],{},[355,3069,3070],{},"cyi secrets assets",": file sensibili mobili cifrati e versionati (",[355,3073,1228],{},[355,3075,3076],{},"upload",[355,3078,2927],{},[355,3080,3081],{},"versions",[355,3083,3084],{},"rollback",[355,3086,3087],{},"archive",[355,3089,3090],{},"purge","). Il download richiede ",[355,3093,3094],{},"--output",", usa permessi ",[355,3097,3098],{},"0600"," e\nnon sovrascrive senza ",[355,3101,3102],{},"--force",[355,3104,3105],{},"shared-list\u002Fshared-upload\u002Fdelegate\u002Fundelegate"," gestiscono gli asset\norganizzativi senza duplicazioni. Nessun contenuto viene stampato o incluso nei bundle ENV.",[316,3108,3110],{"id":3109},"_0026-2026-07-09","0.0.26 · 2026-07-09",[321,3112,3113],{},[324,3114,345],{},[328,3116,3117,3141],{},[331,3118,3119,3125,3126,3129,3130,3133,3134,3137,3138,869],{},[324,3120,3121,3122],{},"Token non-interattivo via ",[355,3123,3124],{},"CLOSEYOURIT_TOKEN",": se impostata, l'env sovrascrive il token salvato in\n",[355,3127,3128],{},"config.json"," (sovrascrive anche il login device-flow). Abilita l'uso ",[324,3131,3132],{},"headless\u002FCI\u002Fagenti"," con un\ntoken utente ",[355,3135,3136],{},"cyi_u_"," (es. di un service account) senza login interattivo:\n",[355,3139,3140],{},"CLOSEYOURIT_TOKEN=cyi_u_… cyi secrets bundle -p KEY -e development",[331,3142,3143,3148,3149,452,3151,3153,3154,2623,3156,2623,3158,452,3161,452,3164,3167,3168,1860,3170,3173,3174,3176,3177,3180,3181,3184,3185,3047],{},[324,3144,3145],{},[355,3146,3147],{},"cyi service-accounts"," — gestione dei service account (membri di tipo AI, CLI-only) da terminale:\n",[355,3150,1228],{},[355,3152,1232],{}," (con ",[355,3155,1384],{},[355,3157,1387],{},[355,3159,3160],{},"--role",[355,3162,3163],{},"--grant-secrets",[355,3165,3166],{},"--secret-environment","),\n",[355,3169,1245],{},[355,3171,3172],{},"tokens create \u003Caccount> \u003Cname>"," (segreto ",[355,3175,3136],{}," reveal-once) \u002F ",[355,3178,3179],{},"tokens revoke \\\u003Caccount> \\\u003Cid> --confirm",". Consuma ",[355,3182,3183],{},"\u002Fcli\u002Fv1\u002Fservice\u002Faccounts"," (gate ",[355,3186,3187],{},"members.manage",[321,3189,3190],{},[324,3191,3192],{},"Aggiornato",[328,3194,3195],{},[331,3196,3197,3199,3200,3203,3204,3207],{},[355,3198,2187],{}," aggiornato coi comandi ",[355,3201,3202],{},"service-accounts"," e allineato alla versione (",[355,3205,3206],{},"info.version"," 0.0.26).",[316,3209,3211],{"id":3210},"_0025-2026-07-09","0.0.25 · 2026-07-09",[321,3213,3214],{},[324,3215,345],{},[328,3217,3218],{},[331,3219,3220,3226,3227,3230,3231,869],{},[324,3221,3222,3225],{},[355,3223,3224],{},"cyi secrets import"," legge da stdin"," quando ",[355,3228,3229],{},"--from-file"," è assente (default). Abilita la migrazione\none-shot da Doppler: ",[355,3232,3233],{},"doppler secrets download --config production --no-file --format json | cyi secrets import -p PRJ -e production --format json",[316,3235,3237],{"id":3236},"_0024-2026-07-09","0.0.24 · 2026-07-09",[321,3239,3240],{},[324,3241,345],{},[328,3243,3244],{},[331,3245,3246,3251,3252,3255,3256,3259,3260,3263,3264,3267],{},[324,3247,3248],{},[355,3249,3250],{},"cyi secrets sync -p \u003Cprj>"," — enfila il push dei secret del vault sui ",[324,3253,3254],{},"GitHub Environment secrets","\ndel repo connesso (Fase 2, equivalente del bottone \"Sync now\" nella tab GitHub). Richiede il permesso\n",[355,3257,3258],{},"github.manage",". Il sync gira in background lato server (",[324,3261,3262],{},"delete-only-managed",": non tocca MAI i secret\nimpostati a mano, es. ",[355,3265,3266],{},"KAMAL_*","). Richiede closeyourit-rails con il push sync GitHub della Fase 2.",[316,3269,3271],{"id":3270},"_0023-2026-07-09","0.0.23 · 2026-07-09",[321,3273,3274],{},[324,3275,345],{},[328,3277,3278],{},[331,3279,3280,3289,3290,1873,3293,3295,3296,1837,3299,1901,3302,3304,3305,3307,3308,3295,3310,3313,3314,452,3316,3318,3319,2392,3322,3325,3326,3328,3329,1873,3333,3336,3337,3340,3341,3344,3345,3348,3349,3352,3353,3295,3356,3047],{},[324,3281,3282,3285,3286,3288],{},[355,3283,3284],{},"cyi secrets"," + ",[355,3287,444],{}," — vault di variabili d'ambiente cifrate (sostituto Doppler, Fase 1)",". Nuovo\ntopic ",[355,3291,3292],{},"secrets",[355,3294,2922],{}," (",[355,3297,3298],{},"NAME=VALUE",[355,3300,3301],{},"--value",[355,3303,1228],{}," (solo i nomi, MAI i valori), ",[355,3306,2919],{}," (stampa un\nvalore, pipeable), ",[355,3309,2927],{},[355,3311,3312],{},"--format env|json",", su file o stdout — avvisa che il file contiene\nplaintext), ",[355,3315,2503],{},[355,3317,2930],{}," (bulk ",[324,3320,3321],{},"all-or-nothing",[355,3323,3324],{},".env","\u002FJSON via ",[355,3327,3229],{},"). Nuovo comando\ntop-level ",[324,3330,3331],{},[355,3332,2933],{},[355,3334,3335],{},"cyi run -p \u003Cprj> -e \u003Cenv> -- \u003Ccomando>"," scarica i secret di ",[355,3338,3339],{},"[progetto, ambiente]","\ne li inietta come variabili d'ambiente nel sottoprocesso (stdio ereditato, exit code propagato) ",[324,3342,3343],{},"senza\nscriverli su disco"," — l'equivalente di ",[355,3346,3347],{},"doppler run",". Flag condiviso ",[355,3350,3351],{},"--environment\u002F-e"," (code o UUID,\nrisolto dal backend). Richiede closeyourit-rails col dominio ",[355,3354,3355],{},"Secrets::",[355,3357,3358],{},"\u002Fcli\u002Fv1\u002Fprojects\u002F:id\u002Fsecrets",[316,3360,3362],{"id":3361},"_0022-2026-07-08","0.0.22 · 2026-07-08",[321,3364,3365],{},[324,3366,345],{},[328,3368,3369],{},[331,3370,3371,3374,3375,3377,3378,452,3381,452,3384,452,3387,452,3390,452,3393,452,3395,2019,3398,452,3401,3404,3405,2623,3408,2623,3411,2623,3414,3417,3418,3421,3422,3425,3426,2623,3429,3432,3433,452,3435,452,3437,3439],{},[324,3372,3373],{},"Pallini di stato + emoji di sezione nell'output umano"," (l'output ",[355,3376,405],{}," resta invariato). Ogni colonna\nSTATUS nelle liste (",[355,3379,3380],{},"errors",[355,3382,3383],{},"monitors",[355,3385,3386],{},"cron-monitors",[355,3388,3389],{},"ideas",[355,3391,3392],{},"servers",[355,3394,2507],{},[355,3396,3397],{},"agents",[355,3399,3400],{},"tokens",[355,3402,3403],{},"tickets",") e ogni campo ",[355,3406,3407],{},"status",[355,3409,3410],{},"level",[355,3412,3413],{},"phase",[355,3415,3416],{},"priority"," nei record di show\u002Fcreate\u002Fupdate porta\nora un pallino ",[324,3419,3420],{},"🔴🟡🟢⚪"," (rosso = problema\u002Fgiù\u002Ffallito, giallo = in corso\u002Fin ritardo, verde = ok\u002Fsu\u002Ffatto,\nbianco = neutro\u002Fsconosciuto\u002Fin pausa), per individuare i problemi a colpo d'occhio. Gli status di monitoring\n(stringhe-enum stabili) sono mappati lato CLI; lo status\u002Fpriority dei ",[324,3423,3424],{},"ticket"," usa il colore del badge\n(",[355,3427,3428],{},"status_color",[355,3430,3431],{},"priority_color",", esposto dal backend ≥ closeyourit-rails 0.0.146) → fedele anche con le label\nrinominate dall'org. Le show multi-sezione (",[355,3434,2471],{},[355,3436,683],{},[355,3438,2679],{},") hanno un'emoji\nsull'intestazione: 📝 Description · 🔧 Technical analysis · 🧪 Scenario · ✅ Definition of Done · 💬 Comments ·\n📎 Attachments · 🎯 Problem · 💡 Solution · 👥 Stakeholders · 📚 Sources.",[316,3441,3443],{"id":3442},"_0021-2026-07-08","0.0.21 · 2026-07-08",[321,3445,3446],{},[324,3447,345],{},[328,3449,3450],{},[331,3451,3452,3456,3457,3460,3461,1844,3464,452,3467,3470,3471,3474,3475,3478,3479,3482],{},[324,3453,3454],{},[355,3455,2511],{}," — token org dell'automator (",[355,3458,3459],{},"cyi_a_","), analogo org-level a ",[355,3462,3463],{},"servers tokens",[355,3465,3466],{},"agents tokens list",[355,3468,3469],{},"agents tokens create \u003Cname>"," (segreto mostrato una sola volta),\n",[355,3472,3473],{},"agents tokens revoke \u003Cid> --confirm",". Contro ",[355,3476,3477],{},"\u002Fcli\u002Fv1\u002Fagents\u002Ftokens",", gated ",[355,3480,3481],{},"agents.manage"," lato backend.",[316,3484,3486],{"id":3485},"_0020-2026-07-08","0.0.20 · 2026-07-08",[321,3488,3489],{},[324,3490,345],{},[328,3492,3493],{},[331,3494,3495,3498,3499,3502,3503,3505,3506,452,3509,2019,3512,452,3515,2623,3518,2623,3521,3524,3525,3528,3529,3532,3533,3482],{},[324,3496,3497],{},"Comandi GitHub"," (parità con la nuova integrazione GitHub del backend). ",[355,3500,3501],{},"projects github --project \u003Cid|key>","\nmostra lo stato dell'integrazione del progetto (repo agganciato + regole di binding tag→release);\n",[355,3504,2810],{}," aggiorna le regole (",[355,3507,3508],{},"--default-branch",[355,3510,3511],{},"--production-environment-id",[355,3513,3514],{},"--staging-environment-id",[355,3516,3517],{},"--sync-enabled",[355,3519,3520],{},"--tag-binding-enabled",[355,3522,3523],{},"--autoclose-on-merge",", solo i campi\npassati). ",[355,3526,3527],{},"tickets branch \u003Cid|code>"," crea un branch GitHub dal ticket (nome prefissato col codice);\n",[355,3530,3531],{},"tickets pr \u003Cid|code>"," apre una pull request dal branch del ticket. Tutti gated ",[355,3534,3258],{},[316,3536,3538],{"id":3537},"_0019-2026-07-07","0.0.19 · 2026-07-07",[321,3540,3541],{},[324,3542,3543],{},"Cambiato",[328,3545,3546,3593],{},[331,3547,3548,3556,3557,3560,3561,3564,3565,3568,3569,3572,3573,3576,3577,3580,3581,3584,3585,3588,3589,3592],{},[324,3549,3550,3553,3554],{},[355,3551,3552],{},"tickets create"," \u002F ",[355,3555,1937],{},": il corpo BDD passa da un singolo Given\u002FWhen\u002FThen\u002FExpected a\n",[324,3558,3559],{},"scenari multipli",". Nuovo flag ",[355,3562,3563],{},"--scenarios"," (array JSON ",[355,3566,3567],{},"[{title,step_given,step_when,step_then,step_expected}]",");\nle scorciatoie ",[355,3570,3571],{},"--step-given\u002Fwhen\u002Fthen\u002Fexpected"," restano ma ora costruiscono ",[324,3574,3575],{},"un singolo scenario","\n(retro-compatibili). Nuovi flag ",[355,3578,3579],{},"--technical-analysis"," (registro tecnico separato), ",[355,3582,3583],{},"--condition","\n(riga Definition of Done, ",[324,3586,3587],{},"ripetibile","), e ",[355,3590,3591],{},"--due-at",". Flag corpo condivisi tra create\u002Fupdate.",[331,3594,3595,3599,3600,3603,3604,3607,3608,3611],{},[324,3596,3597],{},[355,3598,2471],{},": rende ora ",[324,3601,3602],{},"N scenari"," (un blocco per scenario coi soli step presenti), la\n",[324,3605,3606],{},"Definition of Done"," (bullet) e l'",[324,3609,3610],{},"analisi tecnica",", al posto delle 4 clausole piatte.",[321,3613,3614],{},[324,3615,3616],{},"Nota",[328,3618,3619],{},[331,3620,3621,3622,3625,3626,3629,3630,2623,3633,2623,3636,3639],{},"Il backend ",[355,3623,3624],{},"\u002Fcli\u002Fv1"," non espone più ",[355,3627,3628],{},"step_*"," piatti ma ",[355,3631,3632],{},"scenarios",[355,3634,3635],{},"conditions",[355,3637,3638],{},"technical_analysis","\n(richiede rails ≥ 0.0.134).",[321,3641,3642],{},[324,3643,345],{},[328,3645,3646],{},[331,3647,3648,3653,3654,3657,3658,452,3661,2019,3664,3153,3667,2623,3669,3671,3672,452,3674,452,3677,2019,3680,452,3682,452,3685,452,3688,452,3691,452,3694,2019,3697,1901,3700,3703,3704,2019,3707,1860,3710,3474,3713,3716,3717,2623,3720,3482],{},[324,3649,3650,3651],{},"Topic ",[355,3652,3397],{}," — gestione degli agenti di automazione (dominio ",[355,3655,3656],{},"Agents::"," del backend rails,\neseguiti dal daemon closeyourit-automator). Comandi: ",[355,3659,3660],{},"agents list [--kind]",[355,3662,3663],{},"agents show \u003Cid>",[355,3665,3666],{},"agents create",[355,3668,1384],{},[355,3670,1387],{}," risolti a id, ",[355,3673,2356],{},[355,3675,3676],{},"--run",[355,3678,3679],{},"--schedule",[355,3681,1537],{},[355,3683,3684],{},"--model",[355,3686,3687],{},"--permission-mode",[355,3689,3690],{},"--allowed-tool…",[355,3692,3693],{},"--on-failure",[355,3695,3696],{},"--catch-up",[355,3698,3699],{},"--no-enabled",[355,3701,3702],{},"agents update \u003Cid>"," (solo i flag passati), ",[355,3705,3706],{},"agents assign \u003Cid>",[355,3708,3709],{},"agents delete \u003Cid> --confirm",[355,3711,3712],{},"agents runs list|show",[355,3714,3715],{},"\u002Fcli\u002Fv1\u002Fagents"," (token utente),\ngated ",[355,3718,3719],{},"agents.view",[355,3721,3481],{},[316,3723,3725],{"id":3724},"_0017-2026-07-06","0.0.17 · 2026-07-06",[321,3727,3728],{},[324,3729,345],{},[328,3731,3732],{},[331,3733,3734,3737,3738,3740,3741],{},[324,3735,3736],{},"Parità completa col canale CLI del backend (rails ≥ v0.0.112)"," — ~68 comandi nuovi che coprono\nl'intera superficie ",[355,3739,3624],{}," dell'area member, oltre a flag mancanti su comandi esistenti.\n",[328,3742,3743,3767,3780,3795,3817,3838,3859,3880,3897],{},[331,3744,3745,1873,3748,3751,3752,3755,3756,3759,3760,3762,3763,3766],{},[324,3746,3747],{},"Topic nuovi",[355,3749,3750],{},"analytics"," (show · goals list\u002Fcreate\u002Fdelete · share\u002Funshare),\n",[355,3753,3754],{},"uptime-groups"," (CRUD + publish\u002Funpublish della status page), ",[355,3757,3758],{},"releases"," (list),\n",[355,3761,3386],{}," (list\u002Fshow), ",[355,3764,3765],{},"todos"," (liste personali: CRUD · items add\u002Flist\u002Fupdate\u002Fdelete ·\nsharing · complete\u002Funcomplete · reorder · liste condivise).",[331,3768,3769,1873,3772,3775,3776,3779],{},[324,3770,3771],{},"alerts",[355,3773,3774],{},"alerts notifications"," (list · read · read-all · delete) e ",[355,3777,3778],{},"alerts preferences","\n(show · update, incl. quiet hours).",[331,3781,3782,1873,3785,452,3788,2623,3791,3794],{},[324,3783,3784],{},"logs",[355,3786,3787],{},"logs show",[355,3789,3790],{},"logs link",[355,3792,3793],{},"unlink"," (collega un log a un errore o ticket).",[331,3796,3797,1873,3799,2623,3802,452,3805,3808,3809,3812,3813,3816],{},[324,3798,3383],{},[355,3800,3801],{},"publish",[355,3803,3804],{},"unpublish",[355,3806,3807],{},"announcements"," (show\u002Fset\u002Fclear),\n",[355,3810,3811],{},"incidents"," (delete · group · ungroup · update-add · update-delete), flag ",[355,3814,3815],{},"--group-id"," su create\u002Fupdate.",[331,3818,3819,1873,3822,452,3824,669,3827,3830,3831,3834,3835,869],{},[324,3820,3821],{},"members",[355,3823,639],{},[355,3825,3826],{},"remove",[355,3828,3829],{},"set-access"," esteso con ",[355,3832,3833],{},"--role-id"," (ripetibile) e\n",[355,3836,3837],{},"--override key=allow|deny|inherit",[331,3839,3840,1873,3842,2623,3845,452,3847,2623,3850,452,3853,2623,3856,869],{},[324,3841,3403],{},[355,3843,3844],{},"links",[355,3846,3793],{},[355,3848,3849],{},"reviewer",[355,3851,3852],{},"unreviewer",[355,3854,3855],{},"watch",[355,3857,3858],{},"unwatch",[331,3860,3861,1873,3864,3867,3868,2623,3871,3874,3875,2623,3877,3816],{},[324,3862,3863],{},"projects",[355,3865,3866],{},"settings"," (show\u002Fupdate: retention + flag funzionalità), ",[355,3869,3870],{},"link-server",[355,3872,3873],{},"unlink-server",",\nflag ",[355,3876,2390],{},[355,3878,3879],{},"--quick-bug-report-enabled",[331,3881,3882,1873,3884,452,3886,2623,3888,452,3891,2623,3894,869],{},[324,3883,3389],{},[355,3885,2503],{},[355,3887,3087],{},[355,3889,3890],{},"unarchive",[355,3892,3893],{},"case-update",[355,3895,3896],{},"case-delete",[331,3898,3899,3900,452,3903,2019,3906,2623,3909,869],{},"Flag aggiunti: ",[355,3901,3902],{},"groups --roadmap-enabled",[355,3904,3905],{},"platforms --supports-uptime",[355,3907,3908],{},"org --logs-retention-days",[355,3910,3911],{},"--analytics-retention-days",[316,3913,3915],{"id":3914},"_0016-2026-07-03","0.0.16 · 2026-07-03",[321,3917,3918],{},[324,3919,345],{},[328,3921,3922,3952],{},[331,3923,3924,3929,3930,3933,3934,3937,3938,2623,3941,3944,3945,3948,3949,869],{},[324,3925,3926,3928],{},[355,3927,661],{}," — modifica di un'idea"," — ",[355,3931,3932],{},"cyi ideas update \\\u003Cidea-id> --project \\\u003Cp> --title … --problem … --solution … --stakeholders … --stakeholders …"," (PUT ",[355,3935,3936],{},"\u002Fcli\u002Fv1\u002Fprojects\u002F:p\u002Fideas\u002F:id",").\nFull replace di title\u002Fproblem\u002Fsolution (i campi omessi vengono azzerati lato server; omettere\n",[355,3939,3940],{},"--problem",[355,3942,3943],{},"--title"," → 422, fail-safe); ",[355,3946,3947],{},"--stakeholders"," (ripetibile) sostituisce la lista solo se\npassato. Solo idee aperte; l'autore modifica la propria, altrimenti serve ",[355,3950,3951],{},"ideas.edit",[331,3953,3954,3929,3960,3963,3964,3967],{},[324,3955,3956,3959],{},[355,3957,3958],{},"ideas case"," — aggiunta di un case",[355,3961,3962],{},"cyi ideas case \\\u003Cidea-id> --project \\\u003Cp> --title … [--description …]"," (POST ",[355,3965,3966],{},"\u002Fcli\u002Fv1\u002Fprojects\u002F:p\u002Fideas\u002F:id\u002Fcases","). Un case è un esempio\u002Fscenario\n(titolo + descrizione), aggiunto uno alla volta come i commenti; stesso gate della modifica idea.\nRichiede il backend rails ≥ v0.0.103.",[321,3969,3970],{},[324,3971,326],{},[328,3973,3974],{},[331,3975,3976,3981,3982,3984,3985,3987,3988,2623,3990,2623,3993,3995,3996,3998,3999,869],{},[324,3977,3978,3980],{},[355,3979,2187],{}," — manifest allineato"," — la voce ",[355,3983,658],{}," mostrava ancora ",[355,3986,1772],{},": ora\nriflette ",[355,3989,3940],{},[355,3991,3992],{},"--solution",[355,3994,3947],{}," (già attivi da 0.0.15) e include ",[355,3997,661],{}," \u002F\n",[355,4000,3958],{},[316,4002,4004],{"id":4003},"_0015-2026-07-03","0.0.15 · 2026-07-03",[321,4006,4007],{},[324,4008,487],{},[328,4010,4011,4048],{},[331,4012,4013,4018,4019,4021,4022,4024,4025],{},[324,4014,4015,4017],{},[355,4016,658],{}," — nuovi campi (allineamento al backend v0.0.99)"," — il backend è passato a un\nformato idea strutturato: il flag ",[355,4020,1772],{}," (obbligatorio) è sostituito da ",[355,4023,3940],{}," (obbligatorio)\n",[328,4026,4027],{},[331,4028,4029,4031,4032,4034,4035,1794,4038,1873,4041,4044,4045,3047],{},[355,4030,3992],{}," (opzionale) + ",[355,4033,3947],{}," (opzionale, ripetibile). Il POST invia\n",[355,4036,4037],{},"{title, problem, solution, stakeholders[]}",[324,4039,4040],{},"Breaking",[355,4042,4043],{},"ideas create --body"," non funziona più\n(il backend richiede ",[355,4046,4047],{},"problem",[331,4049,4050,4054,4055,4058],{},[324,4051,4052],{},[355,4053,683],{}," — mostra Problema, Soluzione e Stakeholder al posto del vecchio blocco \"Proposal\"\n(il campo ",[355,4056,4057],{},"body"," non esiste più nel serializer).",[316,4060,4062],{"id":4061},"_0014-2026-07-03","0.0.14 · 2026-07-03",[321,4064,4065],{},[324,4066,345],{},[328,4068,4069,4118],{},[331,4070,4071,4076,4077,4080,4081,4083,4084,4086,4087,2623,4089,4091,4092,4095,4096,4099,4100,4103,4104,4107,4108,4091,4111,4114,4115,869],{},[324,4072,3650,4073],{},[355,4074,4075],{},"cyi kb"," — knowledge base di progetto (note, decisioni, guide) da terminale:\n",[355,4078,4079],{},"kb list"," (cross-progetto: senza ",[355,4082,1384],{}," copre ogni progetto visibile; filtri ",[355,4085,2356],{},"\nripetibile o comma-separato, ",[355,4088,2766],{},[355,4090,2337],{},") · ",[355,4093,4094],{},"kb search \u003Cquery…>"," (ricerca ",[324,4097,4098],{},"semantica"," con\nfallback ILIKE sul titolo, la query è variadica; stampa un hint quando il server ripiega sull'ILIKE)\n· ",[355,4101,4102],{},"kb show \u003Cid>"," (header dei metadati + body markdown grezzo) · ",[355,4105,4106],{},"kb create --project --title (--body | --body-file) [--kind]"," (kind default ",[355,4109,4110],{},"note",[355,4112,4113],{},"kb update \\\u003Cid>"," (aggiorna solo i campi\npassati: legge la pagina e ri-invia title\u002Fbody\u002Fkind correnti per i mancanti) · ",[355,4116,4117],{},"kb delete \\\u003Cid> --confirm",[331,4119,4120,4125,4126,4129,4130,869],{},[324,4121,4122],{},[355,4123,4124],{},"cyi kb ask \u003Cdomanda…>"," — domanda in linguaggio naturale: l'AI server-side risponde attingendo\nalla knowledge base e cita le pagine usate; con ",[355,4127,4128],{},"insufficient"," stampa un messaggio dedicato quando\nnon ha abbastanza contesto. Richiede backend con ",[355,4131,4132],{},"POST \u002Fcli\u002Fv1\u002Fknowledge\u002Fask",[316,4134,4136],{"id":4135},"_0013-2026-07-02","0.0.13 · 2026-07-02",[321,4138,4139],{},[324,4140,345],{},[328,4142,4143,4184],{},[331,4144,4145,4150,4151,4154,4155,452,4157,4091,4160,4162,4163,4166,4167,2623,4170,4173,4174,4166,4177,4180,4181,869],{},[324,4146,3650,4147],{},[355,4148,4149],{},"cyi ideas"," — idee di progetto votabili e commentabili dal team, convertibili in ticket:\n",[355,4152,4153],{},"ideas list"," (ordinamento per voti, filtro ",[355,4156,2118],{},[355,4158,4159],{},"--sort recent",[355,4161,683],{}," (campi +\ncorpo proposta) · ",[355,4164,4165],{},"ideas create --title --body"," · ",[355,4168,4169],{},"ideas vote",[355,4171,4172],{},"unvote"," (idempotenti, solo idee\naperte) · ",[355,4175,4176],{},"ideas comment --body",[355,4178,4179],{},"ideas comments"," (discussione completa, tutte le pagine) ·\n",[355,4182,4183],{},"ideas comment-delete --comment-id --confirm",[331,4185,4186,4191,4192,4195,4196,4199,4200,4203,4204,4207],{},[324,4187,4188],{},[355,4189,4190],{},"cyi ideas convert \u003Cid>"," — promuove l'idea a ticket: senza ",[355,4193,4194],{},"--title\u002F--description"," la bozza\nviene ",[324,4197,4198],{},"sintetizzata dall'AI server-side"," (idea + commenti, ~30s); con la bozza esplicita l'AI\nnon viene chiamata. Flag ",[355,4201,4202],{},"--kind\u002F--status-id\u002F--priority-id"," opzionali (default: feature se il\nprogetto ha roadmap altrimenti bug, status open, priority medium). Converte l'autore o chi ha\n",[355,4205,4206],{},"ideas.convert",". Richiede backend ≥ 0.0.81.",[316,4209,4211],{"id":4210},"_0012-2026-07-02","0.0.12 · 2026-07-02",[321,4213,4214],{},[324,4215,345],{},[328,4217,4218,4229],{},[331,4219,4220,4225,4226,869],{},[324,4221,4222],{},[355,4223,4224],{},"cyi tickets reject \u003Cid|code> --reason \"…\""," — respinge la review di un ticket: torna sul primo\nstatus in progress, il motivo diventa un commento in discussione e l'assignee riceve una notifica\ndedicata col motivo. Richiede backend con ",[355,4227,4228],{},"POST \u002Fcli\u002Fv1\u002F...\u002Freview\u002Frejection",[331,4230,4231,4236,4237,869],{},[324,4232,4233],{},[355,4234,4235],{},"cyi tickets approve \u003Cid|code>"," — approva la review: il ticket passa sul primo status done.\nRichiede backend con ",[355,4238,4239],{},"POST \u002Fcli\u002Fv1\u002F...\u002Freview\u002Fapproval",[316,4241,4243],{"id":4242},"_0011-2026-07-02","0.0.11 · 2026-07-02",[321,4245,4246],{},[324,4247,345],{},[328,4249,4250,4265,4277],{},[331,4251,4252,4257,4258,4260,4261,4264],{},[324,4253,4254,4256],{},[355,4255,2532],{}," sempre completo"," — un solo comando stampa TUTTO il ticket: campi (status,\npriority, weight, votes, assignee\u002Freporter\u002Freviewer, milestone, platforms), blocco Description,\nle 4 clausole BDD (Given\u002FWhen\u002FThen\u002FExpected), i commenti con i loro file allegati e la tabella\nallegati. ",[355,4259,405],{}," ritorna il payload unito ",[355,4262,4263],{},"{data: {...ticket, comments, attachments}}",".\nRichiede backend ≥ 0.0.78.",[331,4266,4267,4272,4273,4276],{},[324,4268,4269],{},[355,4270,4271],{},"cyi tickets comments"," mostra i file allegati a ogni commento (id · filename · content type ·\nbyte) — scaricabili con ",[355,4274,4275],{},"tickets attachment-download",", che ora risolve anche i file dei commenti.",[331,4278,4279,4282,4283,4286],{},[324,4280,4281],{},"Ticket per code ovunque"," — show\u002Fcomments\u002Fattachment-download (e gli altri sub-comandi) accettano\nil code umano (es. ",[355,4284,4285],{},"DRFL-3",") oltre all'UUID.",[321,4288,4289],{},[324,4290,4291],{},"Tecnico",[328,4293,4294],{},[331,4295,4296,2623,4299,4302,4303,4306,4307,4310],{},[355,4297,4298],{},"sanitize",[355,4300,4301],{},"sanitizeMultiline"," esportate da ",[355,4304,4305],{},"lib\u002Foutput",": i corpi multiriga (description, clausole,\nbody dei commenti) preservano i newline ma neutralizzano i control char (CWE-150); il comando\n",[355,4308,4309],{},"comments"," ora sanifica anche header e body (prima stampava raw).",[316,4312,4314],{"id":4313},"_0010-2026-07-02","0.0.10 · 2026-07-02",[321,4316,4317],{},[324,4318,345],{},[328,4320,4321,4341],{},[331,4322,4323,4328,4329,2623,4332,1837,4335,2623,4338,869],{},[324,4324,4325],{},[355,4326,4327],{},"cyi alerts channels list|create|delete"," — canali esterni (webhook firmato \u002F Telegram) da\nterminale; il create accetta ",[355,4330,4331],{},"--bot-token",[355,4333,4334],{},"--chat-id",[355,4336,4337],{},"--url",[355,4339,4340],{},"--secret",[331,4342,4343,4348,4349,4351,4352,4355,4356,4359,4360,4363],{},[324,4344,4345],{},[355,4346,4347],{},"cyi alerts create|update",": whitelist ",[355,4350,1871],{}," completa (uptime_ssl_expiring,\ncron_missed e gli 8 ",[355,4353,4354],{},"server_*","), nuovo ",[355,4357,4358],{},"--threshold"," (soglie server: % o °C) e ",[355,4361,4362],{},"--channel","\nripetibile per agganciare i canali esterni alla regola (REPLACE del set).\nRichiede backend ≥ 0.0.74.",[316,4365,4367],{"id":4366},"_009-2026-07-02","0.0.9 · 2026-07-02",[321,4369,4370],{},[324,4371,345],{},[328,4373,4374],{},[331,4375,4376,4381,4382,4384,4385,1901,4387,452,4389,452,4392,2623,4395,452,4398,2623,4401,4404,4405,669,4407,4412,4413,4416],{},[324,4377,4378],{},[355,4379,4380],{},"cyi servers …"," — gestione della flotta di server monitoring da terminale: ",[355,4383,1228],{}," (snapshot\ncpu\u002Fmem\u002Fdisk con filtro ",[355,4386,2118],{},[355,4388,2124],{},[355,4390,4391],{},"rename",[355,4393,4394],{},"pause",[355,4396,4397],{},"resume",[355,4399,4400],{},"revoke",[355,4402,4403],{},"unrevoke","\n(l'agent riceve 403 e si ferma), ",[355,4406,1245],{},[324,4408,4409],{},[355,4410,4411],{},"cyi servers tokens list|create|revoke","\nper gli enrollment token universali (il segreto ",[355,4414,4415],{},"cyi_s_…"," è mostrato una sola volta al create).\nRichiede backend ≥ 0.0.71.",[316,4418,4420],{"id":4419},"_008-2026-07-02","0.0.8 · 2026-07-02",[321,4422,4423],{},[324,4424,345],{},[328,4426,4427,4442],{},[331,4428,4429,4434,4435,2623,4438,4441],{},[324,4430,4431],{},[355,4432,4433],{},"projects set-platforms"," — dichiara le piattaforme del progetto (",[355,4436,4437],{},"--code",[355,4439,4440],{},"--platform-id","\nripetibili, SET completo). Sblocca la creazione dei monitor uptime da CLI (che richiedono una\npiattaforma web\u002Fserver dichiarata). Richiede backend ≥ 0.0.62.",[331,4443,4444,4449,4450,2019,4453,4456],{},[324,4445,4446],{},[355,4447,4448],{},"monitors create",": nuovi campi supportati dal backend (",[355,4451,4452],{},"--expected-body-keyword",[355,4454,4455],{},"--ssl-expiry-warn-days",") — vedi sotto.",[321,4458,4459],{},[324,4460,4461],{},"Interno",[328,4463,4464],{},[331,4465,4466],{},"Suite test dei comandi oclif: 338 test, coverage gate 95\u002F90 (lines\u002Fbranches) esteso a src\u002Fcommands.",[316,4468,4470],{"id":4469},"_007-2026-07-02","0.0.7 · 2026-07-02",[321,4472,4473],{},[324,4474,345],{},[328,4476,4477],{},[331,4478,4479,353,4482,4485,4486,4489],{},[324,4480,4481],{},"Ticket: lettura commenti e download allegati.",[355,4483,4484],{},"tickets comments \u003Cticket>"," elenca la\ndiscussione; ",[355,4487,4488],{},"tickets attachment-download \u003Cticket> \u003Cattachment>"," scarica un allegato su file.",[316,4491,4493],{"id":4492},"_006-2026-06-30","0.0.6 · 2026-06-30",[321,4495,4496],{},[324,4497,434],{},[328,4499,4500],{},[331,4501,4502,4505],{},[324,4503,4504],{},"Output hardening (CWE-150)."," Le celle renderizzate in tabella vengono ripulite dalle sequenze\ndi controllo del terminale: un dato remoto ostile non può più iniettare ANSI escape nell'output.",[316,4507,4509],{"id":4508},"_005-2026-06-30","0.0.5 · 2026-06-30",[321,4511,4512],{},[324,4513,345],{},[328,4515,4516],{},[331,4517,4518,4522],{},[324,4519,4520],{},[355,4521,2108],{}," — stream dei log strutturati cross-app (filtri livello\u002Fenvironment\u002Fprogetto).",[316,4524,4526],{"id":4525},"_004-2026-06-29","0.0.4 · 2026-06-29",[321,4528,4529],{},[324,4530,345],{},[328,4532,4533],{},[331,4534,4535,4538,4539,4541,4542,452,4544,2019,4546,452,4549,452,4552,2623,4555,2623,4558,4561,4562,2623,4564,2623,4566,2623,4569,4572,4573,4576,4577,2623,4580,4583,4584,1901,4587,869],{},[324,4536,4537],{},"Parità con la web app",": comandi ",[355,4540,3383],{}," (CRUD + pause\u002Fresume), ",[355,4543,3771],{},[355,4545,3821],{},[355,4547,4548],{},"invitations resend",[355,4550,4551],{},"milestones",[355,4553,4554],{},"platforms",[355,4556,4557],{},"environments",[355,4559,4560],{},"org"," (CRUD\u002Fshow\u002Fupdate),\nlifecycle ticket completo (",[355,4563,2500],{},[355,4565,3407],{},[355,4567,4568],{},"milestone",[355,4570,4571],{},"vote",") + ",[355,4574,4575],{},"errors promote",",\nallegati ticket (",[355,4578,4579],{},"attach",[355,4581,4582],{},"detach",", multipart in ",[355,4585,4586],{},"api.ts",[355,4588,4589],{},"groups update\u002Fdelete",[321,4591,4592],{},[324,4593,487],{},[328,4595,4596,4604],{},[331,4597,4598,1873,4600,4603],{},[355,4599,2395],{},[355,4601,4602],{},"--key"," obbligatorio (niente più derivazione automatica dal nome).",[331,4605,4606,4607,4610],{},"Id-or-code sempre ",[355,4608,4609],{},"encodeURIComponent"," negli URL.",[316,4612,4614],{"id":4613},"_003-2026-06-28","0.0.3 · 2026-06-28",[321,4616,4617],{},[324,4618,487],{},[328,4620,4621],{},[331,4622,4623,4626,4627,869],{},[324,4624,4625],{},"Publish npm via OIDC trusted publishing"," — rimosso il token long-lived ",[355,4628,4629],{},"NPM_TOKEN",[316,4631,4633],{"id":4632},"_002-2026-06-28","0.0.2 · 2026-06-28",[321,4635,4636],{},[324,4637,345],{},[328,4639,4640,4646,4660],{},[331,4641,4642,4645],{},[355,4643,4644],{},"projects set-environments"," — dichiara gli environment del progetto.",[331,4647,4648,4649,452,4652,452,4655,452,4657,869],{},"Comandi RBAC: ",[355,4650,4651],{},"roles",[355,4653,4654],{},"teams",[355,4656,3821],{},[355,4658,4659],{},"invitations",[331,4661,4662,452,4665,869],{},[355,4663,4664],{},"groups create\u002Flist",[355,4666,2395],{},[321,4668,4669],{},[324,4670,487],{},[328,4672,4673],{},[331,4674,4675],{},"CI su runner self-hosted.",[316,4677,4679],{"id":4678},"_001-2026-06-28","0.0.1 · 2026-06-28",[321,4681,4682],{},[324,4683,345],{},[328,4685,4686],{},[331,4687,4688,4689,4691,4692,2623,4694,2623,4696,3167,4698,452,4700,452,4702,452,4704,4706,4707,452,4709,3047],{},"Scaffold iniziale CLI ",[355,4690,400],{}," (oclif + TypeScript): auth device-flow (",[355,4693,2178],{},[355,4695,2015],{},[355,4697,2012],{},[355,4699,3863],{},[355,4701,3380],{},[355,4703,3403],{},[355,4705,3400],{},", lookup types. Pubblicabile su npm\n(",[355,4708,115],{},[355,4710,4711],{},"--access public",{"title":4713,"searchDepth":19,"depth":19,"links":4714},"",[4715,4716,4717,4718,4719,4720,4721,4722,4723,4724,4725,4726,4727,4728,4729,4730,4731,4732,4733,4734,4735,4736,4737,4738,4739,4740,4741,4742,4743,4744,4745,4746,4747,4748,4749,4750,4751,4752,4753,4754,4755,4756,4757,4758,4759,4760,4761,4762,4763,4764,4765,4766,4767,4768,4769,4770,4771,4772,4773,4774,4775,4776,4777,4778,4779,4780,4781,4782,4783,4784,4785,4786,4787,4788,4789],{"id":318,"depth":19,"text":319},{"id":339,"depth":19,"text":340},{"id":369,"depth":19,"text":370},{"id":385,"depth":19,"text":386},{"id":428,"depth":19,"text":429},{"id":462,"depth":19,"text":463},{"id":481,"depth":19,"text":482},{"id":509,"depth":19,"text":510},{"id":570,"depth":19,"text":571},{"id":589,"depth":19,"text":590},{"id":623,"depth":19,"text":624},{"id":643,"depth":19,"text":644},{"id":705,"depth":19,"text":706},{"id":724,"depth":19,"text":725},{"id":743,"depth":19,"text":744},{"id":788,"depth":19,"text":789},{"id":804,"depth":19,"text":805},{"id":841,"depth":19,"text":842},{"id":882,"depth":19,"text":883},{"id":902,"depth":19,"text":903},{"id":941,"depth":19,"text":942},{"id":957,"depth":19,"text":958},{"id":1725,"depth":19,"text":1726},{"id":1748,"depth":19,"text":1749},{"id":1813,"depth":19,"text":1814},{"id":2032,"depth":19,"text":2033},{"id":2081,"depth":19,"text":2082},{"id":2154,"depth":19,"text":2155},{"id":2195,"depth":19,"text":2196},{"id":2251,"depth":19,"text":2252},{"id":2279,"depth":19,"text":2280},{"id":2318,"depth":19,"text":2319},{"id":2341,"depth":19,"text":2342},{"id":2425,"depth":19,"text":2426},{"id":2475,"depth":19,"text":2476},{"id":2515,"depth":19,"text":2516},{"id":2595,"depth":19,"text":2596},{"id":2644,"depth":19,"text":2645},{"id":2690,"depth":19,"text":2691},{"id":2746,"depth":19,"text":2747},{"id":2770,"depth":19,"text":2771},{"id":2792,"depth":19,"text":2793},{"id":2818,"depth":19,"text":2819},{"id":2853,"depth":19,"text":2854},{"id":2873,"depth":19,"text":2874},{"id":2899,"depth":19,"text":2900},{"id":2945,"depth":19,"text":2946},{"id":2968,"depth":19,"text":2969},{"id":2990,"depth":19,"text":2991},{"id":3056,"depth":19,"text":3057},{"id":3109,"depth":19,"text":3110},{"id":3210,"depth":19,"text":3211},{"id":3236,"depth":19,"text":3237},{"id":3270,"depth":19,"text":3271},{"id":3361,"depth":19,"text":3362},{"id":3442,"depth":19,"text":3443},{"id":3485,"depth":19,"text":3486},{"id":3537,"depth":19,"text":3538},{"id":3724,"depth":19,"text":3725},{"id":3914,"depth":19,"text":3915},{"id":4003,"depth":19,"text":4004},{"id":4061,"depth":19,"text":4062},{"id":4135,"depth":19,"text":4136},{"id":4210,"depth":19,"text":4211},{"id":4242,"depth":19,"text":4243},{"id":4313,"depth":19,"text":4314},{"id":4366,"depth":19,"text":4367},{"id":4419,"depth":19,"text":4420},{"id":4469,"depth":19,"text":4470},{"id":4492,"depth":19,"text":4493},{"id":4508,"depth":19,"text":4509},{"id":4525,"depth":19,"text":4526},{"id":4613,"depth":19,"text":4614},{"id":4632,"depth":19,"text":4633},{"id":4678,"depth":19,"text":4679},"md",{},true,{"title":263,"description":264},"docs\u002Fchangelog-cli","m61fjcWCqH1mgmpiSc9NDYjjW-CYvJKUKKPyJ6JbC7c",1791469655089]