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

# Journal hebdomadaire des modifications issues des PR

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="Journal des modifications hebdomadaire à partir des PR" description="Compiler les pull requests (PR) livrées dans un journal des modifications structuré par catégorie, le publier sur Slack, puis ouvrir une PR pour mettre à jour votre documentation." prompt="Récupère toutes les PR fusionnées dans la branche de release cette semaine sur nos dépôts frontend, backend et mobile. Génère un journal des modifications regroupé par Fonctionnalités, Corrections de bugs et Améliorations. Publie-le sur #releases dans Slack et ouvre une PR sur le dépôt de documentation pour mettre à jour CHANGELOG.md." category="Automatisations" features="Planifications, Intégrations" type="schedule" />

<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="Connecter Slack">
      Devin publie le journal des modifications sur Slack et ouvre une PR sur votre dépôt de documentation, vous devez donc connecter l'intégration Slack.

      Allez dans **Settings > Connections > Slack** et connectez votre espace de travail. Devin pourra publier des messages dans n'importe quel canal auquel il est invité. Ajoutez Devin au canal dans lequel vous voulez que les journaux des modifications soient publiés (par exemple, `#releases`). Consultez le [guide d'intégration Slack](/fr/integrations/slack) pour plus de détails.
    </Step>

    <Step title="Créer la planification hebdomadaire">
      Accédez à **Schedules** dans la barre latérale gauche sur [app.devin.ai](https://app.devin.ai/?utm_source=docs\&utm_medium=use-case-gallery), ou utilisez l'option **Schedule Devin** dans le menu contextuel de la zone de saisie sur la page d'accueil. Cliquez sur **Create schedule** et configurez :

      * **Frequency :** Weekly — par exemple, tous les vendredis à 16 h 00 UTC
      * **Repositories :** Sélectionnez les dépôts que Devin doit analyser pour y trouver les PR fusionnées
      * **Slack channel :** Sélectionnez un canal (par exemple, `#releases`) pour que votre équipe voie le journal des modifications lorsqu'il est prêt
      * **Prompt :** Soyez précis concernant les dépôts, la logique de regroupement, le ton et le format de sortie — et demandez à Devin d'imiter le style des entrées existantes de votre journal des modifications afin que le résultat reste cohérent semaine après semaine

      <PromptBlock type="schedule">
        ```txt Weekly changelog prompt theme={null}
        Rassemble toutes les PR fusionnées dans la branche de release cette
        semaine pour ces dépôts :
        - acme/frontend
        - acme/backend
        - acme/mobile

        Inclure uniquement les PR qui sont arrivées sur la branche de release — ignore les PR
        fusionnées dans main qui n'ont pas encore été livrées.

        Génère un changelog regroupé dans ces sections, dans cet ordre :
        1. **New Features** — PR avec un préfixe `feat:` ou le label `feature`
        2. **Bug Fixes** — PR avec un préfixe `fix:` ou le label `bug`
        3. **Improvements** — performances, refactors, améliorations DX
           (tout ce qui n'est pas une feature, un fix ou une chore)

        Ignore les PR portant le label `internal` ou `chore`.

        Pour chaque entrée :
        - Commence par un court titre orienté utilisateur (pas le titre brut de la PR)
        - Poursuis avec une phrase résumant ce qui a changé et pourquoi
        - Indique le numéro de PR et le handle de l'auteur
        - Garde un ton concis et factuel — pas de langage marketing

        Lis les entrées existantes dans CHANGELOG.md dans le dépôt acme/docs
        et reproduis exactement leur style de titres, format de puces et niveau de détail.

        Publie le résultat dans #releases sur Slack et ouvre une PR sur le
        dépôt acme/docs pour ajouter la nouvelle section en haut de CHANGELOG.md.
        ```
      </PromptBlock>

      Devin analyse chaque dépôt pour trouver les PR fusionnées au cours des 7 derniers jours, lit leurs titres, descriptions et labels pour les catégoriser, puis génère un résultat comme celui‑ci :

      ```markdown theme={null}
      # Changelog — Semaine du 14 févr. 2026

      ## New Features
      - **Avatars de profil utilisateur** — Téléversez des avatars personnalisés depuis la page des paramètres (#412, @alice)
      - **Export CSV pour l'analytics** — Exportez n'importe quel graphique de tableau de bord en CSV (#398, @bob)

      ## Bug Fixes
      - **Fuseau horaire du sélecteur de date** — Correction du décalage UTC dans le flux de réservation (#419, @carol)
      - **Chevauchement de la navigation iOS** — Résolution de la barre de navigation qui recouvrait le contenu sur Safari (#421, @dave)

      ## Improvements
      - **Limitation de débit de l'API** — Limites de débit par clé sur les endpoints de webhook (#210, @bob)
      - **Performance de la recherche** — Recherche en texte intégral 3× plus rapide sur les grands jeux de données (#405, @alice)
      ```
    </Step>

    <Step title="Adapter au public visé">
      La même planification peut produire des résultats différents selon qui lit le journal des modifications. Ajoutez des entrées [Knowledge](/fr/product-guides/knowledge) pour enseigner à Devin les conventions de votre équipe, ou ajustez le prompt pour différents publics.

      **Pour les équipes d'ingénierie internes** — incluez les numéros de PR, les handles des auteurs et les liens vers les PR. Mentionnez les changements d'infrastructure et les mises à jour des outils internes.

      **Pour des notes de version orientées utilisateurs** — supprimez les détails techniques, réécrivez en langage simple et ignorez complètement les changements internes :

      <PromptBlock>
        ```txt User-facing release notes theme={null}
        Réécris le changelog de cette semaine pour les clients. N'inclus que les PR
        qui sont arrivées dans la branche de release. Supprime tout ce qui est interne.
        Utilise un langage non technique — concentre‑toi sur ce que les utilisateurs
        peuvent maintenant faire, pas sur la façon dont cela a été construit. Publie
        dans #product-updates sur Slack au lieu de #releases.
        ```
      </PromptBlock>
    </Step>
  </Steps>
</div>
