spb/qc-election
Public
Python 66.6%
HTML 24.8%
CSS 4.9%
JavaScript 3.6%
-
Fri, Sep 4, 2026 1
-
Mon, Aug 31, 2026 8
-
seed : correspondance sondage à ±1 jour (fin la boucle purge/recréation EN-FR)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
dédup inter-agrégateurs : même sondage daté à ±1 j (EN vs FR) — union + purge
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Wikipédia FR = seconde source d'agrégation (sondages de campagne plus frais)
…
- parse_polls_2026_fr : « Liste de sondages sur les élections générales québécoises de 2026 » (fr.wikipedia) — colonnes CAQ/PLQ/QS/PQ/PCQ/Autres, dates françaises, sondeur/commanditaire, échantillon, ME; union dédupliquée avec la page EN par (maison, fin de terrain) dans refresh_all - Résout le retard EN pendant la campagne : Pallas 29 août (CAQ 24, PLQ 22, QS 9, PQ 29, PCQ 16, n=1108) et Synopsis corrigé au 27 août entrent AUTOMATIQUEMENT au prochain cycle - Garde-fous : rangées-bannières d'événements (dates/cellules fusionnées) exclues; extraction d'articles scopée par PHRASE avec garde RÉGIONALE (un sondage « grande région de Québec » ne devient jamais national); qc125/338 restent détection seulement; date de terrain estimée ÉTIQUETÉE - Hebdo automatique : replay + ablation régénérés par le scheduler Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Boucle radar → article → extraction → recoupement (sondages de presse automatiques)
…
- extract_from_radar : les articles de presse détectés (poll-radar) sont scrapés, toplines extraites (partis/dates/n, dates presse sans année, « conservateurs » nu) → FILE DE RÉVISION (excluded=True, jamais silencieux) - cross_validate_pending : AUTO-VALIDATION seulement par RECOUPEMENT de 2 sources indépendantes (mêmes chiffres ±1,5 pp, même terrain ±2 j, ≥4 partis) — double provenance consignée, décision journalisée (PipelineLog) - La presse publie 24-48 h avant Wikipédia : les sondages de campagne entrent désormais automatiquement, avec garde-fous - Automatisation complète : replay + ablation régénérés chaque semaine dans le scheduler (plus aucun rapport manuel) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
pages : accepter HEAD (crawlers de partage og) — GET+HEAD sur les 11 routes
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Cache-busting : assets versionnés (?v=model_version) + pages HTML no-cache
…
Le navigateur gardait l'ancien CSS/JS (aucun Cache-Control). Les pages sont maintenant servies no-cache avec les URLs d'assets versionnées à la volée — chaque release devient visible immédiatement. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
v3.2.0 — Phase D population, soir d'élection, scénarios URL, fiches enrichies, favicon/og
…
- PHASE D : feature store démographique depuis le classeur OFFICIEL Élections Québec (Recensement 2021 × 127 circonscriptions 2026, codes stables, source parfaite — aucune interpolation) : population, 65+, langue à la maison, universitaire, locataires, immigrants, revenu 100k+, autochtones, appartements, minorités visibles + z-scores + SIMILARITÉ top-10 (validée : Gouin≈Mercier/SMSJ, Westmount≈NDG/MRO, Ungava profil nordique). API /api/demographics/{nom}; démographie + semblables intégrés aux fiches - MODÈLE DU SOIR D'ÉLECTION (modeling/election_night.py, dormant) : prior = forecast final; décomposition hiérarchique des résidus rapportés (national ~N(0,σ_ind²) → régional → local, pondérés par dépouillement propre — garde anti-biais des premiers bureaux); resimulation à variances réduites; calling conservateur (P≥99,5 % ET ≥40 % dépouillé). /api/election-night + POST /api/admin/election-night. Test synthétique : décalage national +3 pp retrouvé, zéro invention à décalage nul - LABO DE SCÉNARIOS partageables par URL (?s=base64) : encodage/décodage complet, bouton copier, presets appliqués aux contrôles, étiquetage strict « conditionnel — pas le forecast officiel » - FICHES ENRICHIES : sensibilité au swing (marge attendue, chemin de bascule minimal, stabilité vs IC) + démographie officielle - FAVICON (SVG+PNG 64/180/512, fleur QC Signal) + OG:IMAGE 1200×630 (hémicycle) + balises og/twitter sur les 11 pages - COMPAS-PROGRAMMES.md : mandat complet du compas électoral IA inscrit à la feuille de route (règles de neutralité/preuve, ordre d'exécution, actifs réutilisables) — prochaine grande phase - 37/37 tests (slug, bornes démographiques, soir d'élection) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Directive maître — baselines de replay, Course à 64, connecteurs primaires
…
- Replay : baselines « dernier sondage » et « moyenne 14 j » scorées à chaque horizon et agrégées (modèle 3,71 bat dernier-sondage 3,84; moyenne-14j 3,49 gagne l'EAM ponctuelle — consigné honnêtement dans STATISTICAL_DEBT comme recherche ouverte : la valeur du modèle est la DISTRIBUTION, les baselines n'ont ni intervalles ni probabilités) - Course à 64 (/api/battlegrounds.paths_to_64 + section /circonscriptions) : pour chaque parti, échelle des sièges du plus sûr au plus décisif, 64e siège de la majorité surligné (PQ : Maskinongé 43 %, marge 0,9 pp), marge attendue = swing minimal de bascule, onglets par parti - Connecteurs PRIMAIRES des 7 firmes (ingest/pollster_reports.py) : veille des pages de publications (Firecrawl), archivage des rapports (data/raw/reports), extraction PAR RÈGLES avec niveau de confiance, FILE DE RÉVISION (Poll excluded=True « révision requise » — jamais d'entrée silencieuse), réconciliation Wikipédia, statut de source consigné (Pallas/Synopsis murées = connecteurs désactivés de fait). Test live Léger : 5 rapports archivés, 0 création sous le seuil de confiance — comportement voulu - Tests invariants (§qualité) : 127 sièges/simulation, P(victoire) somme à 1, probabilités [0,1], extraction primaire (35/35 verts) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Sun, Aug 30, 2026 10
-
QC Signal (refonte frontend complète) + distribution prédictive du prochain sondage
…
Frontend — design system « QC Signal » (sous-agent, 11 pages × 4 viewports, zéro erreur JS, zéro débordement, light+dark dédiés) : - Tokens complets (palettes, radius 8-24, spacing 4/8, ombres discrètes), échelle typo (metric-xl 64px, tabular-nums partout), navbar + fleur SVG, FORECAST STRIP sticky sur toutes les pages (P(1er) publiée + Δ veille) - Accueil recomposé : verdict éditorial → MAIN OUTCOME (métrique héroïque, intervalles VISUELS 24 ───●─── 86) → HÉMICYCLE SVG 127 sièges (marqueur majorité 64, hover IC) → OUTCOME BAR (majorité/minoritaire/autre) → cartes partis compactes data-first (sparklines, deltas neutres jamais vert/rouge) → mouvement + pivots - /aujourdhui briefing éditorial, /carte 75/25, tables sticky-header, composants deltaHTML/rangeHTML/emptyState/hemicycleSVG, skeletons - docs/DESIGN_SYSTEM.md + docs/UI_AUDIT.md (18 dettes retirées) Backend : - national/next_poll.py (§46-48) : P(prochain sondage | modèle) publiée à chaque run + SURPRISE de chaque nouveau sondage (z par parti, densité prédictive, verdict bruit/à surveiller/mouvement-ou-aberrant) mesurée contre la prédiction STOCKÉE du run précédent (jamais rétro-ajustée) - data/replay_report.json committé (LOEO 6 élections) - 33/33 tests Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
v3.1.0 — replay historique multi-élections + modèle d'erreur des sondeurs (σ appris)
…
Méthodologie ultra avancée, première vague (§100 : replay + scoring + erreur dynamique des sondeurs) : - ingest/wikipedia_historical.py : 462 sondages archivés sur 6 élections (2007: 34, 2008: 36, 2012: 121, 2014: 60, 2018: 106, 2022: 105), ères de partis (ADQ 2007-2008), cache data/historical/*.csv avec provenance - Cœur alr PARAMÉTRÉ par liste de partis (trend/forecast/house_effects/ fundamentals) — zéro changement de comportement 2026, replay multi-ères - validation/historical_replay.py : LOEO STRICT (house effects, fondamentaux exclude_year, σ sur les autres élections), rolling origin J-120→J-1, CRPS + log score + couverture 50/90/95 + sharpness (scoring.py) - national/pollster_error.py : erreur d'INDUSTRIE par élection (2018 CAQ −5,4, 2007 PLQ −9,2, 2014 PQ +4,9…), σ_industrie estimé LOEO ≈0,21 (composantes principales ≥5 %, borné [0,08; 0,25]), house effects hiérarchiques n/(n+k)+τ - ADOPTION σ appris (use_empirical_industry_error=True) validée par replay : log score −3,80 vs −5,33, CRPS 2,64 vs 2,67, couverture 95 % 83 % vs 76,5 %, EAM inchangée (3,71 vs 3,69) — fuite du backtest fondamentaux corrigée - API /api/replay, /api/pollster-error (+ v3), POST /api/admin/replay - Audits §100 : METHODOLOGY_AUDIT, STATISTICAL_DEBT (dette paramétrique complète), V3_MODEL_ARCHITECTURE, HISTORICAL_REPLAY_PLAN - 33/33 tests (CRPS/log score, bornes σ, replay 2018 smoke, ère ADQ 5 partis) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Socle de données v3 (ADDENDUM) — sources canoniques, registres vérifiés, owned/earned
…
- ingest/elections_quebec.py : DGEQ CANONIQUE — tableau officiel des partis provinciaux autorisés (20 partis, chefs, nb de candidats, date d'autorisation, data/partis_autorises.json) + alertes dérive-chef (jamais de remplacement silencieux) + électeurs/circ. best-effort (GeoJSON brut) - config/social_seeds.json : registre canonique des comptes (provenance official_site=verified / search=pending_review, PLQ 100 % vérifié site officiel, CAQ FB+YT officiels) + config/social_queries.json versionné - ingest/social_account_discovery.py : découverte hebdo depuis les sites officiels (Firecrawl) → promotion verified / WebSignal pending_review / alertes dérive-chef; anti-bruit (ids FB numériques des candidats, plafond) - social_pulse : cibles/requêtes chargées des registres (plus de handles en dur); SocialPost.content_class (owned ≠ discussion publique, §33) + micro-migration SQLite additive (db._migrate) - Cadence : vérifications canoniques + découverte 1×/7 j dans le pipeline - Livrables §42 : DATA_SOURCE_AUDIT.md (inventaire tiers 1-5, statuts réels testés), POPULATION_FEATURES.md (plan StatCan AD→127, cellules MRP), SOCIAL_ACCOUNT_REGISTRY.csv (26 comptes) - 29/29 tests verts Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
v3.0.0 « 127 » — Phases A+B : validation, Social Intelligence, forecast par comté
…
Phase A (fondations) : - modeling/validation/ : scoring commun (EAM/RMSE, couverture 50/90/95, Brier, log loss, sharpness, biais) + cadre d'ABLATION (backtest 2022 par variante, deltas vs FULL publiés, data/ablation_report.json, /api/ablation, POST /api/admin/ablation) - Feature flags conservateurs (enable_social_volatility, enable_tipping_points, enable_ablation, enable_social_directional=OFF) - Observabilité Apify (table apify_runs) + /api/admin/data-health (§33-34) Phase B (Social Intelligence Layer) : - modeling/signals/social.py : métriques inter-plateformes normalisées (attention_z, velocity_z, breadth, cross_platform, stance_balance) + filtrage de coordination (quasi-doublons, rafales) → attention organique - modeling/signals/volatility.py : multiplicateur de variance unifié wiki+social, borné [1, 1,5], variance seulement (§16) - modeling/signals/event_detection.py : événements à confirmation croisée (≥2 familles : presse, social, Wikipédia), sans effet directionnel présumé Forecast par comté : - simulate.tipping_points : circonscriptions pivots de la majorité (méthode des simulations, 64e siège le plus sûr), stocké par run (§24) - Page /circonscriptions : 127 fiches (recherche, filtres, tri, détail complet IC 95 %/candidatures/2022), pivots avec barres de course, KPIs - /api/battlegrounds + API v3 (/api/v3/forecast|ridings|social|battlegrounds| events|beyond|calibration|ablation), compatibilité v1 conservée 29/29 tests verts. METHODOLOGY §9 bis. ModelVersion 3.0.0. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Pouls social continu — actor Apify maison qc-social-pulse + sources ouvertes
…
- Actor Apify maison (compte gorgeous_thistle, id aI5AYtFfeDn3KAanf) : Instagram (comptes officiels vérifiés : coalition_avenir_quebec, partiquebecois, psppqc, liberalquebec, quebecsolidaire, ericduhaimequebec, frechette_christine), Facebook/TikTok best-effort, YouTube recherche + COMMENTAIRES PUBLICS (innertube) — proxy résidentiel CA, retries rotation IP, source dans apify/qc-social-pulse/ - ingest/social_pulse.py : + Reddit r/Quebec (index Google/Serper), Mastodon, Lemmy.ca; stance dirigée + entité de contexte; pondération engagement 1+ln(1+votes); anti-bruit (dédup URL+texte intra-lot et DB, longueur min, plafonds); indice enthousiasme par parti (Indicator); anomalies → événements - Table social_posts; API /api/social; section « Pouls social » (intelligence) + ligne au point du jour; pipeline à chaque cycle; poids NUL dans le forecast - Test réel : 185 posts (74 commentaires YouTube, 40 Mastodon, 71 Lemmy), enthousiasme CAQ 261/PCQ 206/PLQ 132 eng/post Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
fix: import timedelta manquant (réconciliation radar)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Frontend v3 « sharp » + ingestion de sondages parfaite (v2.1.1)
…
Frontend : - Refonte style.css : header compact blur, drawer hamburger mobile (verrou, backdrop, Escape), safe-areas, anti-zoom iOS 16px, cartes dégradées + hover lift, focus rings, skeleton shimmer, clamp typographique, prefers-reduced-motion - Charts : thème Inter, grille recessive, tooltips arrondis/blur, légendes cercle, dégradés sous courbe (areaGrad), traits lumineux (lineGlow), pastilles endLabel, barres à coins arrondis, ResizeObserver - Palette des partis validée (dataviz : CVD ΔE≥20, contraste ≥3:1, 2 surfaces) Sondages (« ça doit être parfait ») : - Parseur Wikipédia par SECTION (« Opinion polls »/« Campaign period » acceptées, ventilations langue/région et projections exclues) — plus de seuil de 20 rangées : la table de campagne entre dès sa 1re rangée - Mode de collecte par maison (design effects réels), vraie plage de terrain, indécis parsés - Upsert par (maison, fin de terrain) : n/MoE/chiffres révisés mis à jour, jamais dupliqués; purge des doublons hérités - Boucle de garantie radar→base (statut intégré/en attente), pipeline 3 h en campagne Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
v2.1.0 — signaux web avancés + « Le point du jour »
…
- Attention Wikipédia (pageviews partis+chefs, API Wikimedia) : parts 7 j/28 j, z-scores; détecteur de turbulence → variance de campagne ×≤1,45 (jamais la moyenne) [Smith & Gustafson POQ 2017] - Sondage synthétique LLM « silicon sampling » : 96 strates région×âge×genre×langue poststratifiées, ancré dans les manchettes réelles — EXPÉRIMENTAL, poids nul [arXiv:2411.01582; critique McKown-Dawson 2025] - Page quotidienne /aujourdhui : forecast daté, Δ vs veille, journal 24 h (sondages intégrés + radar), attention web avec sparklines, synthétique vs forecast - API : /api/today, /api/attention, /api/synthetic; admin POST /synthetic (amorçage) - forecast(drift_multiplier) : turbulence élargit l'incertitude seulement - 24 tests verts Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
config: charger backend/.env dans os.environ à l'import (PM2 ne transmet pas d'env_file — ADMIN_TOKEN/FIRECRAWL_API_KEY n'étaient jamais lus depuis le fichier)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
v2.0.0 « Au-delà des sondages » — fondamentaux, partielles, médias, marchés, veille Firecrawl
…
- Prior de fondamentaux : satisfaction gouvernementale + vote précédent + usure, régression ridge 1998-2022 (LOO), blend à poids décroissant w(t) vers le scrutin - Votes réels des 4 partielles 2023-2025 injectés dans le filtre de Kalman (swing local rétréci ×0,6, n équiv. 350, erreur excédentaire ±3 pp) - Ajustement médias borné ±0,35 pp (sentiment 14 j, tanh + seuil de volume) - Ensemble 88/12 modèle/Polymarket sur P(plus de sièges), publié partout - Veille continue Firecrawl : radar de nouveaux sondages, extraction de la satisfaction (Léger 40 % trouvée live), presse élargie au-delà des RSS - Décomposition du forecast couche par couche à chaque run (API /api/beyond) - Nouvelle page /signaux + carte « D'où vient le forecast » sur l'accueil - Backtest 2022 comparatif (mae v2 vs sondages seuls) - Tables byelections / web_signals / indicators, endpoints admin (watch, indicator, byelection), 8 nouveaux tests (22/22 verts) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Thu, Aug 27, 2026 1
-
QC Élection Forecast — plateforme de prévision électorale du Québec 2026
…
Modèle bayésien d'état latent (Kalman/alr) + house effects + Monte Carlo corrélé (erreurs systémique/régionale/locale), backtesting 2022 calibré, carte officielle DGEQ (127 circonscriptions), simulateur what-if, sentiment médiatique et marchés prédictifs en signaux auxiliaires. FastAPI + SQLite, frontend ECharts thèmes sombre/clair, responsive mobile. Déployée sur M2U64 → https://www.qc-election.com (PM2 + ngrok). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-