SPB Git forge

spb/qc-election

Public
20commits 1branches 0releases
4.9 MBsize
maindefault branch
19 days agolast push
Python 66.6% HTML 24.8% CSS 4.9% JavaScript 3.6%
4.3 KB

# FEUILLE DE ROUTE — Programmes officiels et compas électoral IA

Mandat reçu le 2026-08-31 (spécification complète conservée ici). Statut : PLANIFIÉ — prochaine grande phase après la consolidation du forecast. Règle finale : ne jamais sacrifier la neutralité et la preuve pour le spectaculaire.

# Vision

Module d'analyse des programmes des 5 partis : documentation officielle collectée/versionnée, engagements atomiques structurés et CITÉS, comparaison équitable thème par thème, compas électoral multidimensionnel (6 axes + sous-axes) alimenté par l'IA mais audité, questionnaire adaptatif, proximités avec incertitude — jamais « vous êtes ce parti ».

# Règles absolues (résumé de la spécification)

  1. Aucune invention : chaque affirmation ↔ preuve textuelle officielle + version; « position officielle non trouvée » plutôt qu'une position supposée; séparation engagement explicite / orientation / chiffré / continuité / position historique non reconfirmée / inférence IA (marquée, confiance, exclue du score principal) / absence.
  2. Hiérarchie d'autorité : plateforme finale > cadre financier > engagement de campagne > communiqué > page thématique > congrès > déclaration transcrite > social officiel. Contradiction → afficher les deux, jamais écraser.
  3. Neutralité testée : double classification indépendante + arbitre, permutation des noms de partis, symétrie des formulations, calibration sur corpus annoté, reproductibilité à température nulle, versions modèle/prompt.
  4. Vie privée : aucune réponse du compas enregistrée sans consentement.

# Actifs déjà en place (réutiliser)

  • Sites officiels vérifiés + registre : config/social_seeds.json (caq/pq/plq/qs/pcq + fiches DGEQ data/partis_autorises.json).
  • Pipeline Firecrawl (scrape/archivage/hash) : ingest/firecrawl_watch.py, patterns d'archivage data/raw/….
  • File de révision : pattern excluded=True + WebSignal (rapports primaires).
  • RAG maison : modeling/explain.py (à étendre au corpus des programmes).
  • Design system QC Signal + composants (tabs, tables, cartes).

# Ordre d'exécution (spécification §Ordre)

  1. Schéma canonique : tables party_documents (versionnées, hash, autorité, statut actif/remplacé), claims (engagement atomique : thème, verbatim, citation URL+section, instrument, statut, coûts, compétence, confiance, validation humaine), taxonomy versionnée (18 thèmes), axes (6+6).
  2. Connecteurs des 5 sites (découverte PDF/pages, diff « Ce qui a changé dans les programmes », respect robots.txt, file de blocage humaine).
  3. Extraction d'engagements (règles + LLM avec confiance, JAMAIS silencieux)
    • interface de révision (admin).
  4. Comparateur thématique (matrice 5 partis × 18 thèmes, indices documentaires : couverture, précision, chiffrage, financement, cohérence, traçabilité, faisabilité juridictionnelle, stabilité — méthodologie publique, pas de « meilleur programme »).
  5. Axes + corpus annoté + calibration IA (scores -5..+5 par engagement, pondération autorité/récence/précision/budget, incertitude, preuves listées).
  6. Questionnaire 25-35 propositions + mode adaptatif (gain d'information, importance déclarée, « cela dépend », axes désactivables).
  7. Moteur de proximité (par axe, accords/désaccords forts, robustesse, sensibilité, 3 pondérations, intervalles) — jamais un verdict unique.
  8. Pages : /programmes (matrice, recherche sémantique, citations ouvrables, chronologie, « différences essentielles », « positions non documentées »), /compas (interactif, accessible, partage sans réponses privées), explorateur RAG cité, mode chercheur (exports CSV/JSON, API, snapshots immuables reproductibles).
  9. Contrôles automatiques (§Étape 10 au complet) + tests de biais.

# Définition de terminé (spécification)

Un citoyen comprend les différences réelles, vérifie chaque affirmation dans un document officiel, obtient une proximité multidimensionnelle sans manipulation, explore pourquoi le résultat change, et reproduit le même résultat depuis le même snapshot.