> ## Documentation Index
> Fetch the complete documentation index at: https://docs.devinenterprise.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Triage automatico dei bug con Linear

export const UseCaseHero = ({title, description, prompt, category, features, devinUrl, agent, intent, playbookId, type}) => {
  const encodedPrompt = encodeURIComponent(prompt || '');
  const tag = 'docs-use-case-gallery';
  const utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=hero-cta';
  const agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  const devinHref = type === 'schedule' ? 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + (prompt ? '&prompt=' + encodedPrompt : '') : type === 'review' ? 'https://app.devin.ai/review?' + utm : agent === 'ada' ? 'https://app.devin.ai/search?' + utm + '&noSubmit=true' + (prompt ? '&prompt=' + encodedPrompt : '') : devinUrl ? devinUrl.includes('?') ? devinUrl + '&' + utm + agentParams : devinUrl + '?' + utm + agentParams : prompt ? 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encodedPrompt : 'https://app.devin.ai/?' + utm + agentParams;
  const buttonLabel = type === 'schedule' ? 'Schedule in Devin ↗' : type === 'review' ? 'Set Up Devin Review ↗' : agent === 'advanced' ? 'Try in Devin ↗' : agent === 'dana' ? 'Try in Dana ↗' : agent === 'ada' ? 'Try in Ask Devin ↗' : 'Try in Devin ↗';
  const featureList = features ? features.split(',').map(f => f.trim()) : [];
  return <div className="uc-hero">
      <div className="uc-hero-inner">
        <div className="uc-hero-left">
          <h1 className="uc-hero-title">{title}</h1>
          <p className="uc-hero-desc">{description}</p>
          <div>
            <a href={devinHref} target="_blank" rel="noopener noreferrer" className="try-in-devin-btn">
              {buttonLabel}
            </a>
          </div>
        </div>
        <div className="uc-hero-meta">
          <div className="uc-meta-item">
            <span className="uc-meta-label">Author</span>
            <span className="uc-meta-value">Cognition</span>
          </div>
          <div className="uc-meta-item">
            <span className="uc-meta-label">Category</span>
            <span className="uc-meta-value">{category}</span>
          </div>
          {featureList.length > 0 && <div className="uc-meta-item">
              <span className="uc-meta-label">Features</span>
              <span className="uc-meta-value">{featureList.join(', ')}</span>
            </div>}
        </div>
      </div>
    </div>;
};

export const PromptBlock = ({children, type, agent, intent, playbookId}) => {
  var utm = 'utm_source=docs&utm_medium=use-case-gallery&utm_campaign=prompt-block';
  var tag = 'docs-use-case-gallery';
  var agentParams = (agent ? '&agent=' + agent : '') + (intent ? '&intent=' + intent : '') + (playbookId ? '&playbookId=' + playbookId : '');
  var label = type === 'schedule' ? 'Schedule in Devin' : type === 'playbook' ? 'Create Playbook' : type === 'knowledge' ? 'Add to Knowledge' : agent === 'advanced' ? 'Try in Devin' : agent === 'dana' ? 'Try in Dana' : agent === 'ada' ? 'Try in Ask Devin' : 'Try in Devin';
  var buildUrl = function (text) {
    var encoded = encodeURIComponent(text);
    if (type === 'schedule') return 'https://app.devin.ai/settings/schedules/create?' + utm + agentParams + '&prompt=' + encoded;
    if (type === 'playbook') return 'https://app.devin.ai/settings/playbooks/create?' + utm + '&body=' + encoded;
    if (type === 'knowledge') return 'https://app.devin.ai/knowledge?' + utm + '&body=' + encoded;
    if (agent === 'ada') return 'https://app.devin.ai/search?' + utm + '&noSubmit=true&prompt=' + encoded;
    return 'https://app.devin.ai/?tags=' + tag + '&' + utm + agentParams + '&prompt=' + encoded;
  };
  const ref = React.useRef(null);
  const [href, setHref] = React.useState('#');
  React.useEffect(() => {
    if (!ref.current) return;
    var codeEl = ref.current.querySelector('pre code');
    if (codeEl) {
      var text = codeEl.textContent.trim();
      if (text) setHref(buildUrl(text));
    }
    var header = ref.current.querySelector('[data-component-part="code-block-header"]');
    if (header && !header.querySelector('.prompt-block-devin-link')) {
      var link = document.createElement('a');
      link.href = href;
      link.target = '_blank';
      link.rel = 'noopener noreferrer';
      link.className = 'prompt-block-devin-link';
      link.style.cssText = 'display:inline-flex;align-items:center;gap:6px;text-decoration:none;color:#fff;font-size:11px;font-weight:500;padding:4px 10px;border-radius:6px;white-space:nowrap;background:#317CFF;transition:background 0.2s;margin-left:8px;';
      link.innerHTML = '<svg xmlns="http://www.w3.org/2000/svg" width="12" height="12" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"/><polyline points="15 3 21 3 21 9"/><line x1="10" y1="14" x2="21" y2="3"/></svg> ' + label;
      link.onmouseenter = function () {
        link.style.background = '#2968D9';
      };
      link.onmouseleave = function () {
        link.style.background = '#317CFF';
      };
      header.appendChild(link);
    }
    var existingLink = ref.current.querySelector('.prompt-block-devin-link');
    if (existingLink && href !== '#') existingLink.href = href;
  });
  return <div className="prompt-block" ref={ref}>{children}</div>;
};

<UseCaseHero title="Classificazione automatica dei bug con Linear" description="Devin analizza automaticamente i bug non appena viene applicata un'etichetta in Linear." prompt="Leggi la segnalazione di bug su questo ticket in Linear. Cerca nella base di codice i percorsi di codice rilevanti e identifica la causa principale." category="Gestione dei progetti" features="Integrazioni, Playbook" devinUrl="https://app.devin.ai/settings/connections/linear" />

<div className="uc-detail-wrapper">
  <Tip>Non vuoi configurarlo manualmente? Incolla un collegamento a questa pagina in una sessione di Devin e chiedigli di impostare tutto per te.</Tip>

  <Steps>
    <Step title="Crea un playbook di triage">
      L’automazione ha bisogno di un playbook che dica a Devin *come* il tuo team esegue il triage dei bug — non solo "correggi il bug," ma i passaggi specifici che un ingegnere seguirebbe.

      Inizia duplicando il `!triage` [playbook modello](https://app.devin.ai/settings/playbooks/14fed18b89d44713a26e673cf258f548?utm_source=docs\&utm_medium=use-case-gallery) e personalizzandolo per il tuo stack. Oppure vai su [**Settings > Playbooks**](https://app.devin.ai/settings/playbooks?utm_source=docs\&utm_medium=use-case-gallery) e crea un nuovo playbook con la macro `!triage-bug`. Ecco un esempio:

      <PromptBlock type="playbook">
        ```txt Triage playbook example theme={null}
        Leggi il bug report su questo ticket Linear. Poi:

        1. Cerca nella codebase i percorsi di codice rilevanti menzionati nel report
        2. Controlla il git log per le modifiche recenti a quei file
        3. Identifica la causa radice e riassumi le tue conclusioni: causa radice,
           file interessati, modifiche recenti che potrebbero averla causata e un
           approccio di correzione suggerito
        ```
      </PromptBlock>

      Più il tuo playbook è specifico, migliore sarà il triage di Devin. Fai riferimento ai flussi di lavoro reali del tuo team — convenzioni di logging degli errori, framework di test, regole di naming dei branch. Consulta la [documentazione sui playbook](/it/product-guides/creating-playbooks) per maggiori dettagli su come scrivere playbook efficaci, oppure chiedi a Devin di generare un playbook per te.

      <Tip>Collega il [Datadog MCP](/it/work-with-devin/mcp#datadog) (o altri servizi di logging/monitoraggio) e concedi a Devin accesso in sola lettura al database, così che possa controllare log, metriche e interrogare i dati come parte della sua analisi.</Tip>
    </Step>

    <Step title="Collega il trigger dell'automazione">
      Ora collega il playbook a Linear in modo che si attivi automaticamente quando un bug viene etichettato.

      1. Vai su [**Settings > Connections > Linear**](https://app.devin.ai/settings/connections/linear?utm_source=docs\&utm_medium=use-case-gallery) (collega prima l'integrazione se non l'hai ancora fatto — [guida alla configurazione](/it/integrations/linear))
      2. In **Synced playbook labels**, fai clic su **Add playbook** e seleziona `!triage-bug` — questo crea un'etichetta corrispondente nel gruppo di etichette **"Devin Playbooks"** di Linear
      3. Scorri fino a **Automation triggers** e fai clic su **Add trigger**:
         * **Teams**: seleziona il team in cui vengono registrati i bug (ad es. "Engineering")
         * **Labels**: seleziona `Bug` (o qualunque etichetta il tuo team utilizzi per le segnalazioni di bug)
         * **Playbook**: seleziona `!triage-bug`
      4. Salva il trigger

      I trigger usano il **rilevamento dei cambi di stato**: si attivano solo quando un ticket *passa* a una condizione che corrisponde ai criteri (ad esempio, quando qualcuno aggiunge l'etichetta `Bug`), non per i ticket che ce l'hanno già. Questo significa che non attiverai accidentalmente Devin sull'intero backlog esistente.

      <Note>Perché le etichette dei playbook si sincronizzino automaticamente con Linear, il tuo workspace Linear deve avere **Manage workspace labels** impostato su **All members** (si trova in **Settings > Security** di Linear). Se questa opzione non è abilitata, dovrai creare manualmente le etichette in Linear.</Note>
    </Step>

    <Step title="Etichetta un bug e guarda Devin indagare">
      Quando un ingegnere aggiunge l'etichetta `Bug` a un ticket Linear come questo:

      > **ENG-487**: Gli utenti vedono un errore 500 quando inviano il modulo di contatto su /contact. Il problema è iniziato dopo il deploy di venerdì scorso. Lo stack trace punta a `validateEmail()` in `src/lib/forms.ts`.

      Devin avvia automaticamente una sessione e segue il tuo playbook di triage:

      * **Legge il ticket** — recupera il titolo, la descrizione e tutti i commenti da Linear
      * **Cerca nel codebase** — trova `src/lib/forms.ts`, l'handler della route in `src/routes/contact.ts` e i test di validazione del modulo
      * **Verifica le modifiche recenti** — esegue `git log --since="last Friday" -- src/lib/forms.ts` e individua un commit che ha ristrutturato la regex per le email

      I risultati di Devin vengono sincronizzati automaticamente sul ticket Linear tramite l'integrazione. Tutto questo avviene senza che nessuno assegni il ticket a Devin: la sola etichetta attiva l'intero workflow.

      <Tip>Con l'integrazione Linear installata, Devin ha accesso nativo agli strumenti di Linear — quindi il tuo playbook può istruire Devin ad aggiornare le etichette dei ticket in base ai suoi risultati. Ad esempio, il tuo playbook di triage potrebbe dire a Devin di aggiungere un'etichetta `Clear Fix`, `Needs Review` o `Lacking Context` a seconda dell'esito. Dato che le etichette possono attivare altre automazioni, puoi concatenare i workflow — ad esempio, un'etichetta `Clear Fix` potrebbe avviare una seconda sessione di Devin che scrive la correzione.</Tip>
    </Step>

    <Step title="Affina il ciclo">
      Dopo alcuni triage, affina il sistema in base a ciò che Devin fa correttamente e a dove ha bisogno di maggiori indicazioni.

      **Migliora il playbook sulla base delle sessioni reali.** Se Devin omette sistematicamente qualcosa (ad esempio non controlla i log o si perde un servizio correlato), aggiungi quel passaggio al tuo playbook `!triage-bug`. Puoi chiedere a Devin di analizzare le sessioni passate e migliorare automaticamente il tuo playbook oppure creare voci in [Knowledge](/it/product-guides/knowledge) per i pattern che Devin dovrebbe seguire in tutte le sessioni — ad esempio "controlla sempre prima la dashboard di error tracking" oppure "i log del nostro servizio di auth sono in CloudWatch, non in Datadog."

      **Aggiungi un playbook di correzione quando sei pronto.** Una volta che ti fidi del triage di Devin, crea un secondo playbook come `!fix-bug` che vada oltre — scrivendo una correzione, aggiungendo un test di regressione e aprendo una PR. Mappalo a un'etichetta separata così il tuo team può scegliere tra "dimmi solo cosa non va" e "sistemalo per me":

      <PromptBlock type="playbook">
        ```txt Esempio di playbook di correzione theme={null}
        Leggi la segnalazione di bug su questo ticket Linear. Poi:

        1. Cerca nella codebase i percorsi di codice rilevanti menzionati nel report
        2. Controlla il git log per le modifiche recenti a quei file
        3. Identifica la causa principale
        4. Scrivi una correzione che risolva la causa principale
        5. Aggiungi un test di regressione che avrebbe intercettato questo bug
        6. Esegui la test suite esistente per assicurarti che nient&#39;altro si rompa
        7. Apri una PR collegata al ticket Linear — includi "Fixes ENG-XXX" nella
           descrizione della PR
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
