Aller au contenu

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 #123 corrigé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 pending sans 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 : statut Reopened
  • 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.