HTML 82.1%
Python 14.6%
TypeScript 1.9%
CSS 1%
JavaScript 0.5%
-
Wed, Aug 19, 2026 15
-
Famille Workland réécrite sur l'API JSON publique du frontal Atlas (jobs-prod published-external + default-profiles) : descriptions complètes fr/en, lieux géocodés, dates, mode de travail — 2 requêtes par cycle pour TOUT le réseau. Nouveau connecteur réseau atlas_workland (~80 employeurs QC : CSS scolaires, cégeps, CIUSSS Ouest-de-l'Île, Santé Québec Côte-Nord, ICM, STQ, UQTR, INRS… ; 1 238 offres QC). Connecteur cssdm retiré (couvert par le réseau), fixture remplacée par atlas_workland (sous-ensemble rejouable). Corrige la limite « workland description 0 % ».
…
Dans le même train : famille Njoyn paginée (rejeu du formulaire public Inp_ItemsPerPage/pn — Santé Montréal passe de 50 offres lues à 762 —, habillage tableau 5 colonnes titre/catégorie/ville/pays, filtre Québec optionnel, budget détail par classe, POST via Scrapfly pour les babillards Radware) ; famille UltiPro : hôte paramétrable (recruiting.ultipro.ca) ; lassonde réparé (l'ADP WFN ne sert plus que les postes américains — connecteur réécrit sur le site maison lassonde.com/fr/emplois, 31 offres QC).
-
docs/connecteurs : régénération post-enrichissement phase 2 (nouveaux champs langue/logo/candidature, complétudes à jour après le cycle complet du 2026-08-19)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
API + frontend phase 2 : quarantaine qualité exclue des points d'accès publics (param quarantined=1 pour supervision), facettes régions administratives et langues, filtres region/language (liste + carte), stats.quarantined ; fiche offre enrichie (logo employeur, langue, région, avantages, bouton candidature directe apply_url, titre d'affichage normalisé) + filtres région/langue sur l'accueil ; scripts backfill_phase2 (réparations + peuplement) et mesure_baseline (avant/après audit)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
tokens.css : overflow-x clip aussi sur html (quirk WebKit iOS — le clip sur body seul laisse défiler le viewport)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Stats v2 : dashboard ultra complet + 5 rapports PDF (module commun ka-ui v2)
…
- jobka/kapdf.py + frontend/src/ka/stats/{kacharts.tsx,SPEC.md} : canoniques v2 - statsdash.py : 10 KPI (sparklines actives/nouvelles/retraits), 4 jauges de complétude (salaire, mode, géoloc, catégorie), série des retraits, multi-courbes top secteurs (date de publication affichée), barres empilées ajouts par source (sync_log), 3 distributions (salaires annuels, taux horaires, âge des offres), heatmap horaire 7x24 des observations, tableaux secteurs + sources & connecteurs, 11 records ; deltas seulement si la période précédente est couverte (rien d'inventé) - /api/stats/report : 5 modes (complet/synthese/tendances/repartitions/ donnees), mode inconnu -> complet, filename(..., mode) - Stats.tsx : sections v2 dans l'ordre du SPEC (jauges, StatSummary, MultiLineChart, StackedBarChart, Histogram, HourHeatmap, PdfButton 5 modes) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Correctifs front-end mobile : menu hamburger, carte calee sur la vraie hauteur du header, viewport-fit=cover, socle mobile ka-ui
…
- App.tsx : menu mobile hamburger sous 700px (bouton 44x44 aria-expanded, panneau deroulant sous le header, backdrop fixe HORS du header, verrou de scroll body + cleanup, fermeture route/Escape/backdrop) ; ResizeObserver sur header.site qui pose --header-h sur <html> - styles.css : .map-wrap = calc(100vh/100dvh - var(--header-h,58px)) (fini le saut de barre navigateur et le 58px faux sur header 2 lignes) ; styles .menu-btn/.mobile-menu/.mm-backdrop avec var(--z-modal)/var(--z-overlay) ; header.site a var(--z-header) ; champs filtres a 16px sous 700px (anti-zoom iOS) ; extension tactile ::after -8px sur a.logo - index.html : meta viewport avec viewport-fit=cover (safe-area iOS) - src/ka/tokens.css : section SOCLE MOBILE OBLIGATOIRE (z-index unifies, --vh100 dvh, verrous de scroll, filet anti-zoom 16px, extension tactile gk-badge) - public/ka-agent.js : agent corrige (safe-area, textarea 16px, plein ecran <=640px + verrou scroll) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Tue, Aug 18, 2026 8
-
docs/connecteurs : snapshot post-cycle complet (220 sources, 42 min)
…
Régénération des fiches sur l état stable après le premier cycle horaire complet à 220 sources (12:46-13:28) : 8 862 offres actives. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Documentation connecteurs (standard Groupe-KA) + registre de conformité
…
- scripts/gen_connector_docs.py : générateur rejouable (ast + sources.json + BD live en lecture seule + sync_log + git) -> docs/connecteurs/ : INDEX.md + 17 fiches plateformes ATS (mécanique, endpoints, budgets, tableau des tenants) + 217 fiches employeurs + 3 fiches portails + fiche dépôt direct (239 fichiers, sections fixes standardisées) - docs/CONFORMITE.md : registre de conformité par famille (base d accès, attribution/lien candidature vérifié -> offre originale, zéro donnée personnelle de candidat, Québec Emploi écarté clicSÉQUR, vérifié 2026-08-18) - README : section Connecteurs (17 ATS, 217 employeurs directs, 3 portails, badge Offre directe, dépôt direct), structure/env/API à jour - data/sources.json : _meta enrichi (compteurs, liste ATS, pointeurs docs) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Guichet-Emplois : reprise sur coupure WAF (retry + acquis partiel) ; fixtures cascades/cssdm
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Badge « Offre directe » + stats directes/portails + canal de dépôt direct employeurs
…
- is_direct (source hors AGGREGATORS) exposé sur /api/jobs, /api/jobs/{uid} et jobs.geojson ; badge sobre sur les cartes d offres (frontend rebuild) - /api/stats : direct_jobs, direct_employers, direct_sources, portal_jobs, duplicates_hidden ; KPI « Offres directes employeur » au tableau de bord - POST /api/employeurs/offres : dépôt direct validé (pydantic + pot de miel), normalisé par JobPosting.finalize(), stocké source=depot-direct INACTIF en attente de modération ; page /employeurs (formulaire + explications) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
Portails agrégateurs : Guichet-Emplois, Jobillico, Espresso-Jobs — l offre directe gagne toujours la canonique
…
- guichet_emplois : recherche HTML fprov=QC fenêtre glissante (fage), Crawl-delay 5 s respecté, description via page offre (cache + budget) - jobillico : sitemaps job_postings (~30 k), fenêtre des plus récentes, JSON-LD JobPosting sur page détail (cache + budget) - espresso_jobs : ItemList JSON-LD paginé + détail JobPosting (TI/créatif QC) - dedup.AGGREGATORS = {guichet_emplois, jobillico, espresso_jobs} : autorité 10 contre 0 pour les pages carrières — les doublons portail↔direct sont masqués côté portail (dup_of) - sources.json : entrées portails (aggregator: true) + dépôt direct Québec Emploi (quebecemploi.gouv.qc.ca) sondé mais non retenu : SPA React avec API interne authentifiée (clicSÉQUR), pas d accès public propre. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> -
8 nouveaux ATS (Taleo, Njoyn, UltiPro, iCIMS, SuccessFactors, ADP WFN, Digital Recruiters, Workland) + 23 employeurs publics/parapublics et grands employeurs QC
…
- Secteur public : Santé Québec (emplois.sante.quebec), Emplois Santé Montréal (njoyn), CIUSSS de l Est-de-l Île-de-Montréal (taleo), CSSDM (workland), villes de Gatineau et Terrebonne, STL, RTC (njoyn via Scrapfly anti-Radware) - Grands employeurs : Bombardier, Cascades, Domtar (SuccessFactors sitemap RSS/urlset + microdonnées), Agnico Eagle, Bell Textron, Bayshore (Taleo REST + repli anglophone), Messer Canada (UltiPro), Lassonde, Mitsubishi HC Capital, MSI (ADP WFN + repli en_US), CAPREIT, McCarthy Tétrault, Omni, EDF Renouvelables (iCIMS + JSON-LD) - gen_connectors : EXTRA_ATTRS multi-attributs pour les nouveaux ATS - jobka/connectors/_jsonld.py : extraction schema.org/JobPosting partagée Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Expansion ×: 59 nouveaux employeurs connectés via sondage massif d ATS + détection de pages carrières
…
- scripts/probe_ats.py : sonde 800+ slugs candidats sur les 9 ATS (timeout 6 s, throttle 0,3 s/domaine, 8 threads) ; confirmé = ≥1 offre ET ≥1 offre QC (is_quebec_location du projet). Découverte Workday sans page HTML (bloquée 406) : cxs 422=tenant absent / 404=hôte bon, puis devinette du site. - scripts/detect_ats.py : visite 6 337 domaines d employeurs QC (accueil + /carrieres|/careers|/emplois|/jobs|/fr/carrieres + liens carrières), reconnaît l ATS par motifs URL/DOM ; ATS non supportés (taleo 11, successfactors 6, adp 5, icims 4, njoyn 4, ukg 3) consignés dans data/detected-other-ats.jsonl pour traitement séparé. - data/feeds-expansion.json : 59 flux vérifiés -> 59 connecteurs générés (workday 22, smartrecruiters 10, bamboohr 12, greenhouse 6, lever 4, workable 2, ashby 1, recruitee 1, breezy 0) dont Vidéotron, CDPQ, BDC, Beneva, Intact, PSP, Investissement Québec, Rio Tinto, Alcoa, Airbus, Walmart Canada, Canadian Tire, RCGT, Lightspeed, Behaviour, Cirque du Soleil, Gameloft, Canam, QSL, Promutuel, EXFO… - 2 107 offres actives ajoutées, 100 % villes QC ; faux positif retiré (genetec smartrecruiters, doublon faible de genetec_inc workable) - normalize.py : villes hors-QC supplémentaires (Las Vegas, Orlando…) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Qualité lieux : rejet des villes canadiennes/monde hors Québec + bâtiments McGill mappés vers Montréal
…
- normalize.py : _NON_QC_CITIES (villes CA hors QC + grandes villes monde) — parse_location ne prend plus ces libellés pour des villes et is_quebec_location les rejette explicitement ; purge BD : 127 offres actives hors-QC désactivées (Toronto 50, etc.) - mcgill.py : les lieux Workday de McGill sont des bâtiments (Bronfman Building, Currie Gymnasium…) -> ville forcée Montréal (Outaouais -> Gatineau) ; 182 offres corrigées en BD Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Mon, Aug 17, 2026 3
-
Intégration complète à l'écosystème Groupe KA
…
- Design : ka-ui vendoré (tokens.css importé avant le CSS local), accent officiel cyan #0c8599 (fin du lime hérité), socle dédupliqué, badge « Un service Groupe KA » au header (desktop + mobile, zéro débordement à 360/768/1440), prefooter local + KaFooter commun, page /contact (ecosystem.json), title « Job-Ka — Un service Groupe KA », assets og.png/favicon.svg/apple-touch-icon + meta OG/Twitter absolues. - SSO KA ID : jobka/auth.py (client job-ka, cookie jobka_session, table users), bouton « Se connecter avec KA » au header, testé bout-en-bout jusqu'au hub (307 → /connexion, client reconnu). - Stats : /api/stats/dashboard (contrat SPEC, cache 5 min, salaires bornés 25–400 k$, série date_posted réelle) + /api/stats/report (PDF fpdf2 via jobka/kapdf.py, complet + synthèse), page /stats refaite sur ka/stats/kacharts.tsx ; /api/stats historique conservé pour le hub. - KA Agent : widget ka-agent.js câblé (site job-ka). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Création massive : 135 connecteurs employeurs québécois sur 9 plateformes ATS
…
- 4 nouvelles classes de plateforme : Ashby (salaires structurés natifs), Workable (widget v1), Recruitee (offres complètes en liste), Breezy (verbose=true), BambooHR (détail + atsLocation) - Générateur en série scripts/gen_connectors.py (idempotent) + flux vérifiés data/feeds*.json — chaque flux validé par requête HTTP réelle avant génération - 124 connecteurs générés : Circle K, TD, BMO, CIBC, Autodesk, Manuvie, CIMA+, Transat, Reitmans, Rodeo FX, TEHORA, MaintainX, Hopper, Xsolla, dcbel, Robotiq, Toon Boom, BIXI, LG2, Framestore, NOVIPRO, etc. - Corrections : pagination Workday avec facette (total absent après la page 1), lieux « N Locations » résolus via la page détail, canonicalisation des villes, timeout iA à 90 s - 2 796 offres actives, 104 sources productives au moment du commit Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Fondation Job·Ka : socle backend, 5 connecteurs pilotes, frontend, tests
…
- Schéma JobPosting + normalisation (salaires $/h↔$/an, dates ISO, villes canoniques, catégories) — 25 tests unitaires - Pipeline hérité de Lou·Ka : diff par content_hash, délai de grâce, anti-dérive, expiration sur date limite, dédup union-find, géocodage Nominatim + Adresses Québec avec cache - Plateformes ATS : Workday (facette Québec auto-découverte), Lever, Greenhouse, SmartRecruiters — connecteurs pilotes CAE, Desjardins, Poka, Mistplay, Ubisoft (442 offres QC) - API FastAPI (/api/jobs, geojson, facets, sources, stats, /health) + frontend React/Vite (liste, fiche, carte MapLibre, stats) - Fixtures HTTP enregistrées/rejouées hors ligne + hook pre-commit d'en-tête d'auteur (section 17) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-