Mise en œuvre du pont d'accès GitHub Issue (approbation owner-only)
Billet #146 : Implémentation du pont GitHub Issue
Type : Automatisation / Amélioration de processus
Composants concernés : src/github_issue_automation.py, scripts/manage_github_issue.py, scripts/create_github_issue.py, logs/github_issue_audit.jsonl, logs/github_issue_bridge_state.json
Contexte
Livrer un processus interne permettant à l'agent IA de lire, proposer et exécuter des actions sur les issues GitHub avec approbation owner-only obligatoire.
Décisions techniques
- Portée d'accès strictement limitée à
owner/repo. - Cycle de vie des propositions :
pending -> approved/rejected -> executed. - Validation d'écriture uniquement par le propriétaire du dépôt.
- Statuts métier autorisés :
Backlog,Todo,In Progress,Done,Closed,Reopened. - Journalisation des opérations et décisions dans
logs/github_issue_audit.jsonl. - État local des autorisations et propositions dans
logs/github_issue_bridge_state.json.
Livrables implémentés
src/github_issue_automation.py- Gestion des autorisations d'accès et validation de la portée.
- Gestion des propositions et de l'approbation réservée au propriétaire.
- Lecture issue parent/sub-issues (liens explicites uniquement).
- Exécution des fonctions create/update après approbation.
- Émission d'événements d'audit et décisions de validation.
scripts/manage_github_issue.py- Commandes :
grant,status,read,create,update,approve,reject,revoke,narrow. scripts/create_github_issue.py- Mode proposition/approbation ajouté en conservant la compatibilité ascendante.
Validation manuelle (session initiale)
- [x] Vérification syntaxique des scripts Python (charge module + parser CLI)
- [x] Vérification documentation README + chapter1 FR/EN
- [x] Validation live de bout en bout sur le dépôt GitHub réel avec token owner
Validation opérationnelle finale (2026-04-01)
- Dépôt validé :
jngoufo/qa-automated-pipeline - Token owner chargé via
GH_TOKEN - Correctifs appliqués pendant la validation live :
- sortie JSON CLI rendue portable sous Windows avec encodage ASCII sûr
- détection des références
#123corrigée pour la résolution des sous-issues - lecture des statuts métier corrigée pour refléter
Backlog,Todo,In Progress,Done,Closed,Reopened
Résultats mesurés
| Critère | Échantillon | Résultat | Preuve |
|---|---|---|---|
| SC-002 | 1/1 | 100% en 1.422 s pour lecture parent |
logs/t051/20260401-124100-sc002-read-parent-success.json |
| SC-003 | 1/1 | 100% en 2.255 s pour parent #160 + enfant #159 dans une seule réponse |
logs/t051/20260401-124100-sc003-read-parent-subissues-success.json |
| SC-004 | 1/1 | 100% en 1.802 s pour création approuvée de l'issue #161 |
logs/t051/20260401-124100-sc004-create-proposal.json, logs/t051/20260401-124100-sc004-create-approved.json |
| SC-005 | 1/1 | 100% en 2.119 s pour mise à jour approuvée de l'issue #161 |
logs/t051/20260401-124100-sc005-update-proposal.json, logs/t051/20260401-124100-sc005-update-approved.json |
| SC-009 | 1/1 | 100% avec refus read + create en 1.359 s après révocation |
logs/t051/20260401-124100-sc009-revoke.json, logs/t051/20260401-124100-sc009-read-after-revoke.json, logs/t051/20260401-124100-sc009-create-after-revoke.json |
Vérifications complémentaires T054
- Proposition non approuvée conservée en état
pendingsans exécution :logs/t051/20260401-124301-t054-create-proposal-pending.json - Approbation non-owner refusée avec
APPROVER_NOT_OWNER:logs/t051/20260401-124301-t054-non-owner-approval-denied.json - Cycle complet des 6 statuts exécuté avec succès sur l'issue
#162 - Relecture finale de l'issue
#162: statutReopened - Piste d'audit confirmée dans
logs/github_issue_audit.jsonl
Risques résiduels
- L'échantillon de mesure reste limité à un run live par critère quantifié; un échantillon opérateur plus large améliorerait la robustesse statistique.
Conclusion
Le processus de validation owner-only est validé en conditions réelles sur le dépôt cible, avec preuves horodatées pour lecture, lecture parent/enfant, création approuvée, mise à jour approuvée et blocage immédiat après révocation.