Phase 5 : collecteurs officiels et run de veille — dry-run contre sources réelles

Collecteurs, chacun isolé et tolérant à l'échec :
- legifrance : OAuth PISTE validé en production. Deux pièges vérifiés sur le
  compte réel — seul le couple « Client ID / Client secret » ouvre un jeton
  (la clé d'API donne invalid_client), et les identifiants de production ne
  passent pas en bac à sable.
- senat : liste chronologique des lois promulguées. L'URL du §5.1
  (senat.fr/lois/index.html) est morte ; l'équivalent fonctionnel est
  /dossiers-legislatifs/lois-promulguees.html — 31 lois 2026 relevées.
- conseil_constitutionnel : sans le paramètre ?id=32246 la page des affaires en
  instance ne rend que des QPC et aucune affaire DC. Les colonnes DC et QPC
  diffèrent : lecture par en-tête, jamais par position.

Rapprochement à trois issues — numéro officiel, similarité de titre, et une
zone de signalement où le pipeline s'abstient plutôt que de fusionner.

make update-dry contre les sources réelles : aucun faux positif sur les 52
textes du corpus, et trois apports que le rapport n'avait pas — le numéro
d'affaire 2026-907 DC de la programmation militaire, la date de saisine du
16 juillet pour l'aide à mourir, les décisions du 23 juillet sur 908 et 909.

Une asymétrie de sources est documentée par un test plutôt que corrigée en
douce : le Sénat ne qualifie pas la loi 2026-650 d'organique, Légifrance si.
Le collecteur rapporte ce que sa source dit ; le champ  n'est pas comparé.

Fixtures HTML figées : aucun test ne touche au réseau.
156 tests, 91 % de couverture (chaque module au-dessus du seuil de 70 %).

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Cyber Mawonaj
2026-07-25 21:48:56 -04:00
co-authored by Claude Opus 5
parent c9fc8f3f67
commit feb5544599
15 changed files with 2743 additions and 1 deletions
+10
View File
@@ -5,12 +5,22 @@
# ── API Légifrance (PISTE) ───────────────────────────────────────────────────
# Compte : https://piste.gouv.fr — application abonnée à l'API « Légifrance ».
#
# ATTENTION : une application PISTE expose DEUX couples de valeurs, et un seul
# fonctionne ici. Il faut le couple OAuth (« Client ID » / « Client secret »),
# pas la clé d'API (« API key » / « API key secret »), qui donne un
# `invalid_client` au moment d'obtenir le jeton.
#
# Sans ces deux valeurs le pipeline fonctionne en mode dégradé documenté
# (repli sur le scraping léger AN / Sénat / Conseil constitutionnel).
LEGIFRANCE_CLIENT_ID=
LEGIFRANCE_CLIENT_SECRET=
# `sandbox` pour l'environnement de test PISTE, `prod` pour la production.
# Vérifié le 25 juillet 2026 : les identifiants de production ne sont PAS
# acceptés par le bac à sable, qui exige une application distincte.
LEGIFRANCE_ENV=prod
# Clé d'API PISTE. Facultative : l'API Légifrance se contente du jeton OAuth.
LEGIFRANCE_API_KEY=
# ── Comportement du pipeline ─────────────────────────────────────────────────
# Chemin de la base SQLite (relatif à la racine du dépôt).