[{"data":1,"prerenderedAt":1939},["ShallowReactive",2],{"docs-pages-en":3,"doc-en-changelog-sdk-dart":308},[4,9,15,20,25,30,35,41,52,60,69,77,84,92,96,105,109,117,122,127,132,138,143,148,153,158,163,169,174,179,184,189,194,199,204,209,214,219,224,229,234,239,244,249,254,260,265,269,273,278,283,288,293,298,303],{"path":5,"title":6,"description":7,"order":8,"group":8,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fpermissions","Who can do what","[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","Installation","Install CloseYourIt on your own server with one command.",1,"start",{"path":16,"title":17,"description":18,"order":19,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fsettings","Settings","Every setting in the .env file, what it does and which ones you must never change.",2,{"path":21,"title":22,"description":23,"order":24,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fdatabase","Database","What the database is, what is inside, how long data stays and how much room it takes.",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","Updates and backups","Update to a new version, back up and restore the database, check the install.",4,{"path":31,"title":32,"description":33,"order":34,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Ftroubleshooting","Troubleshooting","What to check when the install, the certificate, email or incoming data do not work.",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","Connect your apps","Every tool that sends data to CloseYourIt, and what each one collects.",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","The closeyourit-ruby gem sends errors, logs, slow queries and job metrics from a Rails app.",7,"connect-your-apps","closeyourit-ruby","Errors, logs, slow queries and methods, background jobs.",{"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","The @bussolabs\u002Fcloseyourit-js package works in the browser and on Node 20.16 or newer.",8,"@bussolabs\u002Fcloseyourit-js","Browser and Node, framework adapters and database queries from 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","The closeyourit package captures the errors of Flutter apps, even when the phone is offline.",9,"closeyourit","Public errors, logs and metrics from 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","The closeyourit package sends errors, logs and metrics from server-side Python applications.",10,"Server side. SQLAlchemy; Django query monitoring and FastAPI\u002FStarlette from 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":79,"note":82,"collects":83,"status":8},"\u002Fdocs\u002Fsdk-sentry","Sentry SDK","Send errors with a compatible Sentry SDK; sessions and crashes have separate profiles.",11,"Compatible errors; sessions and crashes require a verified profile.",{"errors":50,"logs":51,"performance":51,"visits":51,"servers":51},{"path":85,"title":86,"description":87,"order":88,"group":8,"parent":46,"package":89,"note":90,"collects":91,"status":8},"\u002Fdocs\u002Fagent-server","Server agent","A small program on the server that sends the state of the machine every 60 seconds.",12,"closeyourit-agent","CPU, memory, disks, network, containers and services.",{"errors":51,"logs":68,"performance":51,"visits":51,"servers":50},{"path":93,"title":94,"description":95,"order":88,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fnuxt","Vue and Nuxt","Connect Nuxt browser errors and Nitro server errors without exposing a server token.",{"path":97,"title":98,"description":99,"order":100,"group":8,"parent":46,"package":101,"note":102,"collects":103,"status":104},"\u002Fdocs\u002Fagent-kubernetes","Kubernetes","A read-only observer of the cluster: one copy per cluster.",13,"closeyourit-kube","Machines, apps and error events of the cluster.",{"errors":51,"logs":51,"performance":51,"visits":51,"servers":50},"coming",{"path":106,"title":107,"description":108,"order":100,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fopentelemetry","OpenTelemetry","Send server traces, metrics and logs through the optional OTLP receiver.",{"path":110,"title":111,"description":112,"order":113,"group":8,"parent":46,"package":114,"note":115,"collects":116,"status":8},"\u002Fdocs\u002Fcli","cyi CLI","The closeyourit command, cyi for short: manage projects, errors and tickets from the terminal.",14,"@bussolabs\u002Fcloseyourit-cli","It collects no data: it drives CloseYourIt from the terminal.",{"errors":51,"logs":51,"performance":51,"visits":51,"servers":51},{"path":118,"title":119,"description":120,"order":121,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fhttp-api","HTTP API","Send errors, logs, metrics and page views with plain HTTP requests, without an SDK.",15,{"path":123,"title":124,"description":125,"order":126,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fgithub-app","GitHub","Connect GitHub repositories to tickets and releases with your own GitHub App.",16,{"path":128,"title":129,"description":130,"order":131,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fingest-gateway","Ingest gateway","Keep incoming errors, logs and metrics safe when the app is slow or restarting.",17,{"path":133,"title":134,"description":135,"order":136,"group":137,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fai","AI","Turn on assistant, analysis, dictation and smart search with a CloseYourIt AI key or your own provider.",18,"automation",{"path":139,"title":140,"description":141,"order":142,"group":137,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fautomator","Automator","Let tickets be worked automatically on your own Linux machine, with Claude Code, Codex or both.",19,{"path":144,"title":145,"description":146,"order":147,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fstack-coverage","Frameworks and stack coverage","Choose a published SDK or understand the limits of a locally tested integration.",20,{"path":149,"title":150,"description":151,"order":152,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fmonitoring","Traces, measurements and sessions","Explore the new signals, compare releases and recover original error locations.",21,{"path":154,"title":155,"description":156,"order":157,"group":40,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fnode-database","Node databases","Monitor slow and repeated queries with pg, mysql2, Drizzle and Prisma PostgreSQL.",22,{"path":159,"title":160,"description":161,"order":162,"group":137,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fclaude-code","Claude Code","CloseYourIt inside Claude Code, in a column next to the conversation with production and your open tickets.",23,{"path":164,"title":165,"description":166,"order":167,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Ftickets","Tickets and ideas","Open and follow tickets on the board, group them into milestones, ask questions and turn voted ideas into work.",30,"use",{"path":170,"title":171,"description":172,"order":173,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Ferrors","Errors","How your apps' errors become single rows, and how to resolve, ignore, merge or turn them into tickets.",31,{"path":175,"title":176,"description":177,"order":178,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fperformance","Performance","Find slow queries and methods, read the problems detected automatically and get an alert when one appears.",32,{"path":180,"title":181,"description":182,"order":183,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Flogs","Logs","Search your apps' messages, follow a request from start to end and link a message to an error or a ticket.",33,{"path":185,"title":186,"description":187,"order":188,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fsecrets","Secrets","Passwords, keys and private files in one place, per project and environment, read by your app without a .env on disk.",34,{"path":190,"title":191,"description":192,"order":193,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fservers","Servers","The state of your machines on one page, with history and alerts when something breaks or fills up.",35,{"path":195,"title":196,"description":197,"order":198,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fuptime","Uptime","Check that your sites answer, keep count of outages and show them to customers on a status page.",36,{"path":200,"title":201,"description":202,"order":203,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fcrons","Scheduled jobs","Notice when a job that should run on its own stops running, or runs and ends badly.",37,{"path":205,"title":206,"description":207,"order":208,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Falerts","Alerts","The rules that create an alert, the notification center and where each person chooses to receive them.",38,{"path":210,"title":211,"description":212,"order":213,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fhelpdesk","Help desk","Visitors of a project's site write to the team with the \"Need help?\" button, and the request lands in the right project.",39,{"path":215,"title":216,"description":217,"order":218,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fanalytics","Site analytics","How many people visit the site, what they look at and where they come from, without cookies.",40,{"path":220,"title":221,"description":222,"order":223,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Freplays","Session replay","Record how people move through the site and watch it back like a video, even next to an error.",41,{"path":225,"title":226,"description":227,"order":228,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Freleases","Releases","The versions running in each environment, bound to GitHub tags, and the errors that come back after a fix.",42,{"path":230,"title":231,"description":232,"order":233,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fvulnerabilities","Vulnerabilities","Known security problems in your projects' libraries, and the languages that no longer get fixes.",43,{"path":235,"title":236,"description":237,"order":238,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fseo","SEO","CloseYourIt visits your sites like a search engine and tells you what keeps your pages from being found.",44,{"path":240,"title":241,"description":242,"order":243,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fknowledge","Knowledge base","Write notes, decisions and guides for your projects, find them by meaning and ask questions with sources.",45,{"path":245,"title":246,"description":247,"order":248,"group":168,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fagents","AI agents","Which tickets agents take, what they hand you, where you decide and how each machine is measured.",46,{"path":250,"title":251,"description":252,"order":253,"group":14,"parent":8,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog","Versions","Every CloseYourIt system with its latest version, and the notes of each release.",50,{"path":255,"title":256,"description":257,"order":258,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-app","App","Every stable version of App, newest first.",51,"changelog",{"path":261,"title":262,"description":263,"order":264,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-cli","Command line (cyi)","Every stable version of Command line (cyi), newest first.",52,{"path":266,"title":140,"description":267,"order":268,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-automator","Every stable version of Automator, newest first.",53,{"path":270,"title":86,"description":271,"order":272,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-agent-server","Every stable version of Server agent, newest first.",54,{"path":274,"title":275,"description":276,"order":277,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-agent-kubernetes","Kubernetes agent","Every stable version of Kubernetes agent, newest first.",55,{"path":279,"title":280,"description":281,"order":282,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-sdk-javascript","JavaScript SDK","Every stable version of JavaScript SDK, newest first.",56,{"path":284,"title":285,"description":286,"order":287,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-sdk-ruby","Ruby SDK","Every stable version of Ruby SDK, newest first.",57,{"path":289,"title":290,"description":291,"order":292,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-sdk-python","Python SDK","Every stable version of Python SDK, newest first.",58,{"path":294,"title":295,"description":296,"order":297,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-sdk-dart","Dart SDK","Every stable version of Dart SDK, newest first.",59,{"path":299,"title":300,"description":301,"order":302,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-skills","Skills for AI assistants","Every stable version of Skills for AI assistants, newest first.",60,{"path":304,"title":305,"description":306,"order":307,"group":8,"parent":259,"package":8,"note":8,"collects":8,"status":8},"\u002Fdocs\u002Fchangelog-site","Website and docs","Every stable version of Website and docs, newest first.",61,{"id":309,"title":295,"body":310,"collects":8,"description":296,"extension":1933,"group":8,"meta":1934,"navigation":1935,"note":8,"order":297,"package":8,"parent":259,"path":294,"seo":1936,"status":8,"stem":1937,"__hash__":1938},"docs_en\u002Fdocs\u002Fchangelog-sdk-dart.md",{"type":311,"value":312,"toc":1911},"minimark",[313,317,322,328,338,342,347,380,384,388,396,400,403,407,415,419,422,426,434,438,441,446,454,458,462,470,474,479,487,491,495,519,523,527,535,539,547,552,560,564,568,576,580,584,657,662,720,724,728,949,953,995,999,1003,1038,1042,1087,1092,1115,1119,1238,1242,1256,1260,1264,1404,1408,1558,1562,1566,1613,1617,1630,1634,1638,1725,1729,1734,1758,1763,1812,1816,1821,1826],[314,315,316],"p",{},"Release notes are written in Italian.",[318,319,321],"h2",{"id":320},"_0101-2026-10-07","0.10.1 · 2026-10-07",[314,323,324],{},[325,326,327],"strong",{},"Corretto",[329,330,331],"ul",{},[332,333,334,337],"li",{},[325,335,336],{},"Nessun cambiamento funzionale."," Riallinea il README alla versione pubblicata; la 0.10.0 non è stata pubblicata su pub.dev e questa versione ne include le correzioni.",[318,339,341],{"id":340},"_0100-2026-10-07","0.10.0 · 2026-10-07",[314,343,344],{},[325,345,346],{},"Sicurezza",[329,348,349],{},[332,350,351,354,355,359,360,363,364,367,368,371,372,375,376,379],{},[325,352,353],{},"Token mai in chiaro fuori da localhost."," Con un ",[356,357,358],"code",{},"token",", un endpoint ",[356,361,362],{},"http:\u002F\u002F"," è rifiutato in ogni ambiente, non solo in ",[356,365,366],{},"production","; restano ammessi ",[356,369,370],{},"localhost",", ",[356,373,374],{},"127.0.0.1"," e ",[356,377,378],{},"::1",". Il README avvisa che la coda offline su Android può finire nell'Auto Backup.",[318,381,383],{"id":382},"_093-2026-10-04","0.9.3 · 2026-10-04",[314,385,386],{},[325,387,327],{},[329,389,390],{},[332,391,392,395],{},[325,393,394],{},"Build Android indipendenti."," Ogni job usa una propria directory SDK, evitando che installazioni simultanee rimuovano strumenti in uso. La 0.9.2 non è arrivata su pub.dev; questa versione include le funzionalità e le correzioni precedenti.",[318,397,399],{"id":398},"_092-2026-10-04","0.9.2 · 2026-10-04",[314,401,402],{},"Non pubblicata su pub.dev: due build Android concorrenti hanno interferito durante l’installazione degli strumenti condivisi.",[314,404,405],{},[325,406,327],{},[329,408,409],{},[332,410,411,414],{},[325,412,413],{},"Redirect entro il limite di invio."," Quando il body di un redirect scade, non parte una seconda richiesta. Le versioni 0.9.0 e 0.9.1 non sono arrivate su pub.dev; questa versione include log e metriche con chiave pubblica.",[318,416,418],{"id":417},"_091-2026-10-04","0.9.1 · 2026-10-04",[314,420,421],{},"Non pubblicata su pub.dev: il controllo sul limite dei redirect ha rilevato una seconda richiesta dopo la scadenza del body.",[314,423,424],{},[325,425,327],{},[329,427,428],{},[332,429,430,433],{},[325,431,432],{},"Pubblicazione isolata per job."," La configurazione Pub dei runner Linux resta temporanea, evitando credenziali orfane condivise. La 0.9.0 non è stata pubblicata su pub.dev; questa versione contiene le stesse funzionalità.",[318,435,437],{"id":436},"_090-2026-10-04","0.9.0 · 2026-10-04",[314,439,440],{},"Non pubblicata su pub.dev: il controllo delle dipendenze è stato bloccato dalla configurazione persistente del runner.",[314,442,443],{},[325,444,445],{},"Aggiunto",[329,447,448],{},[332,449,450,453],{},[325,451,452],{},"Log e metriche con chiave pubblica."," Le app distribuite possono inviare log, misure e verdetti performance con la DSN public key, senza includere un Bearer. La telemetria d'uso resta riservata al server.",[318,455,457],{"id":456},"_083-2026-10-01","0.8.3 · 2026-10-01",[314,459,460],{},[325,461,327],{},[329,463,464],{},[332,465,466,469],{},[325,467,468],{},"Pubblicazione riparata."," La 0.8.2 non è arrivata su pub.dev: questa versione contiene le stesse modifiche.",[318,471,473],{"id":472},"_082-2026-10-01","0.8.2 · 2026-10-01",[314,475,476],{},[325,477,478],{},"Modificato",[329,480,481],{},[332,482,483,486],{},[325,484,485],{},"Manutenzione interna."," Commenti e test sono in inglese e i controlli automatici seguono le nuove regole dei rilasci. Per chi usa la libreria non cambia niente.",[318,488,490],{"id":489},"_081-2026-09-07","0.8.1 · 2026-09-07",[314,492,493],{},[325,494,327],{},[329,496,497,507,513],{},[332,498,499,502,503,506],{},[325,500,501],{},"Le credenziali dentro un messaggio non escono più in chiaro"," — se un errore o un messaggio\nriportava un header di accesso, la parte dopo ",[356,504,505],{},"Bearer"," restava leggibile. Ora tipo e credenziale\nspariscono insieme, e anche i messaggi inviati a mano passano dal filtro.",[332,508,509,512],{},[325,510,511],{},"La chiave del progetto non finisce più a un servizio diverso"," — bastava che l'indirizzo\nconfigurato rimandasse a un'altra porta dello stesso nome per consegnargliela. Ora la chiave\nsegue solo l'indirizzo esatto configurato.",[332,514,515,518],{},[325,516,517],{},"Un server che risponde a metà non blocca più l'app"," — bastava che smettesse di rispondere a\ninvio iniziato: le segnalazioni successive venivano buttate e la chiusura poteva non finire mai.\nOra ogni invio ha un tempo massimo e la chiusura termina sempre.",[318,520,522],{"id":521},"_080-2026-09-03","0.8.0 · 2026-09-03",[314,524,525],{},[325,526,445],{},[329,528,529],{},[332,530,531,534],{},[325,532,533],{},"Ora si vede quali parti dell'app vengono davvero usate"," — prima quella pagina restava vuota per\nchi usa questa libreria. Basta segnare i punti che interessano e ogni cinque minuti parte un solo\ninvio con l'elenco. Va acceso a mano e richiede la chiave da server.",[314,536,537],{},[325,538,327],{},[329,540,541],{},[332,542,543,546],{},[325,544,545],{},"Il numero del rilascio e quello dentro il pacchetto non possono più divergere"," — non li\nconfrontava nessuno: il rilascio poteva chiamarsi in un modo e pubblicare un altro numero, e\nfinire verde lo stesso. Se quel numero era già uscito, il magazzino rifiutava il rilascio buono e\nil lavoro restava a metà: l'etichetta creata, niente pubblicato. Adesso il rilascio si ferma prima\ndi pubblicare, e dice quale dei due va aggiornato. Si ferma anche su un'etichetta di prova, che\nqui non ha dove andare: il magazzino riceve solo versioni definitive.",[314,548,549],{},[325,550,551],{},"Documentazione",[329,553,554],{},[332,555,556,559],{},[325,557,558],{},"La presentazione non promette più di fare tutto quello che fanno le altre librerie"," — alcune\nfunzioni esistono solo qui, altre solo altrove. Ora rimanda alla tabella unica che dice, funzione\nper funzione, cosa c'è in quale libreria.",[318,561,563],{"id":562},"_072-2026-08-16","0.7.2 · 2026-08-16",[314,565,566],{},[325,567,327],{},[329,569,570],{},[332,571,572,575],{},[325,573,574],{},"La pubblicazione si fermava sulla versione stessa"," — la 0.7.1 non è mai arrivata su pub.dev:\ntre test tenevano il numero di versione scritto a mano dentro l'asserzione, quindi ogni rilascio\nli faceva cadere e la pubblicazione si fermava prima di partire. Il quarto controllo, quello che\nconfronta il README col pubspec, era corretto e diceva il vero: il README consigliava ancora la\nversione precedente. Ora la versione attesa si legge dal pubspec e dalla costante dell'SDK, e il\nREADME è allineato — un rilascio pulito passa da solo, e una versione dimenticata cade qui invece\nche addosso a chi riceve gli eventi.",[318,577,579],{"id":578},"_071-2026-08-16","0.7.1 · 2026-08-16",[314,581,582],{},[325,583,346],{},[329,585,586],{},[332,587,588,591,592,371,595,371,598,601,602,605,606,609,610,613,614,621,622,625,626,629,630,633,634,637,638,640,641,644,645,648,649,652,653,656],{},[325,589,590],{},"Action CI pinnate al commit e permessi minimi"," — CYDA-17. Ogni action di terze parti dei\nworkflow (",[356,593,594],{},"actions\u002Fcheckout",[356,596,597],{},"subosito\u002Fflutter-action",[356,599,600],{},"actions\u002Fsetup-java",",\n",[356,603,604],{},"android-actions\u002Fsetup-android",") è fissata al ",[325,607,608],{},"commit SHA"," con la versione a commento, invece\nche a un tag mobile: un tag può essere ripuntato da chi controlla il repository dell'action, e\nquel codice girerebbe sul runner che pubblica su pub.dev. I tre workflow dichiarano\n",[356,611,612],{},"permissions: contents: read"," come base, e il ",[325,615,616,617,620],{},"token OIDC (",[356,618,619],{},"id-token: write",") resta solo sul job\nche pubblica","; la pubblicazione continua a non custodire alcun segreto pub.dev. ",[356,623,624],{},"verify.yml","\ndichiara i propri permessi perché in un workflow riusato valgono quelli del chiamato (CYDA-20).\nNel job che pubblica la cache di ",[356,627,628],{},"flutter-action"," è ",[325,631,632],{},"disattivata",": è una composite action e con\nla cache attiva eseguirebbe ",[356,635,636],{},"actions\u002Fcache@v5",", un tag mobile che il pin non copre, proprio nel\njob con ",[356,639,619],{},". Le action salgono anche alle major correnti (",[356,642,643],{},"checkout"," v7,\n",[356,646,647],{},"setup-java"," v5, ",[356,650,651],{},"setup-android"," v4): il pool self-hosted gira runner 2.336.0 e i log di CI\nsegnalavano già ",[356,654,655],{},"setup-java v4 is deprecated and will no longer receive updates",".",[314,658,659],{},[325,660,661],{},"Cambiato",[329,663,664,677],{},[332,665,666,669,670,673,674,676],{},[325,667,668],{},"Aggiornamenti di dipendenze automatizzati"," — CYDA-17. Nuovo ",[356,671,672],{},".github\u002Fdependabot.yml",": bump\nsettimanali raggruppati per le action (con lo SHA e il commento di versione riscritti) e per i\npackage pub della libreria e dell'app di esempio. Ogni PR passa dalla matrice di ",[356,675,624],{},"\n(analisi, test, coverage ≥90%, build Android\u002FiOS\u002Fweb su Flutter minimo e corrente) prima del\nmerge, così un pin non invecchia in silenzio e un bump non entra senza prove.",[332,678,679,682,683,686,687,690,691,698,699,702,703,706,707,371,710,713,714,601,717,656],{},[325,680,681],{},"Audit dipendenze pub",": tutte le dipendenze dirette sono già alla massima versione risolvibile\n(",[356,684,685],{},"dio"," 5.11.0). ",[356,688,689],{},"meta"," ",[325,692,693,694,697],{},"resta a ",[356,695,696],{},"^1.15.0"," di proposito",": il Flutter SDK lo pinna a una versione\nesatta (1.17.0 su 3.38.1, 1.18.0 su 3.44.1), quindi chiedere ",[356,700,701],{},"^1.19.0"," renderebbe il package\nirrisolvibile sul Flutter minimo supportato invece che più aggiornato — Dependabot lo ignora.\nNuovo ",[356,704,705],{},"test\u002Fci_workflows_test.dart"," blinda pin, permessi, OIDC senza segreti, automazione e la\ncoerenza fra ",[356,708,709],{},"pubspec.yaml",[356,711,712],{},"mise.toml"," e la matrice di build. Nuove dev dependencies: ",[356,715,716],{},"yaml",[356,718,719],{},"pub_semver",[318,721,723],{"id":722},"_070-2026-08-06","0.7.0 · 2026-08-06",[314,725,726],{},[325,727,445],{},[329,729,730,792,857],{},[332,731,732,735,736,739,740,743,744,747,748,751,752,755,756,759,760,763,764,766,767,770,771,774,775,777,778,375,780,783,784,787,788,371,790,656],{},[325,733,734],{},"Propagazione del W3C Trace Context nelle richieste Dio"," — CYDA-16. L'interceptor può iniettare\n",[356,737,738],{},"traceparent","\u002F",[356,741,742],{},"tracestate"," W3C nelle chiamate HTTP uscenti, correlando la chiamata mobile con i\nlog del backend end-to-end. È ",[325,745,746],{},"opt-in"," (",[356,749,750],{},"propagateTraceContext",", default OFF) e ",[325,753,754],{},"limitata da\nallowlist",": gli header partono ",[325,757,758],{},"solo"," verso gli host in ",[356,761,762],{},"tracePropagationAllowlist"," (match\nesatto o per sottodominio) — host esterni esclusi. Il ",[356,765,738],{}," riusa il ",[356,768,769],{},"trace_id"," di\ncorrelazione dello scope (già conforme W3C) e genera un ",[356,772,773],{},"parent-id"," nuovo a ogni richiesta, così\nchiamate concorrenti non condividono lo span; una richiesta con un ",[356,776,738],{}," valido a monte ne\ncontinua il trace (nested request), uno malformato viene scartato. ",[356,779,742],{},[356,781,782],{},"baggage"," sono\nfiltrati con la denylist PII dello ",[356,785,786],{},"Scrubber"," prima di partire: nessuna informazione interna verso\ndestinazioni non autorizzate. Nuove opzioni: ",[356,789,750],{},[356,791,762],{},[332,793,794,797,798,801,802,805,806,809,810,747,813,816,817,820,821,824,825,828,829,831,832,375,835,838,839,842,843,601,846,371,848,371,851,601,854,656],{},[325,795,796],{},"Breadcrumb di connettività, lifecycle e tap"," — CYDA-15. Tre sorgenti automatiche aggiungono\nbreadcrumb ",[325,799,800],{},"sintetici"," che contestualizzano un crash o un rallentamento avvenuto subito dopo un\ncambio di rete, un passaggio in background o un'interazione: ",[356,803,804],{},"captureLifecycleBreadcrumbs","\n(",[356,807,808],{},"data.state","), ",[356,811,812],{},"captureConnectivityBreadcrumbs",[356,814,815],{},"data.connectivity"," = solo il tipo di rete, via\n",[356,818,819],{},"connectivity_plus",") e ",[356,822,823],{},"captureTapBreadcrumbs"," (tipo + rotta, con ",[356,826,827],{},"CloseYourItUserInteraction","\nattorno all'app). Tutte ",[325,830,746],{}," (default OFF), ",[325,833,834],{},"minimali",[325,836,837],{},"prive di PII",": mai il testo\ndigitato né i dati del widget toccato. I toggle di rete rapidi e i tap a raffica sono soppressi da\n",[356,840,841],{},"breadcrumbThrottleMs"," (default 500 ms, ring buffer già esistente); connettività e lifecycle sono\ndeduplicati sugli stati identici. Il flush dei log in background resta attivo a prescindere dai\nflag. Piattaforma senza plugin di connettività o permessi negati → nessun breadcrumb, mai un crash\n(filosofia no-op del client). Nuovi export: ",[356,844,845],{},"CloseYourItConnectivityObserver",[356,847,827],{},[356,849,850],{},"CloseYourItConnectivity",[356,852,853],{},"ConnectivitySource",[356,855,856],{},"PluginConnectivitySource",[332,858,859,862,863,866,867,870,871,874,875,878,879,747,882,885,886,690,889,892,893,371,896,371,899,601,902,371,905,371,908,371,911,371,914,371,917,371,920,923,924,371,927,930,931,934,935,938,939,739,942,739,945,948],{},[325,860,861],{},"Diagnostica di invii e scarti visibile e strutturata"," — CYDA-13. Uno sviluppatore capisce se\nun evento è stato inviato, persistito, ritentato o eliminato — e ",[325,864,865],{},"perché"," — senza leggere i\nfile interni e senza generare nuova telemetria. ",[356,868,869],{},"Stats"," è esteso con i ",[325,872,873],{},"motivi strutturati","\ndi scarto (",[356,876,877],{},"DropReason","), uno ",[325,880,881],{},"snapshot immutabile",[356,883,884],{},"CloseYourIt.diagnostics",") che affianca\nai contatori di flusso i motivi, e una ",[325,887,888],{},"callback opzionale",[356,890,891],{},"CloseYourItOptions.onDiagnostic","\n(in-process, nessun evento ricorsivo, un'eccezione al suo interno è assorbita). I motivi coprono\ntransport, worker e offline store — punti finora muti: ",[356,894,895],{},"sampled",[356,897,898],{},"beforeSend",[356,900,901],{},"excluded",[356,903,904],{},"duplicate",[356,906,907],{},"queueFull",[356,909,910],{},"timeout",[356,912,913],{},"network",[356,915,916],{},"clientClosed",[356,918,919],{},"permanentReject",[356,921,922],{},"tooLarge","\n(413, oltre il budget payload lato server — CYRA-112), ",[356,925,926],{},"maxAttempts",[356,928,929],{},"expired"," (TTL), ",[356,932,933],{},"evicted","\n(capienza), ",[356,936,937],{},"storeCorrupted",". La semantica storica di ",[356,940,941],{},"dropped",[356,943,944],{},"failed",[356,946,947],{},"discarded"," è\npreservata (i motivi corrispondenti li aggregano); lo snapshot porta solo enum e interi, mai dati\nsensibili.",[314,950,951],{},[325,952,661],{},[329,954,955],{},[332,956,957,960,961,964,965,968,969,972,973,371,976,371,979,982,983,986,987,990,991,994],{},[325,958,959],{},"Versione minima di Flutter dichiarata correttamente a 3.38.1"," — CYDA-14. Il vincolo ",[356,962,963],{},"flutter","\ndel package passa da ",[356,966,967],{},">=3.10.0"," a ",[356,970,971],{},">=3.38.1",", il minimo realmente imposto dalle dipendenze\n(",[356,974,975],{},"device_info_plus",[356,977,978],{},"package_info_plus",[356,980,981],{},"path_provider","): su versioni inferiori ",[356,984,985],{},"pub get"," non\nrisolveva. La CI ora verifica analisi, test e ",[325,988,989],{},"build dell'app di esempio per Android, iOS e web","\nsul Flutter minimo e su quello stabile corrente, con ",[356,992,993],{},"dart pub publish --dry-run"," come gate: un\npackage che non compila su una piattaforma supportata non raggiunge la pubblicazione.",[318,996,998],{"id":997},"_060-2026-08-01","0.6.0 · 2026-08-01",[314,1000,1001],{},[325,1002,445],{},[329,1004,1005],{},[332,1006,1007,1010,1011,1014,1015,1018,1019,1022,1023,1026,1027,809,1030,1037],{},[325,1008,1009],{},"DSN public key per le app client"," — CYDA-7. ",[356,1012,1013],{},"CloseYourItOptions.publicKey",": credenziale di solo\ningest (esadecimale, ",[325,1016,1017],{},"non segreta",") per le app Flutter distribuite. Gli errori\u002Fmessaggi vanno al\ndrop-in Sentry ",[356,1020,1021],{},"POST \u002Fapi\u002F{projectId}\u002Fstore"," con ",[356,1024,1025],{},"?sentry_key="," (fuori da ",[356,1028,1029],{},"\u002Fapi\u002Fv1",[325,1031,1032,1033,1036],{},"senza mai\nincludere un ",[356,1034,1035],{},"Authorization: Bearer"," nel pacchetto"," — la chiave estratta non legge né amministra il\nprogetto. La chiave viaggia in query (CORS-safe), in parità col client JS.",[314,1039,1040],{},[325,1041,478],{},[329,1043,1044],{},[332,1045,1046,1052,1053,690,1056,690,1059,1061,1062,1065,1066,1069,1070,1073,1074,1076,1077,1079,1080,1083,1084,1086],{},[325,1047,1048,1051],{},[356,1049,1050],{},"CloseYourItOptions.token"," ora opzionale"," — CYDA-7. Serve ",[356,1054,1055],{},"publicKey",[325,1057,1058],{},"oppure",[356,1060,358],{},"; senza\nnessuna delle due il client resta no-op (",[356,1063,1064],{},"disabledReason: credenziale mancante","). Il Bearer ",[356,1067,1068],{},"cyi_…","\nresta ",[325,1071,1072],{},"server-only"," (porta anche la lettura della telemetria) ed è ignorato quando ",[356,1075,1055],{}," è\nimpostata. Con la sola ",[356,1078,1055],{}," metriche e logs ",[325,1081,1082],{},"non vengono inviati",": il backend espone la DSN\npubblica solo per il canale eventi e rifiuta la chiave sui path ",[356,1085,1029],{}," (401).",[314,1088,1089],{},[325,1090,1091],{},"Aggiunto (coda offline)",[329,1093,1094],{},[332,1095,1096,1099,1100,371,1103,1106,1107,1110,1111,1114],{},[325,1097,1098],{},"Scadenza, tetto tentativi e backoff con jitter sulla coda offline"," — CYDA-11. Gli eventi molto\nvecchi o ripetutamente non consegnabili non restano più per sempre su disco né vengono ritentati tutti\nallo stesso avvio. Nuovo schema record v2 (",[356,1101,1102],{},"attempt_count",[356,1104,1105],{},"next_attempt_at",", con migrazione in\nlettura dei record legacy), ",[356,1108,1109],{},"OfflineRetryPolicy"," con TTL, tetto tentativi e backoff esponenziale con\njitter deterministico (FNV-1a, quindi riproducibile e scaglionato tra eventi). ",[356,1112,1113],{},"readAll"," pianifica solo\ngli eventi dovuti e non scaduti: gli scaduti vengono eliminati, quelli in backoff restano per un avvio\nsuccessivo — niente raffica alla riapertura.",[314,1116,1117],{},[325,1118,327],{},[329,1120,1121,1146,1172,1221],{},[332,1122,1123,1126,1127,1134,1135,1138,1139,1141,1142,1145],{},[325,1124,1125],{},"Niente più query e segreti negli URL registrati"," — CYDA-8. L'interceptor Dio registrava l'URL intero\nin breadcrumb, request context e dettagli d'errore, esponendo password, token, email o codici temporanei\npresenti nella query ",[325,1128,1129,1130,1133],{},"anche con ",[356,1131,1132],{},"sendPii"," disattivato",". Ora ",[356,1136,1137],{},"Scrubber.sanitizeUri"," conserva per\ndefault solo schema, host e path; con ",[356,1140,1132],{}," la query resta ma i parametri sensibili sono redatti\nriusando la denylist condivisa. ",[356,1143,1144],{},"userInfo"," e fragment sono sempre esclusi. Robusto su URI relativi o\nmalformati. La porta viene preservata e i valori di query ri-encodati.",[332,1147,1148,1151,1152,1155,1156,1159,1160,1163,1164,1167,1168,1171],{},[325,1149,1150],{},"Richieste Dio concorrenti non si scambiano più il contesto"," — CYDA-9. ",[356,1153,1154],{},"onRequest"," non muta più lo\nscope globale condiviso: salva uno snapshot del request context in ",[356,1157,1158],{},"RequestOptions.extra",", che ",[356,1161,1162],{},"onError","\npassa a ",[356,1165,1166],{},"captureException"," solo se ",[325,1169,1170],{},"quella"," richiesta fallisce. Prima, più chiamate in parallelo si\nscambiavano URL, metodo e header, e lo scope conservava richieste vecchie.",[332,1173,1174,1177,1178,1181,1182,739,1185,739,1188,739,1191,1194,1195,371,1198,371,1201,375,1204,1207,1208,1210,1211,1214,1215,1217,1218,656],{},[325,1175,1176],{},"I rifiuti permanenti escono dalla coda offline"," — CYDA-10. Un evento persistito veniva rimosso solo\nsu risposta ",[356,1179,1180],{},"2xx",": un ",[356,1183,1184],{},"400",[356,1186,1187],{},"401",[356,1189,1190],{},"403",[356,1192,1193],{},"413"," restava su disco e veniva ritentato a ogni avvio,\noccupando la coda per sempre. Ora rete, ",[356,1196,1197],{},"408",[356,1199,1200],{},"425",[356,1202,1203],{},"429",[356,1205,1206],{},"5xx"," restano ritentabili (con ",[356,1209,1203],{}," che\npreserva l'attesa ",[356,1212,1213],{},"Retry-After","), tutto il resto viene scartato. Lo scarto è diagnosticabile via il\nnuovo contatore ",[356,1216,947],{}," e un log in ",[356,1219,1220],{},"debug",[332,1222,1223,1230,1231,1233,1234,1237],{},[325,1224,1225,1226,1229],{},"Una seconda ",[356,1227,1228],{},"init"," non duplica più i gestori"," — CYDA-12. Prima installava un secondo set di gestori\nerrore, observer di lifecycle e frame callback senza chiudere il client precedente: gli errori venivano\ncatturati due volte e vecchio client, transport e observer restavano orfani. Ora ",[356,1232,1228],{}," chiude in\nsicurezza il client attivo prima di sostituirlo, e ",[356,1235,1236],{},"close"," azzera il riferimento anche in caso di errore.",[314,1239,1240],{},[325,1241,551],{},[329,1243,1244],{},[332,1245,1246,1249,1250,1253,1254,656],{},[325,1247,1248],{},"README allineato alla versione pubblicata"," — CYDA-18. Consigliava ",[356,1251,1252],{},"^0.3.0"," mentre il pacchetto era\ngià avanti: una nuova app che seguiva la documentazione partiva da una minor priva delle correzioni di\nprivacy. Un test blinda ora la coerenza fra README e ",[356,1255,709],{},[318,1257,1259],{"id":1258},"_050-2026-07-10","0.5.0 · 2026-07-10",[314,1261,1262],{},[325,1263,445],{},[329,1265,1266,1317,1365,1380],{},[332,1267,1268,1271,1272,739,1274,1277,1278,1281,1282,1284,1285,747,1288,1291,1292,1294,1295,1298,1299,1302,1303,820,1306,1302,1309,1312,1313,1316],{},[325,1269,1270],{},"Persistenza crash offline (pattern Crashlytics)"," — CYDA-5. Gli eventi errore\n(",[356,1273,1166],{},[356,1275,1276],{},"captureMessage",") vengono scritti ",[325,1279,1280],{},"sincronamente su disco"," prima dell'invio e\nrimossi solo alla conferma ",[356,1283,1180],{},": un crash che chiude l'app (o un periodo offline) non li perde più,\nvengono ",[325,1286,1287],{},"rispediti al prossimo avvio",[356,1289,1290],{},"replayPending",", chiamato da ",[356,1293,1228],{},"). Store su file\n(path_provider), un file JSON per evento; il payload su disco è ",[325,1296,1297],{},"sempre scrubato"," (nessun segreto\nin chiaro). Nuove opzioni ",[356,1300,1301],{},"persistOffline"," (default ",[356,1304,1305],{},"true",[356,1307,1308],{},"maxPersistedEvents",[356,1310,1311],{},"50",",\nsfratto dei più vecchi). Su web (nessun filesystem) la persistenza è assente e il client resta\npienamente funzionante in-memory. Store iniettabile via ",[356,1314,1315],{},"init(offlineStore: …)"," per i test.",[332,1318,1319,1322,1323,1325,1326,1329,1330,739,1333,1336,1337,690,1340,1343,1344,805,1347,1350,1351,747,1354,1357,1358,1360,1361,1364],{},[325,1320,1321],{},"Backstop errori isolate"," — ",[356,1324,1228],{}," aggancia ",[356,1327,1328],{},"Isolate.current.addErrorListener"," per gli errori non\ngestiti dell'isolate corrente (root) che sfuggono a ",[356,1331,1332],{},"FlutterError",[356,1334,1335],{},"PlatformDispatcher",", catturati\ncome ",[356,1338,1339],{},"IsolateError",[356,1341,1342],{},"fatal"," (persistiti come gli altri errori). Per gli ",[325,1345,1346],{},"isolate spawnati",[356,1348,1349],{},"Isolate.spawn",") è esposto ",[356,1352,1353],{},"CloseYourIt.isolateErrorPort",[356,1355,1356],{},"SendPort",") da passare come ",[356,1359,1162],{},"\nallo spawn. ",[356,1362,1363],{},"dart:isolate"," è confinato dietro conditional import → nessun impatto sulla build web.",[332,1366,1367,1368,1371,1372,1375,1376,1379],{},"Nuovi contatori diagnostici ",[356,1369,1370],{},"stats",": ",[356,1373,1374],{},"persisted"," (eventi scritti su disco) e ",[356,1377,1378],{},"replayed"," (eventi\nripresi dal disco al boot).",[332,1381,1382,1387,1388,1391,1392,1395,1396,1399,1400,1403],{},[325,1383,1384,1385],{},"Opzione ",[356,1386,1220],{}," su ",[356,1389,1390],{},"CloseYourItOptions",": con ",[356,1393,1394],{},"debug: true"," i fallimenti d'invio del transport\nvengono loggati via ",[356,1397,1398],{},"debugPrint"," (status + codice ",[356,1401,1402],{},"R…"," + messaggio dall'envelope backend), invece\ndi restare muti (prima diagnosticabili solo con un proxy HTTP).",[314,1405,1406],{},[325,1407,327],{},[329,1409,1410,1445,1462,1478],{},[332,1411,1412,1415,1416,1418,1419,1422,1423,1426,1427,1430,1431,739,1434,739,1437,1440,1441,1444],{},[325,1413,1414],{},"Parità PII scrubber (denylist backend)"," — CYDA-4. La denylist dello ",[356,1417,786],{}," client\nora include i token PII del backend (",[356,1420,1421],{},"SENSITIVE_KEY",") — ",[356,1424,1425],{},"email phone telephone mobile dob birth passport bearer session pin pan"," — oltre a quelli già presenti.\nPrima i bind di query\u002Fmetodi lenti (",[356,1428,1429],{},"capture_query_bindings",") su colonne\n",[356,1432,1433],{},"email",[356,1435,1436],{},"phone",[356,1438,1439],{},"dob"," non venivano redatti e finivano nel pannello Parametri della\nmetric-group. Match per sottostringa (over-redaction privacy-by-default), allineato\n1:1 alla gem Ruby. ",[356,1442,1443],{},"sensitiveKey"," e la regex dei messaggi condividono ora un'unica\nsorgente di token, così non possono più divergere.",[332,1446,1447,1450,1451,1453,1454,1457,1458,1461],{},[325,1448,1449],{},"Sicurezza redirect",": il ",[356,1452,505],{}," (segreto d'ingest) non viene più ri-inviato dopo un redirect\nverso un host diverso, né su un downgrade ",[356,1455,1456],{},"https→http"," — solo stesso host (o variante ",[356,1459,1460],{},"www",") e\nschema non degradato. Evita di consegnare il token a un endpoint non fidato.",[332,1463,1464,1371,1467,1470,1471,1473,1474,1477],{},[325,1465,1466],{},"DX misconfig",[356,1468,1469],{},"init()"," con config incompleta (token\u002FprojectId mancante) emette ora un\n",[356,1472,1398],{}," esplicito invece di restare un no-op silenzioso (non avvisa se ",[356,1475,1476],{},"enabled: false",").",[332,1479,1480,1483,1484,1486,1487,1490,1491,1494,1495,1497,1498,1501,1502,690,1505,1508,1509,1511,1512,1515,1516,1519,1520,747,1523,1526,1527,1530,1531,1534,1535,1538,1539,1541,1542,1545,1546,739,1549,1552,1553,1555,1556,656],{},[325,1481,1482],{},"Correlazione log↔errori su mobile (auto-trace)"," — CYDA-6. Il ",[356,1485,769],{}," non era ",[325,1488,1489],{},"mai"," popolato\nautomaticamente su Dart (a differenza del client JS per-pagina e del gem Ruby per-richiesta): senza\nuna ",[356,1492,1493],{},"setTraceId"," manuale ogni evento partiva con ",[356,1496,769],{}," assente e log\u002Ferrori\u002Fmetriche di uno\nstesso tap erano ",[325,1499,1500],{},"impossibili da correlare",". Ora lo ",[356,1503,1504],{},"Scope",[325,1506,1507],{},"auto-popola"," il ",[356,1510,769],{}," per\nunità logica — ",[356,1513,1514],{},"ensureTraceId()"," ne genera uno (32 hex) al primo evento e lo condivide con tutti\nquelli successivi (stesso tap\u002Fschermata), mentre il ",[356,1517,1518],{},"CloseYourItNavigatorObserver"," lo ",[325,1521,1522],{},"ruota a\nogni navigazione",[356,1524,1525],{},"rotateTraceId()",", parità col \"per-pagina\" di JS; su ",[356,1528,1529],{},"didRemove"," ruota solo se\nviene rimossa la schermata ",[325,1532,1533],{},"in cima"," — la route sotto torna visibile — non per la rimozione di una\nroute sepolta come in ",[356,1536,1537],{},"pushAndRemoveUntil","). Una\n",[356,1540,1493],{}," esplicita ",[325,1543,1544],{},"vince e sopravvive alla navigazione"," (il flusso correlato a mano, es. un\ncheckout multi-schermata, non viene ruotato finché non lo si rilascia con\n",[356,1547,1548],{},"setTraceId(null)",[356,1550,1551],{},"clearScope","); senza pin, ",[356,1554,1551],{}," riparte lazy. Nessun evento resta più\nsenza ",[356,1557,769],{},[318,1559,1561],{"id":1560},"_040-2026-07-02","0.4.0 · 2026-07-02",[314,1563,1564],{},[325,1565,445],{},[329,1567,1568,1599],{},[332,1569,1570,1371,1573,1576,1577,1580,1581,1584,1585,1587,1588,1590,1591,1594,1595,1598],{},[325,1571,1572],{},"Device\u002FOS\u002Fapp context automatici",[356,1574,1575],{},"contexts.device"," (model, manufacturer, simulator),\n",[356,1578,1579],{},"contexts.os"," (name, version) e ",[356,1582,1583],{},"contexts.app"," (app_version, build_number, bundle_id) raccolti\nall'init via ",[356,1586,975],{}," + ",[356,1589,978],{}," e installati nello scope — ogni evento li\neredita. Best-effort su ogni piattaforma (web incluso), provider iniettabile nei test\n(",[356,1592,1593],{},"DeviceContextProvider","). Config ",[356,1596,1597],{},"collectDeviceContext"," (default true).",[332,1600,1601,1604,1605,1608,1609,1612],{},[325,1602,1603],{},"Auto-release",": quando ",[356,1606,1607],{},"options.release"," non è impostata, la release diventa\n",[356,1610,1611],{},"app_version+build_number"," (stile pubspec) derivata dall'app context; le options esplicite vincono.",[314,1614,1615],{},[325,1616,327],{},[329,1618,1619],{},[332,1620,1621,1622,1625,1626,1629],{},"Assert di versione SDK stantii nei test (",[356,1623,1624],{},"0.1.0"," → ",[356,1627,1628],{},"0.3.0",", rotti dal bump di release).",[318,1631,1633],{"id":1632},"_030-2026-06-29","0.3.0 · 2026-06-29",[314,1635,1636],{},[325,1637,445],{},[329,1639,1640,1711],{},[332,1641,1642,1645,1646,1649,1650,1652,1653,1656,1657,1660,1661,1663,1664],{},[325,1643,1644],{},"Rilevamento performance issue"," (opt-in ",[356,1647,1648],{},"detectPerformanceIssues",", default OFF; specchio mobile\ndel gem ",[356,1651,47],{},"). Verdetti ",[356,1654,1655],{},"kind=performance_issue"," verso ",[356,1658,1659],{},"\u002Fmetrics",", con ",[356,1662,769],{},":\n",[329,1665,1666,1676,1686,1702],{},[332,1667,1668,1671,1672,1675],{},[356,1669,1670],{},"slow_external_http"," — chiamata HTTP esterna oltre ",[356,1673,1674],{},"slowExternalThresholdMs"," (interceptor Dio;\nesclude l'endpoint CloseYourIt, path templatizzato).",[332,1677,1678,1681,1682,1685],{},[356,1679,1680],{},"repeated_http"," — N chiamate identiche (host+path) entro ",[356,1683,1684],{},"repeatedHttpWindowMs"," (l'N+1 del mobile).",[332,1687,1688,1691,1692,1695,1696,1699,1700,1477],{},[356,1689,1690],{},"jank"," — frame oltre ",[356,1693,1694],{},"jankFrameBudgetMs"," (default 32) via ",[356,1697,1698],{},"addTimingsCallback",", attribuito alla\nroute corrente (dal ",[356,1701,1518],{},[332,1703,1704,1707,1708,656],{},[356,1705,1706],{},"rebuild_storm"," — widget ricostruito troppe volte, via la sonda opt-in ",[356,1709,1710],{},"CloseYourItRebuildProbe",[332,1712,1713,747,1718,739,1721,1724],{},[325,1714,1715,1717],{},[356,1716,769],{}," sulle metriche",[356,1719,1720],{},"MetricEvent",[356,1722,1723],{},"slow_method",") — correlazione con log ed errori.",[318,1726,1728],{"id":1727},"_020-2026-06-29","0.2.0 · 2026-06-29",[314,1730,1731],{},[325,1732,1733],{},"Changed",[329,1735,1736],{},[332,1737,1738,1371,1741,1744,1745,1022,1747,1750,1751,1754,1755,1757],{},[325,1739,1740],{},"BREAKING (minore)",[356,1742,1743],{},"measure()"," \u002F ",[356,1746,1720],{},[356,1748,1749],{},"label"," vuota ora solleva ",[356,1752,1753],{},"ArgumentError",".\nLa label è il fingerprint di ",[356,1756,1723],{},": vuota collassava tutte le metriche in un unico gruppo.",[314,1759,1760],{},[325,1761,1762],{},"Fixed",[329,1764,1765,1778,1788,1796],{},[332,1766,1767,1371,1770,1773,1774,1777],{},[325,1768,1769],{},"Scrub dei messaggi d'eccezione",[356,1771,1772],{},"exception.value"," passa dallo scrubber (",[356,1775,1776],{},"Scrubber.scrubMessage",")\nprima dell'invio — il backend non ri-scrubba i messaggi (parità con il gem, niente PII in chiaro).",[332,1779,1780,1787],{},[325,1781,1782,1783,1786],{},"Chunking dei log a ",[356,1784,1785],{},"logsMaxBatch"," (1000)",": un flush oltre il limite del server veniva rigettato\nin blocco (413) coi log persi; ora è spezzato in invii sequenziali.",[332,1789,1790,1795],{},[325,1791,1792],{},[356,1793,1794],{},"contexts.runtime.version"," ora presente (versione SDK) — parità col gem.",[332,1797,1798,1803,1804,1807,1808,1811],{},[325,1799,1800],{},[356,1801,1802],{},"LogLevel.fromString",": alias ",[356,1805,1806],{},"err","→error e ",[356,1809,1810],{},"unknown","→fatal (parità col gem).",[318,1813,1815],{"id":1814},"_010-2026-06-29","0.1.0 · 2026-06-29",[314,1817,1818,1819,656],{},"Prima release. Specchio Flutter del gem ",[356,1820,47],{},[314,1822,1823],{},[325,1824,1825],{},"Added",[329,1827,1828,1837,1845,1867,1870,1878,1890,1897,1906],{},[332,1829,1830,1022,1833,1836],{},[356,1831,1832],{},"CloseYourIt.init",[356,1834,1835],{},"appRunner"," (zona protetta + gestori globali errori).",[332,1838,1839,1840,739,1842,1844],{},"Cattura errori: ",[356,1841,1166],{},[356,1843,1276],{},", dedup, sampling, formato Sentry.",[332,1846,1847,1848,739,1851,739,1854,739,1857,739,1860,739,1862,739,1865,656],{},"Scope: ",[356,1849,1850],{},"setUser",[356,1852,1853],{},"setTag",[356,1855,1856],{},"setContext",[356,1858,1859],{},"setExtra",[356,1861,1493],{},[356,1863,1864],{},"configureScope",[356,1866,1551],{},[332,1868,1869],{},"Breadcrumbs con ring buffer e scrubbing PII.",[332,1871,1872,1873,1625,1875,1877],{},"Metriche: ",[356,1874,1743],{},[356,1876,1723],{}," oltre soglia.",[332,1879,1880,1881,739,1884,1887,1888,656],{},"Logs: ",[356,1882,1883],{},"log",[356,1885,1886],{},"logger"," con batching (size\u002Fintervallo\u002Flifecycle) e ",[356,1889,769],{},[332,1891,1892,1893,1896],{},"Transport HTTP fire-and-forget (Bearer ",[356,1894,1895],{},"cyi_",", redirect, mai solleva) + background worker bounded.",[332,1898,1899,1900,371,1903,1905],{},"Integrazioni: ",[356,1901,1902],{},"CloseYourItDioInterceptor",[356,1904,1518],{},", flush su lifecycle.",[332,1907,1908,1909,656],{},"Scrubber PII e hook ",[356,1910,898],{},{"title":1912,"searchDepth":19,"depth":19,"links":1913},"",[1914,1915,1916,1917,1918,1919,1920,1921,1922,1923,1924,1925,1926,1927,1928,1929,1930,1931,1932],{"id":320,"depth":19,"text":321},{"id":340,"depth":19,"text":341},{"id":382,"depth":19,"text":383},{"id":398,"depth":19,"text":399},{"id":417,"depth":19,"text":418},{"id":436,"depth":19,"text":437},{"id":456,"depth":19,"text":457},{"id":472,"depth":19,"text":473},{"id":489,"depth":19,"text":490},{"id":521,"depth":19,"text":522},{"id":562,"depth":19,"text":563},{"id":578,"depth":19,"text":579},{"id":722,"depth":19,"text":723},{"id":997,"depth":19,"text":998},{"id":1258,"depth":19,"text":1259},{"id":1560,"depth":19,"text":1561},{"id":1632,"depth":19,"text":1633},{"id":1727,"depth":19,"text":1728},{"id":1814,"depth":19,"text":1815},"md",{},true,{"title":295,"description":296},"docs\u002Fchangelog-sdk-dart","Z3DL4fEk78bcB2jmHNt2PjDBmE3CLsSSS28WKer96js",1791469658496]