{"id":36960,"date":"2026-11-12T12:39:29","date_gmt":"2026-11-12T11:39:29","guid":{"rendered":"https:\/\/www.codemotion.com\/magazine\/?p=36960"},"modified":"2026-11-12T12:39:30","modified_gmt":"2026-11-12T11:39:30","slug":"il-job-esce-senza-errori-ma-il-risultato-non-arriva","status":"publish","type":"post","link":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/","title":{"rendered":"Il job esce senza errori, ma il risultato non arriva"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Nel caso documentato dall&#8217;audit del mio sistema del 31 agosto 2026, un monitor aveva rilevato problemi da segnalare all&#8217;operatore. La notifica Slack era fallita; anche il fallback email era fallito. Il registro era aggiornato e il processo era terminato regolarmente, ma il verdetto non era arrivato. I controlli per alcuni dei guasti esistevano gi\u00e0: era la consegna degli avvisi a interrompersi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;exit code rimane utile per sapere come termina un processo. Per stabilire se il suo lavoro \u00e8 disponibile serve una prova anche alla destinazione. Con gli agenti questo confine conta: produrre un report, proporre una modifica e renderla utilizzabile da un altro programma sono passaggi distinti. Il controllo deve sapere a quale di questi pu\u00f2 assegnare il successo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per mostrarlo con poche righe passeremo a un <strong>esempio didattico diverso dal caso storico<\/strong>: un job produce un report su file per un programma che lo deve importare. Completeremo questo percorso, poi torneremo agli avvisi. Il principio sar\u00e0 lo stesso; cambier\u00e0 il riscontro da cercare. Provenienza e rettifica della diagnosi storica sono nell&#8217;estratto documentale allegato.<\/p>\n\n\n\n<h2 id=\"h-un-report-un-importatore-un-controllo\" class=\"wp-block-heading\">Un report, un importatore, un controllo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nell&#8217;esempio, il job genera un report JSON. L&#8217;importatore \u00e8 il programma destinatario: deve aprire quel report e caricarne il contenuto nella propria applicazione. Il controllo verifica una condizione precedente: che nella destinazione usata dall&#8217;importatore sia leggibile il file dell&#8217;esecuzione attesa.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 questo il confine della dimostrazione. Il controllo non esegue l&#8217;importatore e non certifica un&#8217;importazione riuscita. Il suo verdetto si chiamer\u00e0 <code>OUTPUT_READABLE_OK<\/code>. Per sapere se l&#8217;importatore ha elaborato il report servir\u00e0 invece un riscontro prodotto dall&#8217;importatore, legato alla stessa esecuzione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La sequenza \u00e8 questa:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li>Lo script di avvio stabilisce l&#8217;identificatore dell&#8217;esecuzione e il percorso del report. Li conserva come aspettative e passa entrambi al job.<\/li>\n\n\n\n<li>Il job scrive il report nella destinazione assegnata, includendo l&#8217;identificatore ricevuto.<\/li>\n\n\n\n<li>Dopo il job, lo script di avvio lancia il controllo con le aspettative iniziali. Il controllo apre la destinazione configurata per l&#8217;importatore, senza chiedere al job dove cercare o quale esecuzione aspettarsi.<\/li>\n\n\n\n<li>Il verdetto descrive soltanto quella lettura. L&#8217;importatore, quando viene avviato, rimane responsabile della propria elaborazione e del relativo esito.<\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;origine delle aspettative \u00e8 decisiva. Se il controllo prendesse l&#8217;identificatore dall&#8217;ultimo report disponibile, troverebbe sempre il report giusto per definizione. Anche quello della settimana scorsa.<\/p>\n\n\n\n<h2 id=\"h-il-minimo-eseguibile\" class=\"wp-block-heading\">Il minimo eseguibile<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Crea una cartella locale vuota per la prova e salva al suo interno i programmi seguenti. Useranno soltanto la sottocartella <code>destinatario<\/code>: nessun servizio esterno, database o percorso di produzione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo \u00e8 <code>avvio.py<\/code>. Per rendere leggibili le prove usa l&#8217;identificatore fisso <code>demo-a<\/code>: identifica esclusivamente l&#8217;esercizio descritto qui. In un job reale lo script di avvio deve assegnare un identificatore nuovo a ogni esecuzione e conservarlo prima di avviare il job. Riutilizzare quello fisso impedirebbe di distinguere esecuzioni successive.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-1\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">from<\/span> pathlib <span class=\"hljs-keyword\">import<\/span> Path\n<span class=\"hljs-keyword\">import<\/span> subprocess\n<span class=\"hljs-keyword\">import<\/span> sys\n\nrun_id = <span class=\"hljs-string\">\"demo-a\"<\/span>\noutput = Path(<span class=\"hljs-string\">\"destinatario\/report.json\"<\/span>).resolve()\noutput.parent.mkdir(exist_ok=True)\njob = subprocess.run(&#91;sys.executable, <span class=\"hljs-string\">\"job.py\"<\/span>, run_id, str(output)])\ncheck = subprocess.run(&#91;sys.executable, <span class=\"hljs-string\">\"verifica.py\"<\/span>, run_id, str(output)])\nraise SystemExit(<span class=\"hljs-number\">0<\/span> <span class=\"hljs-keyword\">if<\/span> job.returncode == <span class=\"hljs-number\">0<\/span> and check.returncode == <span class=\"hljs-number\">0<\/span> <span class=\"hljs-keyword\">else<\/span> <span class=\"hljs-number\">1<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-1\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Lo script non trasforma un errore del job in un successo. Esegue comunque il controllo, cos\u00ec pu\u00f2 mostrare anche se il report manca o \u00e8 inutilizzabile; alla fine conserva l&#8217;esito negativo di uno qualsiasi dei passaggi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Questo \u00e8 <code>job.py<\/code>, un produttore dimostrativo che scrive un testo fisso al posto di calcolare un report:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-2\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> json\n<span class=\"hljs-keyword\">import<\/span> sys\n<span class=\"hljs-keyword\">from<\/span> pathlib <span class=\"hljs-keyword\">import<\/span> Path\n\nrun_id, filename = sys.argv&#91;<span class=\"hljs-number\">1<\/span>:]\nreport = {<span class=\"hljs-string\">\"run_id\"<\/span>: run_id, <span class=\"hljs-string\">\"payload\"<\/span>: <span class=\"hljs-string\">\"Report pronto\"<\/span>}\nPath(filename).write_text(json.dumps(report), encoding=<span class=\"hljs-string\">\"utf-8\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-2\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Infine <code>verifica.py<\/code> controlla il documento obbligatorio. Non contiene una dichiarazione di consegna scritta dal produttore, n\u00e9 una politica di skip da interpretare prima di aver visto il caso normale.<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-3\" data-shcb-language-name=\"JavaScript\" data-shcb-language-slug=\"javascript\"><span><code class=\"hljs language-javascript\"><span class=\"hljs-keyword\">import<\/span> json\n<span class=\"hljs-keyword\">import<\/span> sys\n<span class=\"hljs-keyword\">from<\/span> pathlib <span class=\"hljs-keyword\">import<\/span> Path\n\nexpected_run, filename = sys.argv&#91;<span class=\"hljs-number\">1<\/span>:]\n<span class=\"hljs-attr\">try<\/span>:\n    report = json.loads(Path(filename).read_text(encoding=<span class=\"hljs-string\">\"utf-8\"<\/span>))\n    <span class=\"hljs-keyword\">if<\/span> not isinstance(report, dict):\n        raise ValueError(<span class=\"hljs-string\">\"Il report non \u00e8 un oggetto JSON\"<\/span>)\n    <span class=\"hljs-keyword\">if<\/span> report.get(<span class=\"hljs-string\">\"run_id\"<\/span>) != expected_run:\n        raise ValueError(<span class=\"hljs-string\">\"Il report appartiene a un altro run\"<\/span>)\n    payload = report.get(<span class=\"hljs-string\">\"payload\"<\/span>)\n    <span class=\"hljs-keyword\">if<\/span> not isinstance(payload, str) or not payload.strip():\n        raise ValueError(<span class=\"hljs-string\">\"Il report \u00e8 vuoto o ha un payload non valido\"<\/span>)\nexcept (OSError, UnicodeError, ValueError) <span class=\"hljs-keyword\">as<\/span> error:\n    raise SystemExit(f<span class=\"hljs-string\">\"VERIFY_FAILED: {error}\"<\/span>)\n\nprint(f<span class=\"hljs-string\">\"OUTPUT_READABLE_OK run_id={expected_run}\"<\/span>)<\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-3\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">JavaScript<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">javascript<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Dalla cartella della prova esegui:<\/p>\n\n\n<pre class=\"wp-block-code\" aria-describedby=\"shcb-language-4\" data-shcb-language-name=\"CSS\" data-shcb-language-slug=\"css\"><span><code class=\"hljs language-css\"><span class=\"hljs-selector-tag\">python3<\/span> <span class=\"hljs-selector-tag\">avvio<\/span><span class=\"hljs-selector-class\">.py<\/span><\/code><\/span><small class=\"shcb-language\" id=\"shcb-language-4\"><span class=\"shcb-language__label\">Code language:<\/span> <span class=\"shcb-language__name\">CSS<\/span> <span class=\"shcb-language__paren\">(<\/span><span class=\"shcb-language__slug\">css<\/span><span class=\"shcb-language__paren\">)<\/span><\/small><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Il job scrive <code>destinatario\/report.json<\/code>; il controllo lo apre e stampa <code>OUTPUT_READABLE_OK run_id=demo-a<\/code>. Lo script di avvio termina con successo perch\u00e9 entrambi i programmi sono riusciti.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Qui i programmi girano con lo stesso utente, nello stesso ambiente locale. In un sistema reale il controllo deve avere accessi, percorso e configurazione equivalenti a quelli dell&#8217;importatore. Leggere con l&#8217;utente del job un file che l&#8217;importatore non pu\u00f2 aprire non dimostra questa disponibilit\u00e0.<\/p>\n\n\n\n<h2 id=\"h-lo-stesso-report-quando-qualcosa-manca\" class=\"wp-block-heading\">Lo stesso report, quando qualcosa manca<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ora proviamo soltanto il controllo. Non rilanciare <code>avvio.py<\/code>: il job ricreerebbe il file e cancellerebbe la condizione che vogliamo osservare. L&#8217;identificatore atteso resta <code>demo-a<\/code>, scelto dall&#8217;esercizio, indipendentemente dal contenuto del report.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il comando \u00e8 sempre questo, dalla stessa cartella:<\/p>\n\n\n<pre class=\"wp-block-code\"><span><code class=\"hljs\">python3 verifica.py demo-a destinatario\/report.json<\/code><\/span><\/pre>\n\n\n<p class=\"wp-block-paragraph\">Per ogni prova sostituisci il contenuto di <code>destinatario\/report.json<\/code> con l&#8217;input indicato. Nel caso mancante, sposta temporaneamente il file fuori da <code>destinatario<\/code>, lasciando invariato il comando.<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Input nella destinazione attesa<\/th><th>Esito del comando<\/th><\/tr><\/thead><tbody><tr><td><code>{\"run_id\":\"demo-a\",\"payload\":\"Report pronto\"}<\/code><\/td><td><code>OUTPUT_READABLE_OK run_id=demo-a<\/code>, exit <code>0<\/code><\/td><\/tr><tr><td>File assente<\/td><td><code>VERIFY_FAILED<\/code> con errore di file mancante, exit <code>1<\/code><\/td><\/tr><tr><td><code>{\"run_id\":\"demo-prima\",\"payload\":\"Report pronto\"}<\/code><\/td><td><code>VERIFY_FAILED: Il report appartiene a un altro run<\/code>, exit <code>1<\/code><\/td><\/tr><tr><td><code>{\"run_id\":\"demo-a\",\"payload\":\"\"}<\/code><\/td><td><code>VERIFY_FAILED: Il report \u00e8 vuoto o ha un payload non valido<\/code>, exit <code>1<\/code><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">L&#8217;output della riga mancante include un dettaglio del sistema operativo, che pu\u00f2 variare. Il comportamento atteso rimane il fallimento. Anche un JSON malformato o un payload composto soltanto da spazi vengono rifiutati.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il vecchio report \u00e8 il test pi\u00f9 istruttivo: il file esiste ed \u00e8 leggibile, ma non soddisfa l&#8217;esecuzione attesa. Guardare soltanto la sua presenza perderebbe questo caso. La data di modifica non basta: copiare il report precedente pu\u00f2 aggiornarla senza aggiornare il contenuto.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il report accettato, invece, dimostra ancora soltanto presenza, identit\u00e0 dichiarata dell&#8217;esecuzione e leggibilit\u00e0 minima. Il controllo non autentica il produttore e non giudica il significato del testo. Un JSON ben formato pu\u00f2 raccontare qualunque sciocchezza con sintassi impeccabile. Per contenuti reali occorrono verifiche di dominio; per l&#8217;elaborazione successiva occorre il riscontro dell&#8217;importatore.<\/p>\n\n\n\n<h2 id=\"h-chi-si-accorge-che-il-controllo-non-e-partito\" class=\"wp-block-heading\">Chi si accorge che il controllo non \u00e8 partito<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nell&#8217;esercizio lo script di avvio chiama il controllo subito dopo il job. Se il job rimane bloccato, oppure lo script di avvio non parte, quella chiamata non avviene. Il codice non copre queste assenze e non implementa timeout o retry.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nel sistema schedulato, chi pianifica il lavoro deve stabilire in anticipo la scadenza entro cui si aspetta il report e il verdetto. Un controllo esterno, avviato indipendentemente dal job, verifica a quella scadenza che il verdetto dell&#8217;esecuzione sia comparso. Un esito mancante deve restare distinguibile da un controllo eseguito che ha rifiutato il report.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">La scelta della scadenza dipende dalla cadenza del lavoro e dalla tolleranza del destinatario. Va configurata fuori dal report: permettere al job di spostare da solo il momento in cui dovrebbe essere controllato allarga il problema invece di risolverlo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il costo \u00e8 mantenere anche questo piccolo stato atteso e verificare che il controllo esterno giri davvero. Non serve costruire una gerarchia infinita di guardiani: serve scegliere il punto di osservazione indipendente e sapere quali guasti comuni rimangono.<\/p>\n\n\n\n<h2 id=\"h-se-il-report-puo-mancare-legittimamente\" class=\"wp-block-heading\">Se il report pu\u00f2 mancare legittimamente<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Completiamo ora il caso che abbiamo escluso dal primo esempio. Prima di avviare il job, lo script di avvio potrebbe accertare, da una fonte indipendente, che non esistono nuovi input. In quel caso la politica del lavoro pu\u00f2 autorizzare l&#8217;assenza del report.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Deve comunque rimanere un esito distinto e riconducibile all&#8217;esecuzione: per esempio, uno skip motivato dall&#8217;assenza di input, registrato dallo script di avvio. Il controllo della scadenza confronter\u00e0 quell&#8217;esito con l&#8217;autorizzazione gi\u00e0 conservata. Il semplice file mancante continuer\u00e0 a non bastare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 un&#8217;estensione del contratto, non un&#8217;opzione che il job pu\u00f2 attivare scrivendo una giustificazione. Se lo script di avvio si aspettava il report, una dichiarazione di skip proveniente dal job deve richiedere una verifica, senza diventare automaticamente successo. Gli snippet restano volutamente sul caso in cui il report \u00e8 obbligatorio: accettare assenze richiede anche la prova che le autorizza.<\/p>\n\n\n\n<h2 id=\"h-torniamo-all-avviso-che-non-arriva\" class=\"wp-block-heading\">Torniamo all&#8217;avviso che non arriva<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Per gli avvisi cambia l&#8217;oggetto della verifica: la presenza di un file locale non prova che l&#8217;operatore abbia ricevuto il messaggio. La distinzione \u00e8 coerente con il monitoraggio black-box descritto nel capitolo <a href=\"https:\/\/sre.google\/sre-book\/monitoring-distributed-systems\/\">Monitoring Distributed Systems del libro SRE di Google<\/a>, consultato il 30 ottobre 2026: osservare il comportamento disponibile all&#8217;utente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Seguiamo un singolo evento <strong>didattico<\/strong>, <code>avviso-demo<\/code>. Il monitor rileva una condizione e, prima di tentare l&#8217;invio, conserva evento e destinazione con stato pendente. Il processo incaricato dell&#8217;invio prova a comunicare col canale, ma il tentativo fallisce. Registra l&#8217;errore; l&#8217;evento resta pendente. Una politica di retry stabilisce quando riprovare e quando richiedere un intervento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Al tentativo successivo arriva il riscontro scelto dal contratto. Soltanto allora cambia lo stato dell&#8217;evento. La sequenza che dobbiamo poter ricostruire \u00e8 questa:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Passaggio di <code>avviso-demo<\/code><\/th><th>Che cosa rimane osservabile<\/th><\/tr><\/thead><tbody><tr><td>Evento salvato come pendente<\/td><td>Esiste un avviso ancora da consegnare<\/td><\/tr><tr><td>Tentativo fallito<\/td><td>L&#8217;errore del tentativo, senza cancellare l&#8217;avviso pendente<\/td><\/tr><tr><td>Riscontro concordato ottenuto<\/td><td>La prova che autorizza la chiusura per quel livello di consegna<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Quel livello va scelto con precisione. L&#8217;accettazione del provider conferma che il servizio ha accettato il messaggio. Il riscontro della sua presenza nel canale destinatario conferma un passaggio ulteriore. La lettura o presa in carico umana ne conferma un altro ancora. Per un allarme che richiede intervento, fermarsi al primo livello pu\u00f2 essere insufficiente.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Il registro deve conservare quale riscontro \u00e8 stato ottenuto, senza chiamare tutto <code>sent<\/code>. Va inoltre sorvegliata l&#8217;et\u00e0 degli eventi pendenti da un processo indipendente da quello che tenta l&#8217;invio. Un retry pu\u00f2 produrre duplicati se il servizio ha ricevuto il messaggio ma la risposta si \u00e8 persa: l&#8217;identificatore stabile aiuta a riconoscerli, senza promettere che il canale li elimini.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">\u00c8 qui che il caso storico torna utile. I canali Slack ed email erano diversi, ma i tentativi dipendevano dalla rete della stessa macchina. Cambiare destinatario senza cambiare il punto di guasto lascia una ridondanza molto educata: fallisce insieme al canale principale. Il rimedio da progettare riguarda conservazione, ritrasmissione e riscontro; lo snippet sul file dimostra soltanto il principio di verificare una destinazione, non implementa quel percorso di notifica.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Una breve variante riguarda Git: se il programma destinatario legge <code>main<\/code>, trovare il report nel branch del job non ne prova la disponibilit\u00e0. Il riferimento letto entra nel contratto come il percorso del file. Una pull request pu\u00f2 essere un risultato corretto per un agente autorizzato a proporre modifiche, ma non coincide con il prodotto gi\u00e0 disponibile in produzione.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per iniziare, scegli un job e nomina il suo destinatario. Scrivi quale risultato aspetta, dove e per quale esecuzione. In una prova isolata fai mancare quel risultato, anche lasciando terminare regolarmente il job. Osserva poi il controllo e il suo riscontro: da l\u00ec emerge il tratto della consegna che devi ancora verificare.<\/p>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Articolo scritto con l&#8217;assistenza dell&#8217;AI, ideato e riletto da Giovanni Liguori.<\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Nel caso documentato dall&#8217;audit del mio sistema del 31 agosto 2026, un monitor aveva rilevato problemi da segnalare all&#8217;operatore. La notifica Slack era fallita; anche il fallback email era fallito. Il registro era aggiornato e il processo era terminato regolarmente, ma il verdetto non era arrivato. I controlli per alcuni dei guasti esistevano gi\u00e0: era&#8230; <a class=\"more-link\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/\">Read more<\/a><\/p>\n","protected":false},"author":355,"featured_media":36999,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_editorskit_title_hidden":false,"_editorskit_reading_time":0,"_editorskit_is_block_options_detached":false,"_editorskit_block_options_position":"{}","_uag_custom_page_level_css":"","_genesis_hide_title":false,"_genesis_hide_breadcrumbs":false,"_genesis_hide_singular_image":false,"_genesis_hide_footer_widgets":false,"_genesis_custom_body_class":"","_genesis_custom_post_class":"","_genesis_layout":"","footnotes":""},"categories":[10261],"tags":[],"collections":[11708],"class_list":["post-36960","post","type-post","status-publish","format-standard","has-post-thumbnail","category-intelligenza-artificiale","collections-dalla-community","entry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.6 (Yoast SEO v28.6) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Il job esce senza errori, ma il risultato non arriva - Codemotion Magazine<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Il job esce senza errori, ma il risultato non arriva\" \/>\n<meta property=\"og:description\" content=\"Nel caso documentato dall&#8217;audit del mio sistema del 31 agosto 2026, un monitor aveva rilevato problemi da segnalare all&#8217;operatore. La notifica Slack era fallita; anche il fallback email era fallito. Il registro era aggiornato e il processo era terminato regolarmente, ma il verdetto non era arrivato. I controlli per alcuni dei guasti esistevano gi\u00e0: era&#8230; Read more\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/\" \/>\n<meta property=\"og:site_name\" content=\"Codemotion Magazine\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/Codemotion.Italy\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-11-12T11:39:29+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-11-12T11:39:30+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1672\" \/>\n\t<meta property=\"og:image:height\" content=\"941\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Giovanni Liguori\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:site\" content=\"@CodemotionIT\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Giovanni Liguori\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/\"},\"author\":{\"name\":\"Giovanni Liguori\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/6847dc6e0577d5d85111527fbc9e5a71\"},\"headline\":\"Il job esce senza errori, ma il risultato non arriva\",\"datePublished\":\"2026-11-12T11:39:29+00:00\",\"dateModified\":\"2026-11-12T11:39:30+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/\"},\"wordCount\":1594,\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/Workflow-digitale-con-verifica-di-successo.png\",\"articleSection\":[\"Intelligenza artificiale\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/\",\"name\":\"Il job esce senza errori, ma il risultato non arriva - Codemotion Magazine\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/Workflow-digitale-con-verifica-di-successo.png\",\"datePublished\":\"2026-11-12T11:39:29+00:00\",\"dateModified\":\"2026-11-12T11:39:30+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/#primaryimage\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/Workflow-digitale-con-verifica-di-successo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/Workflow-digitale-con-verifica-di-successo.png\",\"width\":1672,\"height\":941,\"caption\":\"verifica digitale\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Intelligenza artificiale\",\"item\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/it\\\/intelligenza-artificiale\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Il job esce senza errori, ma il risultato non arriva\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#website\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"name\":\"Codemotion Magazine\",\"description\":\"We code the future. Together\",\"publisher\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#organization\",\"name\":\"Codemotion\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2019\\\/11\\\/codemotionlogo.png\",\"width\":225,\"height\":225,\"caption\":\"Codemotion\"},\"image\":{\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/logo\\\/image\\\/\"},\"sameAs\":[\"https:\\\/\\\/www.facebook.com\\\/Codemotion.Italy\\\/\",\"https:\\\/\\\/x.com\\\/CodemotionIT\"]},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/#\\\/schema\\\/person\\\/6847dc6e0577d5d85111527fbc9e5a71\",\"name\":\"Giovanni Liguori\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/giovanni-liguori-codemotion-quadrata-100x100.jpg\",\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/giovanni-liguori-codemotion-quadrata-100x100.jpg\",\"contentUrl\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/wp-content\\\/uploads\\\/2026\\\/11\\\/giovanni-liguori-codemotion-quadrata-100x100.jpg\",\"caption\":\"Giovanni Liguori\"},\"url\":\"https:\\\/\\\/www.codemotion.com\\\/magazine\\\/author\\\/giovanni-liguori\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Il job esce senza errori, ma il risultato non arriva - Codemotion Magazine","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/","og_locale":"en_US","og_type":"article","og_title":"Il job esce senza errori, ma il risultato non arriva","og_description":"Nel caso documentato dall&#8217;audit del mio sistema del 31 agosto 2026, un monitor aveva rilevato problemi da segnalare all&#8217;operatore. La notifica Slack era fallita; anche il fallback email era fallito. Il registro era aggiornato e il processo era terminato regolarmente, ma il verdetto non era arrivato. I controlli per alcuni dei guasti esistevano gi\u00e0: era&#8230; Read more","og_url":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/","og_site_name":"Codemotion Magazine","article_publisher":"https:\/\/www.facebook.com\/Codemotion.Italy\/","article_published_time":"2026-11-12T11:39:29+00:00","article_modified_time":"2026-11-12T11:39:30+00:00","og_image":[{"width":1672,"height":941,"url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo.png","type":"image\/png"}],"author":"Giovanni Liguori","twitter_card":"summary_large_image","twitter_creator":"@CodemotionIT","twitter_site":"@CodemotionIT","twitter_misc":{"Written by":"Giovanni Liguori","Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/#article","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/"},"author":{"name":"Giovanni Liguori","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6847dc6e0577d5d85111527fbc9e5a71"},"headline":"Il job esce senza errori, ma il risultato non arriva","datePublished":"2026-11-12T11:39:29+00:00","dateModified":"2026-11-12T11:39:30+00:00","mainEntityOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/"},"wordCount":1594,"publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo.png","articleSection":["Intelligenza artificiale"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/","url":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/","name":"Il job esce senza errori, ma il risultato non arriva - Codemotion Magazine","isPartOf":{"@id":"https:\/\/www.codemotion.com\/magazine\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/#primaryimage"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/#primaryimage"},"thumbnailUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo.png","datePublished":"2026-11-12T11:39:29+00:00","dateModified":"2026-11-12T11:39:30+00:00","breadcrumb":{"@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/#primaryimage","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo.png","width":1672,"height":941,"caption":"verifica digitale"},{"@type":"BreadcrumbList","@id":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/il-job-esce-senza-errori-ma-il-risultato-non-arriva\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.codemotion.com\/magazine\/"},{"@type":"ListItem","position":2,"name":"Intelligenza artificiale","item":"https:\/\/www.codemotion.com\/magazine\/it\/intelligenza-artificiale\/"},{"@type":"ListItem","position":3,"name":"Il job esce senza errori, ma il risultato non arriva"}]},{"@type":"WebSite","@id":"https:\/\/www.codemotion.com\/magazine\/#website","url":"https:\/\/www.codemotion.com\/magazine\/","name":"Codemotion Magazine","description":"We code the future. Together","publisher":{"@id":"https:\/\/www.codemotion.com\/magazine\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.codemotion.com\/magazine\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.codemotion.com\/magazine\/#organization","name":"Codemotion","url":"https:\/\/www.codemotion.com\/magazine\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2019\/11\/codemotionlogo.png","width":225,"height":225,"caption":"Codemotion"},"image":{"@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/Codemotion.Italy\/","https:\/\/x.com\/CodemotionIT"]},{"@type":"Person","@id":"https:\/\/www.codemotion.com\/magazine\/#\/schema\/person\/6847dc6e0577d5d85111527fbc9e5a71","name":"Giovanni Liguori","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/giovanni-liguori-codemotion-quadrata-100x100.jpg","url":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/giovanni-liguori-codemotion-quadrata-100x100.jpg","contentUrl":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/giovanni-liguori-codemotion-quadrata-100x100.jpg","caption":"Giovanni Liguori"},"url":"https:\/\/www.codemotion.com\/magazine\/author\/giovanni-liguori\/"}]}},"featured_image_src":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-600x400.png","featured_image_src_square":"https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-600x600.png","author_info":{"display_name":"Giovanni Liguori","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/giovanni-liguori\/"},"uagb_featured_image_src":{"full":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo.png",1672,941,false],"thumbnail":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-150x150.png",150,150,true],"medium":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-300x169.png",300,169,true],"medium_large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-768x432.png",768,432,true],"large":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-1024x576.png",1024,576,true],"1536x1536":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-1536x864.png",1536,864,true],"2048x2048":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo.png",1672,941,false],"small-home-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-100x100.png",100,100,true],"sidebar-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-180x128.png",180,128,true],"genesis-singular-images":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-896x504.png",896,504,true],"archive-featured":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-400x225.png",400,225,true],"gb-block-post-grid-landscape":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-600x400.png",600,400,true],"gb-block-post-grid-square":["https:\/\/www.codemotion.com\/magazine\/wp-content\/uploads\/2026\/11\/Workflow-digitale-con-verifica-di-successo-600x600.png",600,600,true]},"uagb_author_info":{"display_name":"Giovanni Liguori","author_link":"https:\/\/www.codemotion.com\/magazine\/author\/giovanni-liguori\/"},"uagb_comment_info":0,"uagb_excerpt":"Nel caso documentato dall&#8217;audit del mio sistema del 31 agosto 2026, un monitor aveva rilevato problemi da segnalare all&#8217;operatore. La notifica Slack era fallita; anche il fallback email era fallito. Il registro era aggiornato e il processo era terminato regolarmente, ma il verdetto non era arrivato. I controlli per alcuni dei guasti esistevano gi\u00e0: era&#8230;&hellip;","lang":"it","_links":{"self":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36960","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/users\/355"}],"replies":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/comments?post=36960"}],"version-history":[{"count":3,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36960\/revisions"}],"predecessor-version":[{"id":37000,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/posts\/36960\/revisions\/37000"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media\/36999"}],"wp:attachment":[{"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/media?parent=36960"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/categories?post=36960"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/tags?post=36960"},{"taxonomy":"collections","embeddable":true,"href":"https:\/\/www.codemotion.com\/magazine\/wp-json\/wp\/v2\/collections?post=36960"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}