> ## 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.

# Correction automatique des bugs de PR avant le merge

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="Correction automatique des bugs dans les PR avant fusion" description="Devin examine chaque PR pour y détecter des bugs et pousse automatiquement les correctifs vers la branche." category="Qualité du code" features="Intégrations" type="review" />

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

  <Steps>
    <Step title="Inscrire des dépôts et des utilisateurs pour la relecture automatique">
      Devin Review peut analyser automatiquement chaque pull request (PR) sur vos dépôts — aucun déclenchement manuel n'est nécessaire. Commencez par inscrire les dépôts et les utilisateurs que vous voulez couvrir.

      1. Allez dans [Settings > Review](https://app.devin.ai/settings/review?utm_source=docs\&utm_medium=use-case-gallery) dans l'application web Devin
      2. Sous **Repositories**, utilisez **Add repo** pour rechercher et ajouter les dépôts que vous voulez que Devin relise automatiquement (par exemple, `acme/frontend`, `acme/api-server`)
      3. Sous **Users**, voyez qui est inscrit — chaque utilisateur s'inscrit lui-même en définissant son déclencheur de revue personnel

      Une fois inscrits, Devin relit automatiquement les PR lorsqu'elles sont ouvertes, lorsque de nouveaux commits sont poussés ou lorsqu'un brouillon est marqué comme prêt pour relecture.

      <Tip>
        Tout membre de l'équipe avec un compte GitHub connecté peut s'inscrire lui-même pour les relectures automatiques — aucun droit d'administrateur n'est nécessaire. Allez dans [Settings > Preferences](https://app.devin.ai/settings/preferences?utm_source=docs\&utm_medium=use-case-gallery) et définissez votre **Review trigger** sous **Devin Review**.
      </Tip>
    </Step>

    <Step title="Activer la correction automatique pour que Devin pousse des correctifs, pas seulement des commentaires">
      Par défaut, [Devin Review](/fr/work-with-devin/devin-review) publie les anomalies détectées sous forme de commentaires en ligne. La correction automatique va plus loin — Devin propose des modifications de code et peut pousser des commits de correction directement sur la branche de la PR.

      Pour l'activer, allez dans **Settings > Customization > Pull requests > Responding to bots** et choisissez l'une des options suivantes :

      * **Selected only** — ajoutez `devin-ai-integration[bot]` à la liste d’autorisation (recommandé)
      * **All bots** — Devin réagit à tous les commentaires de bot, pas seulement aux siens

      Vous pouvez aussi activer la correction automatique depuis la section **correction automatique** de la barre latérale de revue sur n'importe quelle PR rédigée par Devin (admins d'organisation uniquement).

      <Warning>
        "All bots" peut provoquer des boucles infinies si d'autres bots commentent également les changements de Devin. Utilisez le mode **Selected only** et ajoutez uniquement `devin-ai-integration[bot]` pour rester en sécurité.
      </Warning>
    </Step>

    <Step title="Voir ce que Devin détecte et corrige">
      Lorsqu'une PR est ouverte sur un dépôt inscrit, Devin Review s'exécute automatiquement et produit :

      * **Des anomalies** dans la barre latérale Analysis, étiquetées par gravité (Severe ou Non-severe) et niveau de confiance
      * **Des indicateurs (flags)** pour des motifs à investiguer mais pas forcément incorrects
      * **Des commits de correction** poussés directement sur la branche de la PR pour les problèmes que Devin peut résoudre (quand la correction automatique est activée)

      Par exemple, sur une PR qui ajoute une nouvelle page de paramètres utilisateur, Devin Review peut trouver :

      ```
      Bug (Severe): Null reference in UserSettings.tsx:38

      `user.preferences.theme` throws if `preferences` is undefined,
      which happens for accounts created before v2.3.

      Fix pushed — commit e4a1b2c:
        const theme = user.preferences?.theme ?? 'system';
      ```

      Vous pouvez examiner chaque anomalie dans la vue diff, marquer les bugs comme résolus ou poser des questions de suivi à l'aide du [chat contextuel à la base de code](/fr/work-with-devin/devin-review) intégré — Devin a le contexte de l'ensemble du dépôt, pas seulement du diff.
    </Step>

    <Step title="Apprendre à Devin Review les standards de votre équipe">
      Devin Review lit les fichiers `AGENTS.md` et `REVIEW.md` dans votre dépôt pour apprendre les conventions de votre équipe. Utilisez ces fichiers pour définir les préférences de revue, les motifs de bugs courants à surveiller et les standards de code que vous voulez faire respecter :

      ```markdown theme={null}
      <!-- REVIEW.md -->
      ## Review guidelines

      - All API route handlers in src/routes/* must validate request body
        with zod schemas before accessing properties. Flag any handler
        that reads req.body fields without validation.
      - The useUnsafeEffect hook in src/hooks/useUnsafeEffect.ts is
        intentional — do not flag it as a missing-deps issue.
      - Check for unhandled error cases in API calls.
      - Ensure new database queries have appropriate indexes.
      ```

      Validez ce fichier dans votre dépôt et Devin Review suivra ces recommandations sur chaque PR. Mettez-le à jour au fur et à mesure que votre équipe découvre de nouveaux motifs — par exemple, après un bug en production, ajoutez le motif qui l'aurait détecté pour que Devin signale des problèmes similaires lors de futures revues.

      Vous pouvez aussi utiliser le [Review chat](/fr/work-with-devin/devin-review) sur n'importe quelle PR pour demander à Devin de vérifier des motifs spécifiques dans tout le diff — par exemple : « Y a-t-il des appels d'API dans cette PR qui ne gèrent pas le cas d'erreur ? »
    </Step>
  </Steps>
</div>
