Skip to content

SOP – Analyse des Issues GitHub via MFO et RAG

1. Overview

Automatiser le traitement des issues GitHub pour extraire la logique sous-jacente (First Principles), classifier les demandes, détecter les duplications via une base RAG, générer un brouillon de PR, et notifier un développeur via Slack.

2. Scope

Ce workflow couvre l'analyse complète de chaque issue GitHub détectée automatiquement, son enrichissement sémantique, sa classification, son évaluation, sa mise en relation avec des solutions existantes, et la notification d'un humain.

3. Stakeholders and Actors

  • MCP GitHub : Source des issues
  • MindFlight Orchestrator (MFO) : Orchestrateur
  • LLM Agent : Analyse, classification, génération
  • RAG : Mémoire vectorielle des cas existants
  • Slack : Canal de notification
  • Développeur humain : Prend le relais sur les PRs générés

4. Triggers

  • Cron MFO (toutes les heures)
  • MCP GitHub récupère les issues

5. Taskflow

workflow:
  name: analyze_github_issues_with_rag
  trigger:
    type: schedule
    cron: "0 */1 * * *"

  tasks:
    - id: fetch_github_issues
      type: mcp_github_get_issues
      params:
        repo: your-org/your-repo
      outputs:
        - issues_raw

    - id: deduplicate_issues
      type: mfo_custom_deduplication
      dependencies: [fetch_github_issues]
      outputs:
        - issues_unique

    - id: analyze_first_principles
      type: mfo_api_chat_send
      dependencies: [deduplicate_issues]
      params:
        prompt_template: first_principles_prompt
      outputs:
        - analyzed_issues

    - id: rag_similarity_search
      type: mfo_rag_search
      dependencies: [analyze_first_principles]
      outputs:
        - rag_matches

    - id: classify_taxonomy
      type: mfo_api_chat_send
      dependencies: [analyze_first_principles]
      params:
        prompt_template: taxonomy_classification_prompt
      outputs:
        - classified_issues

    - id: evaluate_criticality
      type: mfo_api_chat_send
      dependencies: [classified_issues]
      params:
        prompt_template: criticality_evaluation_prompt
      outputs:
        - issues_scored

    - id: draft_pull_request
      type: mfo_api_chat_send
      dependencies: [issues_scored, rag_matches]
      params:
        prompt_template: pr_draft_prompt
      outputs:
        - pr_draft

    - id: notify_dev_team
      type: mcp_slack_notify
      dependencies: [pr_draft]
      params:
        channel: "#dev-alerts"
        message: "Un nouveau PR draft est prêt pour revue."

  output:
    artifacts:
      - pr_draft

6. Conditional Logic

  • Si issue déjà présente dans le RAG mais différente → lier, mais conserver comme cas nouveau.
  • Si fréquence élevée de demandes similaires → augmenter priorité.
  • Si PR existante liée → mise à jour du statut RAG.

7. Data Schemas (RAG)

RAG_ENTRY:
  id: string
  source: issue | pull_request
  github_url: string
  repo: string
  title: string
  description: string
  first_principles_summary: string
  taxonomy_level_1: string
  taxonomy_level_2: string
  taxonomy_level_3: string (optional)
  similarity_score: float
  criticality_score: int
  priority_label: low | medium | high | urgent
  status: new | linked | PR_in_progress | validated | in_prod
  linked_pr: string
  frequency_count: int
  last_seen: datetime
  created_at: datetime
  updated_at: datetime

8. YAML Specification

(intégré dans la section 5)

9. References

10. Prompts to Generate

prompts:
  - id: first_principles_prompt
    system: "Tu es un analyste logiciel. Tu décomposes chaque demande utilisateur en une série de problèmes fondamentaux sous-jacents."
    user: "Voici une issue GitHub : {{issue_text}}. Analyse-la selon une logique 'First Principles' : quel est le besoin sous-jacent réel ?"
    description: "Analyse fondamentale d'une issue pour extraire l'intention profonde."
    related_step: analyze_first_principles

  - id: taxonomy_classification_prompt
    system: "Tu es un classificateur de demandes techniques. Tu ranges les demandes dans une hiérarchie à deux niveaux."
    user: "Classe cette issue : {{first_principles_summary}} dans un schéma à 2 niveaux de catégorie (ex: Performance > Chargement page)."
    description: "Catégorisation hiérarchique de la demande."
    related_step: classify_taxonomy

  - id: criticality_evaluation_prompt
    system: "Tu évalues la gravité d'un bug ou d'une demande technique selon son impact utilisateur et sa fréquence probable."
    user: "Attribue un score de criticité (1–5) à cette demande : {{first_principles_summary}}, avec justification."
    description: "Évaluation du niveau critique."
    related_step: evaluate_criticality

  - id: pr_draft_prompt
    system: "Tu es un assistant ingénieur. Tu écris un brouillon de PR selon les sections : Problem | Solution Implemented | Implementation Details | Testing."
    user: "Sur la base de l'analyse suivante {{first_principles_summary}} et des cas similaires dans le RAG : {{rag_matches}}, écris un PR draft."
    description: "Génération du pull request template."
    related_step: draft_pull_request

Mermaid Diagrams

Workflow Flowchart

flowchart TD
    trigger[Trigger: Cron GitHub Issues]
    fetch[Fetch GitHub Issues]
    dedup[Deduplicate Issues]
    analyze[Analyze First Principles]
    search[RAG Similarity Search]
    classify[Taxonomy Classification]
    criticality[Evaluate Criticality]
    draft[Generate PR Draft]
    notify[Notify Dev via Slack]

    trigger --> fetch --> dedup --> analyze
    analyze --> search
    analyze --> classify --> criticality
    search --> draft
    criticality --> draft --> notify

Sequence Diagram

sequenceDiagram
    participant Cron
    participant GitHub MCP
    participant MFO
    participant LLM
    participant RAG
    participant Slack

    Cron->>GitHub MCP: Request new issues
    GitHub MCP-->>MFO: Return issue list
    MFO->>LLM: Analyze issue (First Principles)
    LLM-->>MFO: Structured insights
    MFO->>RAG: Search for similar entries
    MFO->>LLM: Classify in taxonomy
    MFO->>LLM: Score criticality
    MFO->>LLM: Draft PR
    MFO->>Slack: Notify developer

Entity Relationship Diagram

erDiagram
    ISSUE {
        string id
        string source
        string github_url
        string repo
        string title
        string description
        string first_principles_summary
        string taxonomy_level_1
        string taxonomy_level_2
        string taxonomy_level_3
        float similarity_score
        int criticality_score
        string priority_label
        string status
        string linked_pr
        int frequency_count
        datetime last_seen
        datetime created_at
        datetime updated_at
    }

    PULL_REQUEST ||--|| ISSUE : linked

State Diagram

stateDiagram-v2
    [*] --> NewIssue
    NewIssue --> Analyzed
    Analyzed --> Classified
    Classified --> Scored
    Scored --> DraftedPR
    DraftedPR --> Notified
    Notified --> [*]