chore(workflow): complete step 6 (plan v1.3.0), start step 7

3 phases: corrections/robustesse (#11,#12), tests edge (#13), features (#14,#15)
ADR-009 (retry 429), ADR-010 (sanitize JSON), ADR-011 (--health flag)

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
sylvain
2026-03-12 19:07:57 +01:00
parent 7dab240dce
commit 9783389bfb
4 changed files with 611 additions and 2 deletions

View File

@@ -123,3 +123,47 @@
- Le tri est teste independamment de la collecte
- L'export JSON peut aussi appliquer le tri (via `_sort_repos` importable depuis display)
- Le critere de tri par defaut ("name") garantit un affichage stable entre les executions
## ADR-009 : Retry HTTP 429 avec Retry-After dans _get_with_retry (v1.3.0)
**Date** : 2026-03-12
**Statut** : accepte
**Contexte** : Le retry dans `_get_with_retry` ne gere que `requests.Timeout`. Un HTTP 429 (rate limiting) retourne une reponse HTTP, pas une exception Timeout. Le retry ne se declenche donc pas sur rate limiting.
**Decision** : Etendre `_get_with_retry` pour intercepter les reponses HTTP 429. Respecter le header `Retry-After` (en secondes) si present, sinon utiliser le backoff lineaire standard. Apres epuisement des retries, lever `requests.HTTPError`.
**Consequences** :
- La logique de retry reste centralisee dans une seule methode (coherent avec ADR-007)
- Le header Retry-After est un standard HTTP (RFC 7231), le respecter evite les retries inutiles
- La boucle gere desormais 2 cas (Timeout + 429), complexite accrue mais testable
- Pas de changement d'interface publique
## ADR-010 : Sanitisation des caracteres de controle dans exporter.py (v1.3.0)
**Date** : 2026-03-12
**Statut** : accepte
**Contexte** : L'export JSON peut contenir des caracteres de controle ASCII (0x00-0x1F) provenant des descriptions de repos. Ces caracteres sont invalides en JSON (RFC 8259) et causent des erreurs avec `python3 -m json.tool`.
**Decision** : Sanitiser les champs texte dans `repos_to_dicts()` avant serialisation. Supprimer les caracteres de controle sauf `\n`, `\r` et `\t` (qui sont echappes nativement par `json.dumps`).
**Consequences** :
- La sanitisation est au point de sortie (exporter), pas dans le collecteur
- Les donnees dans RepoData restent brutes (pas de perte pour le rendu Rich)
- Approche defensive contre les donnees inattendues de l'API Gitea
## ADR-011 : --health comme flag optionnel, pas sous-commande (v1.3.0)
**Date** : 2026-03-12
**Statut** : accepte
**Contexte** : L'option `--health` est un mode alternatif au dashboard. Deux approches : flag optionnel ou sous-commande.
**Decision** : Utiliser un flag `--health` dans argparse. Pas de sous-commandes.
**Consequences** :
- Coherent avec ADR-004 (argparse simple)
- Un seul niveau d'arguments
- `--health` est mutuellement exclusif avec le mode dashboard
- Si d'autres modes alternatifs apparaissent, reconsiderer les sous-commandes