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 --> [*]