SPB Git

spb/job-ka

Public
History of docs Clear filter
page 1
  1. Fri, Sep 25, 2026 4

    1. [ka6] fix connecteur x49_solutions_1: faux positif de supervision (0 offre QC légitime — 49 Solutions n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : l'org Workable 49-solutions-1 n'a plus AUCUNE offre QC depuis la dépublication le 2026-09-25 (sync de 17:43, found 1→0) de l'unique offre québécoise « Senior Labour Relations Consultant for CIRNAC - Government of Canada » 99BCF80902 (Québec, parue 2026-07-27) — détail live 301 → ?not_found=true confirmé (signature Workable d'une offre dépubliée), donc les syncs horaires rendent ok=1 found=0 (médiane 1.0) et sont comptés comme non-succès — même profil que liferaft c4cd79d, csncollision be10fa5, sangoma_3, qohash, kodify, goalcast, trupanion1, capintel, cliniqued, canderel, coorstek, altusgroup : tenant à volume QC temporairement nul (16e cas du pattern). Le connecteur est INTACT et re-vérifié live : l'API widget apply.workable.com/api/v1/widget/accounts/49-solutions-1?details=true répond (200, nom « 49 Solutions », 2 offres publiées, toutes deux à Ottawa, Ontario — mandats fédéraux DND et SSC, correctement exclues par is_quebec_location), zéro occurrence de montréal/québec/laval/gatineau/sherbrooke dans le JSON complet (5 757 octets) ; le widget Workable v1 liste TOUT en une requête (pas de partition par langue ou pays) — pas d'angle mort, et le board vivant exclut une migration d'ATS (contre-vérif du cas challenger 28ff173). Correction au passage de l'artefact du générateur vague C dans data/sources.json : url vide → https://www.49solutions.com (retrouvé via Serper + test direct des domaines candidats, vérifié 200, « 49 Solutions | Government Contracts and Consulting » — cabinet-conseil en contrats gouvernementaux, cohérent avec les mandats CIRNAC/DND/SSC du board ; la fiche affichait « Site : [49 Solutions]() »). Docstring du connecteur mise à jour (re-vérif 2026-09-25). Fiches docs/connecteurs/ x49_solutions_1.md + ats-workable.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1130 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,1 s, ok=1, removed=1 — le garde-fou 2-miss a retiré proprement l'offre dépubliée (miss_count=2 → active=0) ; 0 reste le volume légitime tant que 49 Solutions ne republie pas au Québec (l'entreprise est basée à Gatineau — toute republication sera re-capturée telle quelle, filtre client opérationnel). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +120 −146
    2. [ka6] fix connecteur challenger: migration JazzHR → Dayforce (ns=fastfrate) — le statut stale vient de la migration d'ATS de l'employeur : le board JazzHR historique challenger.applytojob.com sert une vraie page « There are no open positions at this time. » (200, marqueur resumator présent — board vidé, pas un challenge) et les anciennes offres répondent HTTP 410 Gone ; la page carrières officielle challenger.com/careers (403 Cloudflare en direct, lue via Scrapfly render_js) embarque désormais le portail Dayforce jobs.dayforcehcm.com/<culture>/fastfrate/CANDIDATEPORTAL (Challenger fait partie du Groupe Fastfrate — le board JazzHR mêlait déjà les deux marques, ex. « Fastfrate Group (Lachine) »). Les 3 syncs found=0 étaient donc ok=1 sur un board réellement vidé, et les 2 dernières offres QC ont été retirées proprement par le garde-fou 2-miss. Réécriture du connecteur sur la plateforme existante jobka/connectors/dayforce.py, avec fusion des cultures fr-CA + en-CA (fr prioritaire, pattern fnfmb.py/euromoneyplc.py) car la recherche Dayforce est PARTITIONNÉE par culture de publication : le 2026-09-25 fr-CA ne voyait que 4 offres (les 4 QC, traduites) contre 26 en en-CA — sans la fusion, une future offre QC publiée seulement en anglais serait invisible. Aucun conflit de tenant : fastfrate n'était utilisé par aucun autre connecteur. sources.json : careers_url → jobs.dayforcehcm.com/fr-CA/fastfrate/CANDIDATEPORTAL, connector → dayforce, url vide → challenger.com (même artefact que les vagues précédentes ; vérifié 200 via Scrapfly, « Transportation and Logistics Provider | Challenger »). Sync isolé rejoué ×2 : found=4 stable (added=4 puis 0), ok=1, ~22 s — 4 est le volume QC réel du nouveau portail (26 offres groupe en en-CA, 4 QC re-comptées à la main dans les deux cultures), au-dessus de la médiane 1.0 ; fiches complètes 4/4 ville+description+date_posted, 1/4 salaire (43 000–53 000 $, les postes chauffeur/coordo n'en publient pas), URLs live 200. Pas de continuité d'IDs possible (IDs JazzHR alphanumériques → jobPostingId Dayforce numériques) : les 12 anciennes offres JazzHR restent inactives en base, les 4 nouvelles sont ajoutées. Fiches docs/connecteurs/ challenger.md + ats-dayforce.md + ats-jazzhr.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 4 files +393 −391
    3. [ka6] fix connecteur autodesk: migration Workday → Eightfold PCSX (nouvelle plateforme jobka/connectors/eightfold.py) — le statut stale vient du sync de 12:19 en 404 sur https://autodesk.wd1.myworkdayjobs.com/wday/cxs/autodesk/Ext/jobs, corps Workday « not found: Job_Posting_Site_ID=Ext » : le site de publication Ext du tenant est DÉCOMMISSIONNÉ (toutes les variantes de nom testées → 404 ; seul survit le portail stages « uni », 27 postes hors périmètre) et la page carrières officielle autodesk.com/careers (403 Akamai en direct, lue via Scrapfly render_js) pointe désormais vers jobs.autodesk.com/careers = Eightfold AI variante PCSX (l'endpoint Eightfold classique /api/apply/v2/jobs répond 403 « Not authorized for PCSX »). Première plateforme Eightfold du repo, écrite dans le style des voisines (workday.py/workable.py) : liste GET /api/pcsx/search?domain=…&start=N&num=10&sort_by=timestamp (num plafonné serveur à 10, pagination INSTABLE — count fluctuant et lignes répétées — dédup par id + garde-fou max_pages), filtre client is_quebec_location sur TOUTES les valeurs de locations[]+standardizedLocations[] (les remote pancanadiens listent le Québec parmi des dizaines de lieux ; la facette serveur location=QC,Canada matche à tort un poste remote 100 % US, vérifié — le filtre client fait foi), détail via la page publique /careers/job/<id> rendue serveur avec JSON-LD JobPosting COMPLET (réutilise _jsonld.py : description AVEC la section transparence salariale — l'API position_details la tronque : 9 830 car. vs 11 683, ce qui déclenchait l'alerte « 96 % des offres sans salaire » au premier essai —, employmentType normalisé FULL_TIME→FULL TIME, validThrough, re-sélection de l'adresse QC parmi les jobLocation multi-lieux pour ne pas étiqueter Toronto sur une offre QC), repli position_details si le balisage disparaît ; UA JobKaBot vérifié accepté partout. Continuité des IDs préservée : les req IDs Workday (26WDxxxxxx) survivent dans atsJobId → les 22 offres QC encore publiées se METTENT À JOUR (URLs migrées vers jobs.autodesk.com, vérifiées en base) au lieu d'être recréées ; les 28 dépubliées pendant la migration (sondage individuel par req ID → 0 hit) sont retirées proprement par le garde-fou 2-miss. Sync isolé rejoué ×3 : found=22 stable, ok=1, ~15-42 s — 22 est le volume QC réel du nouveau board (126 postes monde, re-mesuré ×2 en connecteur et en urllib nu ; la médiane 50 datait du board Workday d'avant la purge de migration), fiches complètes : 22/22 ville+type+date+description, 15/22 salaire (les stages n'en publient pas), work_mode 5/22 (≈ 20 % historique). sources.json : careers_url → jobs.autodesk.com/careers, connector → eightfold, url vide → autodesk.com (même artefact que les vagues précédentes). Fiches docs/connecteurs/ autodesk.md + ats-workday.md + ats-eightfold.md (nouvelle) + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 4 files +501 −431
    4. [ka6] fix connecteur bayshore: retry avec backoff et cookies neufs dans _bootstrap de taleo.py — le statut stale vient d'UN sync échoué à 03:29 (« taleo bayshore: numéro de portail introuvable ») : le frontal Taleo renvoie à l'occasion la page d'amorce jobsearch.ftl SANS « portal=NNN » (interstitiel/session passager, statut 200) puis repart seul — transitoire récurrent de la plateforme, 4 occurrences en un mois sur 3 tenants (agnico_eagle 2026-09-01, textron 2026-09-02 et 2026-09-25 01:12, bayshore 2026-09-25 03:29), et le sync suivant de bayshore (06:57) avait déjà retrouvé found=9 ok=1 tout seul. Le durcissement du 2026-09-09 (_search_page : retries du non-JSON de searchjobs) ne couvrait pas cette étape : _bootstrap levait RuntimeError au premier HTML sans numéro de portail, faisant échouer tout le sync horaire. Fix minimal dans la classe de plateforme jobka/connectors/taleo.py (bénéficie aux 3 tenants touchés et à tous les connecteurs Taleo) : boucle de 3 essais dans _bootstrap avec backoff 10-20 s et session.cookies.clear() entre les essais — même famille de correctif que _search_page, appliqué à l'étape d'amorce. Sync isolé rejoué ×2 : found=9 (médiane 9.5), ok, ~35 s. Fiches docs/connecteurs/ bayshore.md + ats-taleo.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 3 files +140 −139
  2. Thu, Sep 24, 2026 4

    1. [ka6] fix connecteur liferaft: faux positif de supervision (0 offre QC légitime — Liferaft n'a plus aucune offre publiée) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : l'org Workable liferaft n'a AUCUNE offre depuis la dépublication le 2026-09-24 (sync de 15:21, found 1→0 ; sync de 16:52, miss_count=2 → active=0) de l'unique offre québécoise « Senior Software Engineer » A48E333FD5 (Québec, parue 2026-08-17) — détail live 302 → apply.workable.com/oops confirmé (l'équivalent Workable d'un 404), donc les syncs horaires rendent ok=1 found=0 (médiane 0.5) et sont comptés comme non-succès — même profil que csncollision be10fa5, sangoma_3 783ee2c, qohash 2010afc, kodify c952fcc, goalcast a731f01, trupanion1 2cf5c9c, capintel f80c8d4, cliniqued 51913fe, canderel 32f1e24, coorstek 2c4caea, altusgroup f092997 : tenant à volume QC temporairement nul (15e cas du pattern). Le connecteur est INTACT et re-vérifié live : l'API widget apply.workable.com/api/v1/widget/accounts/liferaft?details=true répond (200, nom « Liferaft », mais 0 offre publiée — le board est entièrement vide, cas plus radical que csncollision/sangoma_3 où il restait des offres hors QC), zéro occurrence de montréal/québec/laval/gatineau/sherbrooke dans le JSON complet (773 octets) ; le widget Workable v1 liste TOUT en une requête (pas de partition par langue ou pays, contrairement à Dayforce) — pas d'angle mort. Correction au passage de l'artefact du générateur vague C dans data/sources.json : url vide → https://liferaftlabs.com (retrouvé via Serper, vérifié 200, « OSINT Platform for Real-Time Threat Intelligence | Liferaft » — plateforme OSINT de renseignement sur les menaces ; la fiche affichait « Site : [Liferaft]() »). Docstring du connecteur mise à jour (re-vérif 2026-09-24). Fiches docs/connecteurs/ liferaft.md + ats-workable.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,1 s, ok=1 — 0 reste le volume légitime tant que Liferaft ne republie pas au Québec ; toute republication sera re-capturée telle quelle (filtre client is_quebec_location opérationnel). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 3 files +74 −100
    2. [ka6] fix connecteur csncollision: faux positif de supervision (0 offre QC légitime — CSN Collision n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : l'org Workable csncollision n'a AUCUNE offre QC depuis la dépublication le 2026-09-24 (sync de 14:50, found 3→0 ; sync de 16:22, miss_count=2 → active=0) des 3 offres québécoises « Auto Body Technician - RED SEAL » 071A1A35F8 (Kirkland, parue 2023-06-02), « Collision Repair Technician - Apprentice » BC43C97A0F (Kirkland, parue 2023-12-27) et « Technicien en carrosserie automobile - Carrossier Débosseleur » B560734C38 (Québec, parue 2025-12-01) — détails live 302 → apply.workable.com/oops confirmés (l'équivalent Workable d'un 404), donc les syncs horaires rendent ok=1 found=0 (médiane 1.5) et sont comptés comme non-succès — même profil que sangoma_3 783ee2c, qohash 2010afc, kodify c952fcc, goalcast a731f01, trupanion1 2cf5c9c, capintel f80c8d4, cliniqued 51913fe, canderel 32f1e24, coorstek 2c4caea, altusgroup f092997 : tenant à volume QC temporairement nul (14e cas du pattern). Le connecteur est INTACT et re-vérifié live : l'API widget apply.workable.com/api/v1/widget/accounts/csncollision?details=true répond (200, 96 offres publiées : 63 aux États-Unis — Californie, Illinois, Washington, Hawaï, Nevada, Texas, Minnesota, Wisconsin, Utah, Tennessee, Arizona — et 33 au Canada hors Québec — Ontario, Alberta, Nouveau-Brunswick, Nouvelle-Écosse), zéro occurrence de montréal/québec/laval/gatineau/sherbrooke/kirkland dans le JSON complet, et les 96 offres sont toutes correctement exclues par _keep/is_quebec_location (les 33 CA ont region Ontario/Alberta/NB/NS ≠ Québec) ; le widget Workable v1 liste TOUT en une requête (pas de partition par langue ou pays, contrairement à Dayforce) — pas d'angle mort. Correction au passage de l'artefact du générateur vague B dans data/sources.json : url vide → https://csncollision.com (vérifié 200, « CSN Collision - Auto Body Repair & OEM-Certified Collision Centers » ; la fiche affichait « Site : [CSN Collision]() »). Docstring du connecteur mise à jour (re-vérif 2026-09-24). Fiches docs/connecteurs/ csncollision.md + ats-workable.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,3 s, ok=1 — 0 reste le volume légitime tant que CSN Collision ne republie pas au Québec ; toute republication sera re-capturée telle quelle (filtre client opérationnel — le réseau compte des ateliers QC, ex-Kirkland). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 3 files +207 −233
    3. [ka6] fix connecteur sangoma_3: faux positif de supervision (0 offre QC légitime — Sangoma n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : l'org Workable sangoma-3 n'a AUCUNE offre QC depuis la dépublication le 2026-09-24 (sync de 13:13, found 1→0 ; sync de 15:31, miss_count=2 → active=0) de l'unique offre montréalaise « Analytics Engineer, Enterprise Data » 6AC6A2A04F (parue le 2026-07-22, détail live 301 → apply.workable.com/sangoma-3/?not_found=true confirmé — l'équivalent Workable d'un 404), donc les syncs horaires rendent ok=1 found=0 (médiane 0.5) et sont comptés comme non-succès — même profil que qohash 2010afc, kodify c952fcc, goalcast a731f01, trupanion1 2cf5c9c, capintel f80c8d4, cliniqued 51913fe, canderel 32f1e24, coorstek 2c4caea, altusgroup f092997 : tenant à volume QC temporairement nul (13e cas du pattern). Le connecteur est INTACT et re-vérifié live : l'API widget apply.workable.com/api/v1/widget/accounts/sangoma-3?details=true répond (200, 5 entrées publiées : Payroll Manager remote US ×4 lieux Sarasota/Atlanta/Huntsville/Dallas + Senior Accountant Makati Philippines), zéro occurrence de montréal/québec/laval/gatineau/sherbrooke/QC dans le JSON complet (25,9 Ko), et les 5 entrées sont toutes correctement exclues par _keep/is_quebec_location (countryCode US/PH ≠ CA) ; le widget Workable v1 liste TOUT en une requête (pas de partition par langue ou pays, contrairement à Dayforce) — pas d'angle mort. Correction au passage de l'artefact du générateur vague C dans data/sources.json : url vide → https://sangoma.com (vérifié 200, « Sangoma: Business Communications Platform | UCaaS » ; la fiche affichait « Site : [Sangoma]() »). Docstring du connecteur mise à jour (re-vérif 2026-09-24). Fiches docs/connecteurs/ sangoma_3.md + ats-workable.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,1 s, ok=1 — 0 reste le volume légitime tant que Sangoma ne republie pas au Québec ; toute republication sera re-capturée telle quelle (filtre client opérationnel). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 3 files +283 −309
    4. [ka6] fix connecteur omni_hotels_gestion: migration du tenant iCIMS 'externalmanager-omnihotels' → 'canada-omnihotels' — l'ancien portail « manager » renvoie 500 Internal Server Error avec un corps window.top.location.href='null' (portail iCIMS désactivé, redirection de tout le trafic vers une cible nulle) depuis le sync de 2026-09-23 ~23:48 (2 échecs consécutifs → stale), sur TOUTES ses URLs (/jobs/search, /jobs/intro, avec ou sans in_iframe/hub) alors que les autres tenants iCIMS du repo (careers-capreit, externalhourly-omnihotels, careers-globalexcel) répondent 200 — problème tenant-spécifique, pas plateforme. La page carrières officielle omnihotels.com/careers (403 Akamai en direct, lue via Scrapfly asp+render_js) pointe désormais vers le portail iCIMS consolidé https://canada-omnihotels.icims.com/jobs/intro (+ un portail Dayforce jobs.dayforcehcm.com/en-US/ohmc pour les autres postes), et ce nouveau tenant expose EXACTEMENT les 5 mêmes offres montréalaises avec les MÊMES IDs (133511 Gestionnaire des ventes groupes, 133508 Chef tournant, 133506 Serveur(euse) service aux chambres, 133505 Commis à la réception, 133503 Préposé(e) aux comptes recevables) — même pattern liste iframe (pr=0, page unique) + JSON-LD au détail, aucun changement du connecteur de base icims.py requis. Fix minimal : SUB='canada-omnihotels' dans jobka/connectors/omni_hotels_gestion.py (docstring mise à jour) + careers_url dans data/sources.json. Sync isolé rejoué : found=5 (= médiane 5.0), updated=5 (URLs des offres migrées vers le nouveau domaine, vérifiées en base), ok=1 en 1,4 s. NB: le portail jumeau externalhourly-omnihotels (connecteur omni_hotels_horaire, ok) répond encore 200 et liste les 5 mêmes offres — s'il est désactivé à son tour, appliquer la même migration vers canada-omnihotels. Fiches docs/connecteurs/ omni_hotels_gestion.md + ats-icims.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 3 files +270 −266
  3. Wed, Sep 23, 2026 2

    1. [ka6] fix connecteur qohash: faux positif de supervision (0 offre QC légitime — Qohash n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : le board Greenhouse qohash n'a AUCUNE offre QC depuis la dépublication le 2026-09-23 (sync de 12:10, found 1→0 ; sync rejoué 14:21, miss_count=2 → active=0) de l'unique offre montréalaise « Ingénieur(e) en solutions, bilingue (En, Fr) » 4722050005 (parue le 2026-08-12, détail API live 404 confirmé), donc les syncs horaires rendent ok=1 found=0 (médiane 1.0) et sont comptés comme non-succès — même profil que kodify c952fcc, goalcast a731f01, trupanion1 2cf5c9c, capintel f80c8d4, cliniqued 51913fe, canderel 32f1e24, coorstek 2c4caea, altusgroup f092997 : tenant à volume QC temporairement nul (12e cas du pattern). Le connecteur est INTACT et re-vérifié live : l'API boards-api.greenhouse.io répond (200, 4 offres publiées : Bilingual Fullstack Developer node/react, Senior Full Stack Developer React/Java, Senior Software Developer Go, Senior Strategic Account Executive Western Canada — toutes en lieu « Remote » SANS province, correctement exclues par is_quebec_location, cohérent avec la doctrine capintel « remote-first surveillé via le lieu du poste »), zéro lieu montréal/québec/laval/gatineau/sherbrooke dans le flux content=true (l'unique occurrence « quebec » est une préférence de résidence dans les Nice to Haves d'une offre Remote, pas un lieu), et l'endpoint /offices confirme que le bureau « Quebec Remote Work » (Quebec, Canada) existe mais n'a AUCUN poste rattaché (les 4 postes live sont au bureau générique « Remote ») — pas d'angle mort multi-bureaux ni de partition par langue (Greenhouse n'est pas partitionné par culture, contrairement à Dayforce). Correction au passage de l'artefact du générateur vague C dans data/sources.json : url vide → https://qohash.com (site officiel confirmé via Serper — qohash.com/fr « Sécurité des données et surveillance sans compromis », cybersécurité québécoise du CAMP ; curl direct 403 Cloudflare mais Scrapfly asp confirme 200 « Qohash - No Compromise Data Security and Monitoring » ; la fiche affichait « Site : [Qohash]() »). Docstring du connecteur mise à jour (re-vérif 2026-09-23). Fiches docs/connecteurs/ qohash.md + ats-greenhouse.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,1 s, ok=1, removed=1 (l'offre dépubliée passée active=0) — 0 reste le volume légitime tant que Qohash ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées (filtre client is_quebec_location opérationnel, « Remote - Quebec » serait gardé). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +168 −168
    2. [ka6] fix connecteur kodify: faux positif de supervision (0 offre QC légitime — Kodify n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'artefacts sources.json + EMPLOYER (nom = titre de poste) — le statut stale vient de la définition de succès de la supervision : le tenant Recruitee kodify n'a AUCUNE offre QC depuis la dépublication le 2026-09-23 (sync de 12:00, found 1→0 ; sync rejoué 14:01, miss_count=2 → active=0) de l'unique offre montréalaise « Video Ad Designer » 2717647 (parue le 2026-08-20, détail live https://kodify.recruitee.com/o/video-ad-designer 404 confirmé), donc les syncs horaires rendent ok=1 found=0 (médiane 1.0) et sont comptés comme non-succès — même profil que goalcast a731f01, trupanion1 2cf5c9c, capintel f80c8d4, cliniqued 51913fe, canderel 32f1e24, coorstek 2c4caea, altusgroup f092997 : tenant à volume QC temporairement nul (11e cas du pattern). Le connecteur est INTACT et re-vérifié live : l'API kodify.recruitee.com/api/offers/ répond (200, 5 offres publiées : Senior Data Engineer, Full-Stack Developer, Senior System Administrator, Senior Full-Stack Developer — Barcelone ES remote ×4 — et Junior Set Designer — Los Angeles US), zéro occurrence de montréal/québec/laval/gatineau/sherbrooke/qc dans le JSON complet, et les 5 offres sont toutes correctement exclues par _keep (country_code ES/US ≠ CA) ; Recruitee n'est pas partitionné par langue (contrairement à Dayforce), une seule requête liste tout — pas d'angle mort. Corrections au passage des artefacts du générateur vague C : (1) data/sources.json name « Video Ad Designer » → « Kodify Media Group » et url vide → https://kodify.io (vérifié 200, titre « Kodify Media Group | Careers » — producteur de contenu vidéo/sites à fort trafic, hub montréalais ; kodify.com est une autre entreprise, KODE Associates ; la fiche affichait « Site : [Video Ad Designer]() ») ; (2) jobka/connectors/kodify.py EMPLOYER « Video Ad Designer » → « Kodify Media Group » (le générateur avait pris le TITRE du poste pour le NOM de l'employeur — company_name de l'API : « Kodify » ; toute future offre QC sera attribuée au bon employeur). Docstring du connecteur mise à jour (re-vérif 2026-09-23). Fiches docs/connecteurs/ kodify.md + ats-recruitee.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,2 s, ok=1, removed=1 (l'offre dépubliée passée active=0) — 0 reste le volume légitime tant que Kodify ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées. 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +266 −292
  4. Tue, Sep 22, 2026 1

    1. [ka6] fix connecteur goalcast: faux positif de supervision (0 offre légitime — Goalcast n'a plus aucun poste ouvert) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : le board Greenhouse goalcast n'a AUCUNE offre depuis la dépublication le 2026-09-22 (sync de 12:24, miss_count=2 → active=0 à 16:52) des 2 offres montréalaises « Administrative Coordinator - Coordonnateur(trice) Administratif(ive) | 2026 » 7801506003 (parue le 2026-07-10) et « Video Editor - Monteur Video | Unseen » 7759066003 (parue le 2026-06-01), détails live 404 confirmés, donc les syncs horaires rendent ok=1 found=0 (médiane 1.0) et sont comptés comme non-succès — même profil que trupanion1 2cf5c9c, capintel f80c8d4, cliniqued 51913fe, canderel 32f1e24, coorstek 2c4caea, altusgroup f092997 : tenant à volume QC temporairement nul (10e cas du pattern). Le connecteur est INTACT et re-vérifié live : l'API boards-api.greenhouse.io répond (200, jobs total=0 — board entièrement vide, pas seulement côté QC), l'endpoint /offices confirme un office unique « Goalcast HQ » (Montréal, Quebec, Canada) et /departments liste 12 départements TOUS à 0 poste (pas d'angle mort multi-bureaux ni de partition par langue — Greenhouse n'est pas partitionné par culture, contrairement à Dayforce), la page HTML job-boards.greenhouse.io/goalcast est 200 avec branding complet et message explicite « no current openings », et goalcast.com/careers reste en ligne (200, page Next.js) — pas de migration d'ATS. Goalcast étant un employeur 100 % montréalais (office unique QC), toute republication future sera re-capturée telle quelle. Correction au passage de l'artefact du générateur vague C dans data/sources.json : url vide → https://www.goalcast.com (vérifié 200 ; la fiche affichait « Site : [Goalcast]() »). Docstring du connecteur mise à jour (re-vérif 2026-09-22). Fiches docs/connecteurs/ goalcast.md + ats-greenhouse.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,1 s, ok=1 — 0 reste le volume légitime tant que Goalcast ne republie pas. 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +385 −411
  5. Mon, Sep 21, 2026 5

    1. [ka6] fix connecteur trupanion1: faux positif de supervision (0 offre QC légitime — Trupanion n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : le tenant SmartRecruiters trupanion1 n'a AUCUNE offre QC depuis la dépublication le 2026-09-21 (sync de 17:38, miss_count=2 → active=0 à 19:09) des 2 offres montréalaises « Agent(e) de vente en assurance agréé(e) – Québec (bilingue) » 744000147096689 et « Licensed Insurance Sales Agent - Québec, Bilingual » 744000147096629 (parues le 2026-09-03, détail live 200 mais active=false confirmé — SmartRecruiters garde le détail consultable après dépublication), donc les syncs horaires rendent ok=1 found=0 (médiane 1.0) et sont comptés comme non-succès — même profil que capintel f80c8d4, cliniqued 51913fe, canderel 32f1e24 (volet dépublication), coorstek 2c4caea, altusgroup f092997 : tenant à volume QC temporairement nul (9e cas du pattern). Le connecteur est INTACT et re-vérifié live : l'API api.smartrecruiters.com répond (totalFound=54, une seule page, offres US/CA/CZ/DE/CH mélangées — l'API postings n'est PAS partitionnée par langue ou pays, pas d'angle mort type Dayforce), zéro occurrence de montréal/québec/laval/gatineau/sherbrooke/qc dans le JSON complet, et les 6 offres canadiennes live (Vancouver BC, Winnipeg MB, Edmonton AB, Calgary AB, London ON, Ottawa ON) sont toutes correctement exclues par _keep/is_quebec_location. Particularité du tenant : Trupanion republie CYCLIQUEMENT les 2 mêmes offres QC avec de nouveaux IDs (3 paires en base : 22/08 → 27/08 → 02/09), elles reviendront donc probablement d'elles-mêmes et le connecteur les re-capturera. Preuve du connecteur : fetch sans filtre QC = 54 offres lues (Seattle ×10, New York ×3, Prague, Berlin…). Correction au passage de l'artefact du générateur vague B dans data/sources.json : url vide → https://www.trupanion.com (site officiel confirmé via Serper — trupanion.com/fr-ca « Assurance pour animaux nº 1 au Canada » ; curl direct 403 Cloudflare mais Scrapfly asp confirme 200 ; la fiche affichait « Site : [Trupanion]() »). Docstring du connecteur mise à jour (re-vérif 2026-09-21). Fiches docs/connecteurs/ trupanion1.md + ats-smartrecruiters.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,5 s, ok=1 — 0 reste le volume légitime tant que Trupanion ne republie pas au Québec. 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +198 −224
    2. [ka6] fix connecteur cliniqued: faux positif de supervision (0 offre QC légitime — Clinique D n'a plus de poste ouvert) — aucun défaut du connecteur, correction d'artefacts sources.json (url vide, secteurs vides) — le statut stale vient de la définition de succès de la supervision : le compte JazzHR cliniqued est ACTIF (marqueur « resumator » présent, pas d'« Inactive Career Page » type derumarketcatering) mais la page liste affiche « no open positions at this time » depuis la dépublication de l'unique offre « Concierge Esthétique / Technicienne en laser – Laval » 0CYFU0oxZp (Laval, first_seen 2026-08-25 ; détail live 410 Gone confirmé ; found passé de 1 à 0 au sync de 16:50, miss_count=2 → active=0), donc les syncs horaires rendent ok=1 found=0 (médiane 0.5) et sont comptés comme non-succès — même profil que capintel f80c8d4, canderel 32f1e24 (volet dépublication), coorstek 2c4caea, altusgroup f092997 : tenant à volume QC temporairement nul. Le connecteur est INTACT et re-vérifié live : page liste 200 avec structure jobboard valide (le garde-fou anti-faux-zéro de jazzhr.py — marqueur resumator + détection compte fermé — fonctionne), zéro lien /apply/<id>/ dans le HTML complet, mention explicite « no open positions at this time. » ; JazzHR n'est pas partitionné par langue (contrairement à Dayforce), pas d'angle mort. Correction au passage des artefacts du générateur vague E dans data/sources.json : url vide → https://www.cliniqued.com (vérifié 200, titre « Clinique D | Dermatologie esthétique et photothérapie à Laval », retrouvé via Serper — la fiche affichait « Site : [Clinique D]() ») et sectors [] → [Santé, Esthétique] (secteurs déjà au vocabulaire — 58 et 1 sources ; la fiche affichait « Secteurs : n/d »). Docstring du connecteur ajoutée (re-vérif 2026-09-21). Fiches docs/connecteurs/ cliniqued.md + ats-jazzhr.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,2 s, ok=1 — 0 reste le volume légitime tant que Clinique D ne republie pas ; les offres reviendront d'elles-mêmes si republiées (liste + filtre Québec au détail opérationnels). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 3 files +54 −54
    3. [ka6] fix connecteur capintel: faux positif de supervision (0 offre QC légitime — CapIntel n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient de la définition de succès de la supervision : le board Greenhouse capintel n'a AUCUNE offre QC depuis la dépublication le 2026-09-21 (sync de 16:41, miss_count=2 → active=0 à 18:14) de l'unique offre montréalaise « Context Engineer » 5111380007 (parue le 2026-04-16, détail live 404 confirmé), donc les syncs horaires rendent ok=1 found=0 (médiane 0.5) et sont comptés comme non-succès — même profil que canderel 32f1e24 (volet dépublication), coorstek 2c4caea, altusgroup f092997, quadreal ef41976 : tenant à volume QC temporairement nul. Le connecteur est INTACT et re-vérifié live exhaustivement : l'API boards-api.greenhouse.io répond (3 offres : Senior Account Executive « US (Remote) » 5234414007, Strategic Account Development Associate Toronto 5210626007 et NYC 5210627007, toutes correctement exclues par is_quebec_location), zéro occurrence de montréal/québec/laval/gatineau/sherbrooke/qc dans le JSON complet content=true, et l'endpoint /offices vérifié bureau par bureau : CapIntel a bien des bureaux « Gatineau office (QC) » et « Montreal office (QC) » dans Greenhouse mais 0 poste rattaché à chacun (les 3 postes live : 1 au bureau US NY, 2 sans bureau) — pas d'angle mort multi-lieux, pas de partition par langue (Greenhouse n'est pas partitionné par culture, contrairement à Dayforce). Correction au passage de l'artefact du générateur vague C dans data/sources.json : url vide → https://capintel.com (vérifié 200, titre « CapIntel | Investment Presentations for Wealth Firms » — fintech de présentations de placements, cohérent avec les secteurs Finance/Données déjà en place ; la fiche affichait « Site : [CapIntel]() »). Docstring du connecteur mise à jour (re-vérif 2026-09-21). Fiches docs/connecteurs/ capintel.md + ats-greenhouse.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 0,1 s, ok=1 — 0 reste le volume légitime tant que CapIntel ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées (filtre client is_quebec_location opérationnel, remote-first canadien surveillé via le lieu du poste). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 3 files +155 −181
    4. [ka6] fix connecteur canderel: bascule en balayage double fr-CA + en-CA (le tenant Dayforce ne publie plus rien en français) + correction artefacts sources.json — le statut stale combinait deux choses : (1) la dépublication NORMALE des 2 offres QC (« Coordonnateur/trice RH et recrutement » 3674/3628, même jobReqId 864, Montréal, parues les 2026-08-10/2026-07-16) confirmée à la source (absentes du search live toutes cultures ; le board en-CA liste 3 offres : Calgary 3709, Edmonton 3698, Toronto 3676), qui a fait tomber found de 2 à 0 au sync de 16:41 (miss_count=2 → active=0 à 18:14), et (2) un VRAI défaut d'aveuglement du connecteur : la recherche Dayforce est PARTITIONNÉE par culture de publication (constat harrisrebar 2026-09-10) et le search fr-CA du tenant canderel renvoie désormais maxCount=0 (vérifié live, 200 JSON valide) alors que en-CA/en-US renvoient les 3 offres du board, toutes publiées en anglais seulement — même défaut que g3canada 77813e5 et stateindustrial. Aucune offre QC live (les 3 offres sont AB/AB/ON, correctement exclues par _is_qc) : 0 reste le volume légitime tant que Canderel ne republie pas au Québec, mais le connecteur n'est plus aveugle et les offres reviendront d'elles-mêmes. Correction dans canderel.py : fetch() balaie fr-CA PUIS en-CA et déduplique par jobPostingId, la version française gagne (pattern harrisrebar, choisi plutôt que la simple bascule CULTURE=en-CA de g3canada car Canderel — promoteur immobilier montréalais — publiait ses offres QC en français : le double balayage garde le fr quand il existe). Preuve du correctif : fetch sans filtre QC = 3 offres lues (Calgary/Edmonton/Toronto), CULTURE restaurée à fr-CA après passage. Correction des artefacts vague C dans data/sources.json : url vide → https://canderel.com (vérifié 200, titre « Home | Welcome to Truly Invested | Canderel ») et secteurs « Agroalimentaire, Fabrication » (confusion du générateur avec l'édulcorant britannique Canderel) → « Immobilier » (déjà au vocabulaire, 30 sources ; les offres historiques — entretien d'immeuble Place Ville Marie, RH — sont bien l'immobilier montréalais). Fiches docs/connecteurs/ canderel.md + ats-dayforce.md + INDEX.md régénérées via scripts/gen_connector_docs.py (les 1129 autres fiches, dont seuls les instantanés horodatés changeaient, restaurées — hors périmètre). Sync isolé rejoué : found=0 en 5,2 s, ok=1 — cohérent avec la médiane 1.0 sur un tenant à volume QC temporairement nul. 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 3 files +225 −251
  6. Fri, Sep 11, 2026 1

    1. [ka6] fix connecteur derumarketcatering: retrait définitif de la source (précédent projevia 7b871e8) — double condamnation confirmée en direct le 2026-09-11 : (1) le compte JazzHR du tenant est désactivé de façon permanente (page 200 « Inactive Career Page / this account is no longer active », détectée explicitement par jazzhr._fetch_list depuis la mission du 2026-09-04 → RuntimeError sans retry, 60 échecs consécutifs) ; (2) l'employeur était un faux positif de génération : Deru Market + Catering est un restaurant de Kirkland, État de WASHINGTON (derumarket.com, ZipRecruiter « Kirkland, WA »), pas Kirkland QC — sa seule offre jamais ingérée (FOH Staff, Kirkland WA) était américaine et est inactive en base depuis le fix is_quebec_location f4038e4. Deux missions ka6 (2026-08-26, 2026-09-04) avaient déjà conclu site_source_mort sans retirer la source : la supervision la resynchronisait donc en boucle (statut broken). Retrait complet selon le pattern maison : suppression de jobka/connectors/derumarketcatering.py (registre auto-découvrant → 1105 connecteurs), de l'entrée data/sources.json (1107 sources, employeurs_directs 1048→1047, page Sources vérifiée sans Deru) et de la fiche docs/connecteurs/derumarketcatering.md (INDEX/ats-jazzhr seront nettoyés à la prochaine régénération gen_connector_docs). Données en base conservées (offre déjà active=0, historique sync_log intact). Aucune modification de la plateforme jazzhr : non-régression tenant cliniqued found=1 ok. run.py sync derumarketcatering → « connecteur inconnu » (comportement attendu). 101 tests pytest verts. pm2 restart job-ka-sync OK, site 200.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file −109
  7. Fri, Aug 28, 2026 1

    1. Simon-Pierre Boucher · 10 files
  8. Tue, Aug 25, 2026 4

    1. Vague E — 3 nouvelles familles ATS (JazzHR, Teamtailor, Zoho Recruit) + 60 connecteurs, ~547 offres QC
      …
      - Nouvelles classes de plateforme : jazzhr.py (liste /apply/ + JSON-LD),
        teamtailor.py (sitemap + JSON-LD), zoho_recruit.py (flux RSS public) —
        filtre QC au détail avec report si budget épuisé (doctrine taleo_tbe/adp).
      - serper_scout.py : 5 nouveaux motifs (jazzhr, teamtailor, zohorecruit,
        talentnest, njoyn avec CLID/CL/hôte) + CLID dans le dédoublonnage.
      - 60 connecteurs : 31 JazzHR (Optel 13, Playground 21, Ultium CAM,
        Altitude Aérospatiale, FortNine, XTL 21, Valnet 22…), 17 Zoho Recruit
        (Mallette Saguenay 26, DRB 22, dentago 20, Carnaval de Québec, FÉRIQUE,
        Altitude Sports, Excavations Lafontaine…), 9 Teamtailor (Norda Stelo 50,
        Workin Group 34, Humanise 13, CAM Mécanique, Synertek…), 3 Njoyn
        (IR-CUSM 37, RTL 17, Groupe Master 17).
      - njoyn.py : correctif _keep — certains habillages mettent la date dans la
        colonne pays (Groupe Master 0 -> 17) ; n'exclure que les pays reconnus.
      - sources.json : 1 108 sources, 23 familles ATS ; docs/connecteurs
        régénérées (1 133 fiches) ; rapport docs/prospection-vagueE.md
        (écartés motivés + reliquats vague F : TalentNest, ENPQ/APCHQ, CUSM).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1,134 files +11,913 −4,745
    2. Vague D implémentée — 75 nouveaux connecteurs (968 -> 1044 employeurs), ~768 offres QC
      …
      - 55 connecteurs générés depuis feeds-vagueD.json (gen_connectors), tous
        synchronisés sans échec (333 offres). Sandvik re-pointé sur le babillard
        public sandvik-jobs.
      - 20 connecteurs manuels sur familles existantes (435 offres) : ADP ×12
        (Nordik, Uniboard, Richelieu, UV Assurance, Strathmore, H2O, Cook It,
        Canadian Royalties, Niobec, Nemaska, Abritek, Triple Boris), Alstom
        SuccessFactors (227 offres, La Pocatière/MTL), Kiewit-Ganotec (50),
        Groupe Bellemare Njoyn (27), Ville de Mirabel, Sel Windsor, Global Excel,
        Graymont TBE, IAMGOLD Taleo.
      - Correctifs de familles : adp.py FORCE_CITY (mono-sites QC sans
        requisitionLocation) ; taleo_tbe.py secours og:title variante
        « - Canada - QC - Ville » (Graymont 0 -> 4) ; successfactors.py slug
        « -queb » final + garde-fou is_quebec_location contre les faux « QC »
        (quality control, 3 offres US interceptées ; Kiewit 3 -> 50).
      - 9 pistes écartées avec raison (babillards US/vides, iCIMS SPA) —
        détail dans docs/prospection-vagueD.md.
      - sources.json : 1 048 sources ; docs/connecteurs régénérées (1 070 fiches).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1,071 files +23,177 −9,338
    3. Prospection vague D — 55 nouveaux flux ATS confirmés + 34 pistes autres ATS
      …
      Scout Serper (1 920 requêtes, 96 termes inédits : 61 villes/régions + 35 métiers)
      et découverte sectorielle (910 employeurs QC visités par detect_ats) :
      - data/feeds-vagueD.json : 55 flux confirmés ≥1 offre QC (workday 27,
        smartrecruiters 14, dayforce 6, bamboohr 3, greenhouse 2, ashby/lever/workable 1)
        — dont Loblaw/Provigo, Best Buy Canada, AMF, Chanel, Carrier, Equisoft,
        Groupe Meloche, Téléfilm, Le Massif, Scandinave Spa
      - data/detected-other-ats.jsonl : +34 pistes sur familles existantes
        (adp 17, ukg 5, successfactors 4, taleo 3, njoyn 3, icims 2) — filon minier
        Abitibi/Nord (IAMGOLD, Hecla, Wesdome, Nemaska, Niobec…), Alstom La Pocatière,
        Richelieu, Logistec, villes de Mirabel/Terrebonne
      - rapport complet : docs/prospection-vagueD.md (méthode, tables, suites)
      Prochaine étape sur validation : gen_connectors.py data/feeds-vagueD.json
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +185
  9. Mon, Aug 24, 2026 1

    1. Simon-Pierre Boucher · 2 files
  10. Sun, Aug 23, 2026 1

    1. Vague C — +620 connecteurs employeurs directs (350 -> 968)
      …
      Campagne de découverte massive en 3 angles : éclaireur Serper élargi
      (60 termes x 10 ATS x 3 pages), reprise des 266 flux confirmés le 22-08
      jamais intégrés, et sondage par nom de 182 grands employeurs QC sur 10 ATS.
      Fusion/nettoyage (scripts/merge_confirmed.py : dédoublonnage multi-vagues,
      filtre des faux positifs Québec hors province, nettoyage des noms issus des
      titres Google, exclusion des babillards de démo) puis secteurs attribués par
      lots (scripts/classify_sectors.py).
      
      - Workday +148, SmartRecruiters +118, Dayforce +96, Greenhouse +93,
        Breezy +50, Workable +40, Lever +32, Ashby +25, Recruitee +12, BambooHR +3
      - SuccessFactors +4 vérifiés main : TELUS, Énergir, VIA Rail, Canada Vie
      - prises notables : Thales, Fiera Capital, Fednav, Wolseley, Cominar, Ludia,
        Granit Design, Vortex Structures Aquatiques, Warner Bros. Discovery
      - 973 sources au registre ; docs/connecteurs régénérées (995 fiches) ;
        docs/CONFORMITE.md : section Vague C + écartés (Air Canada -> Phenom, TÉLUQ,
        Valero, faux QC)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 996 files +67,769 −2,403
  11. Sat, Aug 22, 2026 1

    1. Vague B — 110 nouvelles sources (26 Dayforce nouvelle famille + 84 sur familles existantes)
      …
      - Nouvelle famille Dayforce HCM (jobs.dayforcehcm.com, API JSON du frontal Next.js,
        csrf anonyme + recherche paginée, détail PayClass/PayType avec cache et budget) :
        26 employeurs dont Groupe Maurice, Groupe CH, La Vie en Rose, Eidos-Montréal,
        Air Canada Rouge, Port de Québec, Soprema, BPA…
      - Ajouts sur familles existantes : Workday +17 (Simons, Cineplex, TJX, FedEx, Abbott…),
        Greenhouse +17 (Coveo, KRAFTON, Lyft, AutoTrader…), SmartRecruiters +13,
        Workable +11, Breezy +8, Recruitee +7, Lever +6, Ashby +5.
      - sources.json : 244 → 354 sources ; docs/connecteurs régénérées (376 fiches).
      - docs/CONFORMITE.md : bases d'accès vérifiées 2026-08-22, 20+ sources écartées
        avec raisons (agences, agrégateurs, babillards vides, faux positifs français).
      - Sync validé : 110/110 sources OK, 2 102 offres ajoutées (total BD 25 280).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 377 files +15,094 −2,868
  12. Wed, Aug 19, 2026 2

    1. Simon-Pierre Boucher · 239 files +2,823 −2,146
  13. Tue, Aug 18, 2026 2

    1. 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>
      Simon-Pierre Boucher · 239 files +1,542 −1,537
    2. 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>
      Simon-Pierre Boucher · 240 files +25,493
  14. Mon, Aug 17, 2026 1

    1. 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>
      Simon-Pierre Boucher · 2 files +438
Menu

Theme