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

# Triage automatique des bogues via 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="Triage automatique des bugs via Linear" description="Devin enquête automatiquement sur les bugs dès qu\u00a0une étiquette est appliquée dans Linear." prompt="Lire le rapport de bug sur ce ticket Linear. Rechercher dans la base de code les chemins de code pertinents et identifier la cause profonde." category="Gestion de projet" features="Intégrations, Playbooks" devinUrl="https://app.devin.ai/settings/connections/linear" />

<div className="uc-detail-wrapper">
  <Tip>Vous ne souhaitez pas effectuer cette configuration manuellement ? Collez un lien vers cette page dans une session Devin et demandez-lui de tout configurer pour vous.</Tip>

  <Steps>
    <Step title="Rédiger un playbook de triage">
      L’automatisation a besoin d’un playbook qui indique à Devin *comment* votre équipe effectue le triage des bugs — pas seulement "corriger le bug," mais les étapes précises qu’un ingénieur suivrait.

      Commencez par dupliquer le [playbook modèle `!triage`](https://app.devin.ai/settings/playbooks/14fed18b89d44713a26e673cf258f548?utm_source=docs\&utm_medium=use-case-gallery) et le personnaliser pour votre stack. Vous pouvez aussi aller dans [**Settings > Playbooks**](https://app.devin.ai/settings/playbooks?utm_source=docs\&utm_medium=use-case-gallery) et créer un nouveau playbook avec la macro `!triage-bug`. Voici un exemple :

      <PromptBlock type="playbook">
        ```txt Exemple de playbook de triage theme={null}
        Lisez le rapport de bug sur ce ticket Linear. Puis :

        1. Recherchez dans la base de code les chemins de code pertinents mentionnés dans le rapport
        2. Vérifiez le journal Git pour les changements récents sur ces fichiers
        3. Identifiez la cause racine et résumez vos conclusions : cause racine,
           fichiers affectés, changements récents qui ont pu la provoquer, et
           une approche de correction suggérée
        ```
      </PromptBlock>

      Plus votre playbook est précis, meilleur sera le triage de Devin. Appuyez-vous sur les pratiques réelles de votre équipe — conventions de journalisation des erreurs, frameworks de test, règles de nommage de branches. Consultez la [documentation sur les playbooks](/fr/product-guides/creating-playbooks) pour en savoir plus sur l’écriture de playbooks efficaces, ou demandez à Devin de générer un playbook pour vous.

      <Tip>Connectez le [Datadog MCP](/fr/work-with-devin/mcp#datadog) (ou d’autres services de journalisation / supervision) et donnez à Devin un accès en lecture seule à la base de données afin qu’il puisse consulter les logs, les métriques et interroger les données dans le cadre de son enquête.</Tip>
    </Step>

    <Step title="Configurer le déclencheur d’automatisation">
      Connectez maintenant le playbook à Linear pour qu’il se déclenche automatiquement lorsqu’un bug se voit attribuer un label.

      1. Allez dans [**Settings > Connections > Linear**](https://app.devin.ai/settings/connections/linear?utm_source=docs\&utm_medium=use-case-gallery) (connectez d’abord l’intégration si ce n’est pas déjà fait — [guide de configuration](/fr/integrations/linear))
      2. Sous **Synced playbook labels**, cliquez sur **Add playbook** et sélectionnez `!triage-bug` — cela crée un label correspondant dans le groupe de labels **"Devin Playbooks"** de Linear
      3. Faites défiler jusqu’à **Automation triggers** et cliquez sur **Add trigger** :
         * **Teams** : sélectionnez l’équipe où les bugs sont enregistrés (par exemple, "Engineering")
         * **Labels** : sélectionnez `Bug` (ou le label que votre équipe utilise pour les rapports de bug)
         * **Playbook** : sélectionnez `!triage-bug`
      4. Enregistrez le déclencheur

      Les déclencheurs utilisent la **détection de changement d’état** : ils ne se déclenchent que lorsqu’un ticket *passe* à l’état correspondant (par exemple, lorsque quelqu’un ajoute le label `Bug`), et non pour les tickets qui l’ont déjà. Cela signifie que vous ne déclencherez pas Devin accidentellement sur l’ensemble de votre backlog existant.

      <Note>Pour que les labels de playbook soient synchronisés automatiquement avec Linear, votre espace de travail Linear doit avoir **Manage workspace labels** défini sur **All members** (dans les **Settings > Security** de Linear). Si ce n’est pas activé, vous devrez créer les labels manuellement dans Linear.</Note>
    </Step>

    <Step title="Ajoutez le label « bug » et laissez Devin enquêter">
      Lorsqu’un·e ingénieur·e ajoute le label `Bug` à un ticket Linear comme ceci :

      > **ENG-487** : Les utilisateurs voient une erreur 500 lorsqu’ils soumettent le formulaire de contact sur /contact. Le problème a commencé après le déploiement de vendredi dernier. La stack trace pointe vers `validateEmail()` dans `src/lib/forms.ts`.

      Devin démarre automatiquement une session et suit votre playbook de triage :

      * **Lit le ticket** — récupère le titre, la description et tous les commentaires à partir de Linear
      * **Explore la base de code** — trouve `src/lib/forms.ts`, le route handler dans `src/routes/contact.ts` et les tests de validation du formulaire
      * **Vérifie les changements récents** — exécute `git log --since="last Friday" -- src/lib/forms.ts` et repère un commit qui a refactorisé la regex d’email

      Les conclusions de Devin sont automatiquement synchronisées avec le ticket Linear via l’intégration. Tout cela se produit sans que personne n’assigne le ticket à Devin : le label à lui seul déclenche l’ensemble du workflow.

      <Tip>Avec l’intégration Linear installée, Devin a nativement accès aux outils Linear — votre playbook peut donc demander à Devin de mettre à jour les labels des tickets en fonction de ses conclusions. Par exemple, votre playbook de triage pourrait indiquer à Devin d’ajouter un label `Clear Fix`, `Needs Review` ou `Lacking Context` selon le résultat. Étant donné que les labels peuvent déclencher d’autres automatisations, vous pouvez enchaîner les workflows — par exemple, un label `Clear Fix` pourrait lancer une deuxième session Devin qui rédige le correctif.</Tip>
    </Step>

    <Step title="Affiner la boucle">
      Après quelques triages, affinez le système en fonction de ce que Devin fait bien et des points où il a besoin de davantage de guidage.

      **Améliorez le playbook à partir de sessions réelles.** Si Devin manque systématiquement quelque chose (par exemple, ne pas vérifier les logs ou rater un service lié), ajoutez cette étape à votre playbook `!triage-bug`. Vous pouvez demander à Devin d’analyser les sessions passées et d’améliorer automatiquement votre playbook, ou créer des entrées [Knowledge](/fr/product-guides/knowledge) pour les motifs que Devin doit suivre dans toutes les sessions — comme "always check the error tracking dashboard first" ou "our auth service logs are in CloudWatch, not Datadog."

      **Ajoutez un playbook de correction quand vous êtes prêt.** Une fois que vous faites confiance au triage de Devin, créez un second playbook comme `!fix-bug` qui va plus loin — en écrivant une correction, en ajoutant un test de non-régression et en ouvrant une pull request (PR). Associez-le à un label séparé pour que votre équipe puisse choisir entre "dis-moi simplement ce qui ne va pas" et "corrige-le pour moi" :

      <PromptBlock type="playbook">
        ```txt Exemple de playbook de correction theme={null}
        Lisez le rapport de bug sur ce ticket Linear. Puis :

        1. Recherchez dans la base de code les chemins de code pertinents mentionnés dans le rapport
        2. Vérifiez l’historique Git pour les modifications récentes de ces fichiers
        3. Identifiez la cause profonde
        4. Écrivez une correction qui traite la cause profonde
        5. Ajoutez un test de non-régression qui aurait détecté ce bug
        6. Lancez la suite de tests existante pour vérifier que rien d’autre ne casse
        7. Ouvrez une PR liée au ticket Linear — incluez « Fixes ENG-XXX » dans
           la description de la PR
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
