SPB Git

spb/job-ka

Public
History of data Clear filter
page 1
  1. Fri, Sep 18, 2026 4

    1. [ka6] fix connecteur drop_genie: faux positif de supervision (0 offre légitime — DropGenie n'a plus aucun poste ouvert) — aucun défaut du connecteur, correction d'artefacts sources.json (url vide, secteur erroné) — le statut stale vient de la définition de succès de la supervision : le tenant Breezy drop-genie n'a AUCUNE offre depuis la fermeture de son unique poste « Test Engineer - Microfluidics » 0cec9ddfa30d (Montréal, paru le 2026-06-08, page détail live = « Position Closed », miss_count=2 → active=0 déjà appliqué), donc chaque sync horaire rend ok=1 found=0 (médiane 1.0) et est compté comme non-succès depuis 4,8 h. Le connecteur est INTACT et re-vérifié live : l'API https://drop-genie.breezy.hr/json?verbose=true répond 200 avec un tableau vide [], et la page carrières affiche NO_POSITIONS (l'aveuglement type stateindustrial est exclu : zéro offre sur le board, toutes langues confondues). Même profil que altusgroup 2fc9e63, autotradercanada 77020a3, altom_transport ea13137 : tenant à volume nul compté non-succès par la supervision. Correction au passage de deux artefacts du générateur vague C dans data/sources.json : url vide → https://www.dropgenie.com (vérifié 200, titre « DropGenie – Making Personalized Possible » ; la fiche affichait « Site : [DropGenie]() ») et secteur « Logistique » → « Biotechnologie » (DropGenie automatise l'édition génique — « automate gene editing » sur son board —, son unique offre était un poste de microfluidique ; secteur déjà présent dans le vocabulaire, 7 sources). Docstring du connecteur mise à jour (0 offre, re-vérif 2026-09-18). Sync isolé rejoué : found=0 en 0,1 s, ok=1 — 0 est le volume légitime tant que DropGenie ne republie pas ; 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.
      Simon-Pierre Boucher · 1 file +2 −2
    2. [ka6] fix connecteur g3canada: bascule CULTURE fr-CA → en-CA (le tenant Dayforce ne sert plus rien en fr-CA) + correction artefacts sources.json — le statut stale combinait deux choses : (1) la dépublication NORMALE de l'unique offre QC (« Journalier » 3773, Québec, parue le 2026-07-30) confirmée à la source (404 sur l'API détail), qui a fait tomber found de 1 à 0 (miss_count=2 → active=0), et (2) un VRAI défaut d'aveuglement du connecteur : le search Dayforce du tenant g3canada en cultureCode fr-CA renvoie désormais maxCount=0 (vérifié live, 200 JSON valide) alors que le même search en en-CA/en-US renvoie les 13 offres du board — même défaut que stateindustrial d478a07 (le fr-CA n'est pas cassé globalement chez Dayforce : lavieenrose fr-CA = 154 offres ; c'est ce tenant qui a désactivé/vidé sa culture fr-CA). Aucune offre QC live sur le board (Winnipeg ×3, Alberta ×2, Saskatchewan ×5, North Vancouver, Thunder Bay ×2 — l'unique occurrence de « quebec » dans le JSON complet est « excluding Quebec » dans une description) : 0 reste le volume légitime tant que G3 ne republie pas au Québec (terminal au Port de Québec), mais le connecteur n'est plus aveugle et les offres reviendront d'elles-mêmes. Correction minimale dans g3canada.py : CULTURE='en-CA' (le filtre Québec reste côté client via _is_qc) + correction des artefacts vague C : EMPLOYER/name « Électricien industriel » (titre de poste pris pour un nom d'employeur) → « G3 Canada » (site officiel https://www.g3.ca vérifié 200, titre « G3 - G3 Canada Limited »), url vide → https://www.g3.ca, region « G3 Québec » (nom d'élévateur) → « Québec », avec UPDATE du champ employer de l'offre inactive en base. Sync isolé rejoué : found=0 en 2,9 s, ok=1 — 13 offres lues, 0 QC après filtre, cohérent avec la médiane 0.5. 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 · 1 file +3 −3
    3. [ka6] fix connecteur altusgroup: faux positif de supervision (0 offre QC légitime — Altus n'a plus de poste au Québec) + échec DNS transitoire ponctuel — 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 Workday altusgroup.wd3 (site AltusGroup) n'a AUCUNE offre QC depuis le retrait de l'unique offre montréalaise fin août (R0013818, déjà constaté le 2026-08-26), donc chaque sync horaire rend ok=1 found=0 (médiane 0.0) et est compté comme non-succès depuis le 2026-08-26 (551 h). Le connecteur est INTACT et re-vérifié live : l'API cxs répond 200 avec 42 offres (Toronto, Calgary, Ottawa, US, UK, Paris, Sydney, Singapour, Inde…) — recherche serveur « Quebec »/« Montréal » = 0 résultat, zéro occurrence de quebec/montréal/laval/gatineau/sherbrooke dans le JSON complet des 3 pages (l'aveuglement type stateindustrial est exclu ; le hook _external_id posé le 2026-09-12 reste correct). L'unique sync en échec (18/09 12:51) est une NameResolutionError DNS transitoire sur altusgroup.wd3.myworkdayjobs.com, non reproduite (API OK en live). Même profil que altom_transport ea13137, earthrated f7b1c35, canadasmotorcycle 175b215, jsheldllc bdc5d09, psacunion 4d8080b : tenant à volume QC nul/faible compté non-succès par la supervision. Correction au passage de l'artefact du générateur vague D : url vide dans data/sources.json → https://www.altusgroup.com (vérifié 200, titre « Altus Group - Data-Powered CRE Technology & Analytics » ; la fiche affichait « Site : [Groupe Altus]() »). Le nom d'employeur « Groupe Altus » est correct. Docstring du connecteur mise à jour (42 offres, re-vérif 2026-09-18). Sync isolé rejoué : found=0 en 4,0 s, ok=1 — 0 est le volume légitime tant qu'Altus 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 · 1 file +1 −1
    4. [ka6] fix connecteur altom_transport: faux positif de supervision (0 offre QC légitime chez ce transporteur US) + échec DNS transitoire ponctuel — 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 Workable altom-transport n'a AUCUNE offre QC depuis la fermeture de « Chauffeur de Camion-Citerne Classe 1 » (Montréal) fin août, donc chaque sync horaire rend ok=1 found=0 (médiane 0.0) et est compté comme non-succès depuis le 2026-08-28 (509 h). Le connecteur est INTACT et re-vérifié live : l'API widget répond 200 avec 52 offres, TOUTES aux États-Unis — zéro lieu CA dans les tableaux locations, zéro poste en télétravail, zéro mention Québec/Montréal dans le JSON complet (l'aveuglement type stateindustrial est exclu). L'unique sync en échec (17/09 20:51) est une NameResolutionError DNS transitoire sur apply.workable.com, non reproduite. Même profil que earthrated f7b1c35, canadasmotorcycle 175b215, jsheldllc bdc5d09, psacunion 4d8080b : tenant à volume QC nul/faible compté non-succès par la supervision. Correction au passage de l'artefact du générateur vague C : url vide dans data/sources.json → https://altomtransport.com (vérifié 200, titre « Altom Transport | Petroleum and Chemical Transportation » ; la fiche affichait « Site : [Altom Transport]() »). Le nom d'employeur « Altom Transport » est correct. Docstring du connecteur mise à jour (52 offres, re-vérif 2026-09-18). Sync isolé rejoué : found=0 en 0,2 s, ok=1 — 0 est le volume légitime tant qu'Altom 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 · 1 file +1 −1
  2. Thu, Sep 17, 2026 5

    1. [ka6] fix connecteur stateindustrial: bascule CULTURE fr-CA → en-US (le tenant Dayforce ne sert plus rien en fr-CA) + correction artefacts sources.json — le statut stale combinait deux choses : (1) la dépublication NORMALE des 2 offres QC d'août (« Représentant(e) des ventes externes - Longueuil » 11661 et « Représentant(e) des ventes B2B » 11658, absentes du board dans TOUTES les cultures) qui a fait tomber found à 0 (miss_count=2 → active=0), et (2) un VRAI défaut d'aveuglement du connecteur : le search Dayforce du tenant stateindustrial en cultureCode fr-CA renvoie désormais maxCount=0 (vérifié live, 200 JSON valide) alors que le même search en en-US renvoie 29 offres, dont une offre QC RÉELLE au titre déjà francophone (« Représentant(e) des ventes externes (français/anglais) » 11795, Québec City QC, parue le 2026-09-05, détail API OK avec PayType Salary et fourchette 45-65 k) que le connecteur ne voyait pas. Le fr-CA n'est pas cassé globalement chez Dayforce (lavieenrose fr-CA = 150 offres) : c'est ce tenant qui a désactivé/vidé sa culture fr-CA. Correction minimale dans stateindustrial.py : CULTURE='en-US' (le filtre Québec reste côté client via _is_qc), plus correction des artefacts vague C dans sources.json : url vide → https://www.stateindustrial.com (vérifié 200, titre « Home - State Industrial Products ») et name/EMPLOYER « Stateindustrial » (slug collé) → « State Industrial Products », avec UPDATE du champ employer des 2 offres inactives en base. Sync isolé rejoué : found=1, added=1 en 6,9 s — l'offre 11795 est en base, active, ville Québec, région Capitale-Nationale, volume 1 ≈ médiane 0.5. 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 · 1 file +2 −2
    2. [ka6] fix connecteur earthrated: faux positif de supervision (dépublication de l'unique offre QC Earth Rated) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient du retrait NORMAL de la dernière offre QC du tenant Greenhouse earthrated (« Social Media Video Creator & Editor/Créateur(trice) de contenu vidéo » 4327936009, Montréal, parue le 2026-07-22) : found=1 stable pendant des semaines jusqu'au sync de 12:21 (17/09), puis found=0 à 14:37 et 16:24, offre à miss_count=2 → active=0 (removed=1). Le connecteur est INTACT et vérifié live : l'API boards-api.greenhouse.io/v1/boards/earthrated/jobs répond 200 avec jobs=[] (0 offre sur TOUT le board, tous lieux confondus — le tenant n'a plus aucun poste ouvert), et le détail API de l'offre retirée renvoie 404 « Job not found » (page publique en 302 — dépublication confirmée à la source). Tous les syncs sont ok=1 dans sync_log — même profil que canadasmotorcycle 175b215, jsheldllc bdc5d09, psacunion 4d8080b, gilead 0760e1f, samsara, delos_data, solmentalhealth, autotradercanada, hera et ogilvycanada : tenant à faible volume QC dont la dépublication fait tomber le volume à 0, compté comme non-succès par la supervision (médiane 0.5). Correction au passage de l'artefact du générateur vague C : url vide dans data/sources.json → https://www.earthrated.com (site officiel vérifié vivant, 200, titre « Earth Rated | Making life with dogs simpler and better. » ; la fiche affichait « Site : [Earth Rated]() »). Le nom d'employeur « Earth Rated » est correct (pas d'artefact titre-de-poste). Sync isolé rejoué : found=0 en 0,1 s, ok — 0 est le volume légitime tant que le tenant n'a pas de poste ouvert ; les offres reviendront d'elles-mêmes si republiées. 106 tests pytest verts. pm2 restart job-ka-sync OK, site 200.
      Simon-Pierre Boucher · 1 file +1 −1
    3. [ka6] fix connecteur canadasmotorcycle: faux positif de supervision (dépublication de l'unique offre QC FortNine) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient du retrait NORMAL de la dernière offre QC du tenant JazzHR canadasmotorcycle.applytojob.com (« Warehouse Associate - Picking / Commis d'entrepôt » woW2CH6Y9y, Montréal, parue le 2026-09-01) : found=1 stable pendant des semaines jusqu'au sync de 12:24 (17/09), puis found=0 à 16:01 et 17:09, offre à miss_count=2 → active=0 (removed=1). Le connecteur est INTACT et vérifié live : le board /apply/ répond 200 et affiche explicitement « There are no open positions at this time. » (zéro lien /apply/<id>), et la page détail de l'offre retirée renvoie HTTP 410 Gone (réponse JazzHR d'une offre dépubliée — dépublication confirmée à la source). Tous les syncs sont ok=1 dans sync_log — même profil que jsheldllc bdc5d09, psacunion 4d8080b, gilead 0760e1f, samsara, delos_data, solmentalhealth, autotradercanada, hera et ogilvycanada : tenant à faible volume QC dont la dépublication fait tomber le volume à 0, compté comme non-succès par la supervision (médiane 0.5). Correction au passage de l'artefact du générateur : url vide dans data/sources.json → https://fortnine.ca (site officiel vérifié vivant — 403 anti-bot en curl direct mais 200 via Scrapfly, titre « Canada's Motorcycle Powersport Online Store | FortNine » ; la fiche affichait « Site : [FortNine]() »). Le nom d'employeur « FortNine » est correct (pas d'artefact titre-de-poste). Sync isolé rejoué : found=0 en 0,2 s, ok — 0 est le volume légitime tant que le tenant n'a pas de poste ouvert ; les offres reviendront d'elles-mêmes si republiées. 106 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 +1 −1
    4. [ka6] fix connecteur jsheldllc: faux positif de supervision (dépublication des 5 offres QC Technorm) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient du retrait NORMAL des 5 offres QC du tenant SmartRecruiters JSHeldLLC (filiale Technorm : Technicien multimédia 744000138400679 Montréal, 2× Technologue en architecture codes et normes 744000137204159 Québec / 744000137204029 Montréal, 2× Architecte conseiller technique OAQ 744000137203030 Québec / 744000137201864 Montréal) : found=4 stable pendant des semaines jusqu'au sync de 08:25 (17/09), puis found=0 à 10:25 et 12:42, les 5 offres à miss_count=2 → active=0 (removed=4+1). Le connecteur est INTACT et vérifié live : l'API postings répond (200, totalFound=105 sur le board, 6 offres Canada — Burlington ON, Winnipeg MB, Halifax NS, 2× Toronto ON, Vancouver BC — AUCUNE au Québec), et le détail API des offres retirées renvoie active:false (dépublication confirmée à la source). Tous les syncs sont ok=1 dans sync_log — même profil que psacunion 4d8080b, gilead 0760e1f, samsara, delos_data, solmentalhealth, autotradercanada, hera et ogilvycanada : tenant à faible volume QC dont la dépublication fait tomber le volume à 0, compté comme non-succès par la supervision (médiane 2.0). Correction au passage de l'artefact du générateur vague C : url vide dans data/sources.json → https://www.jsheld.com (site officiel vérifié vivant — 403 anti-bot en curl direct mais 200 via Scrapfly, titre « Technical, Scientific, Financial & Strategic Consulting Expertise » ; la fiche affichait « Site : []() »). Le nom d'employeur « J.S. Held LLC » est correct (pas d'artefact titre-de-poste cette fois). Sync isolé rejoué : found=0 en 1,7 s, ok — 0 est le volume légitime tant que le tenant n'a pas de poste QC ; les offres reviendront d'elles-mêmes si republiées. 106 tests pytest verts. pm2 restart job-ka-sync OK, site 200.
      Simon-Pierre Boucher · 1 file +1 −1
    5. [ka6] fix connecteur psacunion: faux positif de supervision (dépublication de l'unique offre QC) — aucun défaut du connecteur, correction de deux artefacts de génération (url vide + titre de poste utilisé comme nom d'employeur) — le statut stale vient du retrait NORMAL des offres QC du tenant Workday psacunion.wd10/psac : après « Regional Representative, Gatineau » (JR100166) et « Regional Representative, Montreal » (JR100182), la dernière offre QC « Grievance & Adjudication Officer, Montreal » (JR100033, Montréal) a disparu du board au sync de 23:50 (16/09) → found=0, miss_count 1 puis 2 → active=0. Le connecteur est INTACT et vérifié live : l'API cxs répond (200, total=8 offres sur le board — 7 à Ottawa ON, 1 à Yellowknife NT, AUCUNE au Québec), searchText=Montreal retourne total=0, et le détail cxs de JR100033 renvoie 403 (réponse Workday d'une offre dépubliée). Tous les syncs sont ok=1 dans sync_log — même profil que gilead 0760e1f, samsara 1a3fe57, delos_data 5cf2a52, solmentalhealth fe2debf, autotradercanada e3bb827, hera 4990c80 et ogilvycanada c7adc0c : tenant à faible volume QC dont la dépublication fait tomber le volume à 0, compté comme non-succès par la supervision (médiane 1.0). Correction au passage de DEUX artefacts du générateur vague C : url vide dans data/sources.json → https://syndicatafpc.ca (site officiel FR de l'AFPC, vérifié 200 ; la fiche affichait « Site : []() »), et name/EMPLOYER = « Regional Representative, Gatineau » (un TITRE DE POSTE pris pour le nom de l'employeur) → « Alliance de la Fonction publique du Canada » dans sources.json et psacunion.py, plus UPDATE du champ employer des 3 offres psacunion en base (elles ne reviendront pas via l'upsert puisque dépubliées). Sync isolé rejoué : found=0 en 0,3 s, removed=1 (JR100033 à miss_count=2 → retrait normal), ok — 0 est le volume légitime tant que le tenant n'a pas de poste QC ; les offres reviendront d'elles-mêmes si republiées. 106 tests pytest verts. pm2 restart job-ka-sync OK, site 200.
      Simon-Pierre Boucher · 1 file +2 −2
  3. Wed, Sep 16, 2026 1

    1. [ka6] fix connecteur gilead: faux positif de supervision (dépublication de l'unique offre QC) — aucun défaut du connecteur, correction de deux artefacts de génération (url vide + titre de poste utilisé comme nom d'employeur) — le statut stale vient du retrait NORMAL de l'unique offre QC du tenant Workday gilead.wd1/gileadcareers (« Medical Scientist HIV, Quebec », R0052893, Québec) : found=1 stable depuis des semaines jusqu'au sync de 09:04 (16/09), puis found=0 à 11:24 et 13:37, offre à miss_count=2 → active=0. Le connecteur est INTACT et vérifié live : l'API cxs répond (200, total=485 offres sur le board), la facette « locations » Canada ne liste plus que Edmonton (7), Ontario (1) et Mississauga (3) — plus aucun poste au Québec —, la recherche searchText=Quebec retourne total=0, et le détail cxs de R0052893 renvoie 403 S22 « permission denied » (réponse Workday d'une offre dépubliée ; la page publique 200 n'est que le shell SPA). Tous les syncs sont ok=1 dans sync_log — même profil que samsara 1a3fe57, delos_data 5cf2a52, solmentalhealth fe2debf, autotradercanada e3bb827, hera 4990c80 et ogilvycanada c7adc0c : tenant à offre QC unique dont la dépublication fait tomber le volume à 0, compté comme non-succès par la supervision (médiane 0.5). Correction au passage de DEUX artefacts du générateur vague C : url vide dans data/sources.json → https://www.gilead.com (vérifié 200 ; la fiche affichait « Site : []() »), et name/EMPLOYER = « Medical Scientist HIV, Quebec » (un TITRE DE POSTE pris pour le nom de l'employeur) → « Gilead Sciences » dans sources.json et gilead.py — l'offre inactive en base sera renommée d'elle-même à toute republication (l'UPDATE de l'upsert rafraîchit employer). Sync isolé rejoué : found=0 en 40,5 s (scan client du board, pas de facette QC serveur), ok — 0 est le volume légitime tant que le tenant n'a pas de poste QC ; l'offre reviendra d'elle-même si republiée. 106 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 +2 −2
  4. Tue, Sep 15, 2026 3

    1. [ka6] fix connecteur ogilvycanada: faux positif de supervision (dépublication de l'unique offre QC) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut stale vient du retrait NORMAL de l'unique offre QC du board greenhouse ogilvycanada (« Superviseur(e) De Comptes », id 4699352005, Montréal) : found=1 stable depuis des semaines jusqu'au sync de 15:17 (15/09), puis found=0 à 17:33 et 19:47, offre à miss_count=2 → active=0 (removed=1). Le connecteur est INTACT et vérifié live : l'API Greenhouse répond (200, 1 offre restante « Account Executive » à Toronto, Canada, correctement exclue par is_quebec_location — vérifié → False), l'offre retirée renvoie 404 sur l'API détail et sa page publique redirige vers le board avec ?error=true. Tous les syncs sont ok=1 dans sync_log — même profil que samsara 1a3fe57, delos_data 5cf2a52, solmentalhealth fe2debf, autotradercanada e3bb827 et hera 4990c80 : tenant à offre QC unique dont la dépublication fait tomber le volume à 0, compté comme non-succès par la supervision (médiane 0.5). Correction au passage du même artefact de génération : url vide dans data/sources.json → https://www.ogilvy.com/ca (vérifié 200 ; la fiche affichait « Site : []() »). Sync isolé rejoué : found=0 en 0,1 s, ok — 0 est le volume légitime tant que le tenant n'a pas de poste QC ; l'offre reviendra d'elle-même si republiée. 105 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 +1 −1
    2. [ka6] fix connecteur eq3_ltd: repli « board délisté » — /json vide alors que les 12 offres restent EN LIGNE (re-vérification live des pages /p/) — le 2026-09-15 vers 12:07, le board Breezy eq3-ltd a cessé de lister ses postes (/json et /json?verbose=true = [] — vérifié direct, UA navigateur ET proxy résidentiel CA —, sitemap.xml sans aucune offre, HTML %LABEL_NO_POSITIONS%) alors que les 12 offres QC connues sont toutes encore en ligne et ouvertes aux candidatures (pages /p/ 200 avec JSON-LD JobPosting complet et bouton APPLY, aucune « Position Closed ») et que la page carrières officielle eq3.com/ca/en/aboutus/careers pointe toujours vers ce même board : delisting du portail côté tenant, PAS une dépublication (contrairement aux précédents hera 4990c80/autotradercanada e3bb827 où les offres retirées affichaient « Position Closed »/404). L'API Breezy est saine globalement (bellatrx 14, brandmomentum 34, recruiting 78…) ; aucun slug alternatif (eq3.breezy.hr existe mais vide) ni endpoint de rechange (embed/feed/rss → 302). Correctif tenant-spécifique dans eq3_ltd.py (breezy.py intact) : quand la liste est vide, re-vérification live de chaque offre active connue via sa page /p/ — JSON-LD JobPosting exigé, rejet des pages « Position Closed »/« no longer accepting » et hors Québec, champs frais depuis le JSON-LD (titre, description, ville, date), libellé salarial conservé du dernier état liste (8/12 avec salaire, préservés). Données réelles constatées à la source, jamais inventées ; limite assumée : pas de découverte de NOUVELLES offres tant que le board est délisté — dès que /json redevient non vide, le chemin normal reprend seul et les offres réellement fermées suivront miss_count → retrait. Correction au passage du même artefact sources.json que samsara/delos_data/solmentalhealth/hera : url vide → https://www.eq3.com. Test unitaire ajouté (offre vivante QC conservée avec salaire, « Position Closed » et hors-QC lâchées, repli jamais sollicité sur liste non vide, 0 requête si base vide). Syncs réels rejoués : found=12 (médiane exacte) ×2, updated=4 puis 0, aucune alerte, miss_count=0 partout. 105 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 +1 −1
  5. Mon, Sep 14, 2026 3

    1. [ka6] fix connecteur autotradercanada: faux positif de supervision (dépublication des 2 offres QC) — aucun défaut du connecteur, correction d'un artefact sources.json (url vide) — le statut broken vient du retrait NORMAL des 2 seules offres QC du board greenhouse autotradercanada (« Gestionnaire de performance/Performance Manager - Montréal » id 7799193003 et « Performance Manager, Longueuil, QC » id 7820524003) : found=2 stable depuis des semaines jusqu'au sync de 12:40, puis found=0 dès 15:05, offres à miss_count=2 → active=0 à 16:18 (removed=2). Le connecteur est INTACT et vérifié live : l'API Greenhouse répond (200, 24 offres — 23 Toronto ON, 1 Remote Canada), les 2 offres retirées renvoient 404 sur l'API détail, et les libellés restants sont correctement exclus par is_quebec_location (vérifié : « Toronto, ON (Canada) » et « Remote (Canada) » → False). Tous les syncs sont ok=1 dans sync_log — même profil que samsara 1a3fe57, delos_data 5cf2a52 et solmentalhealth fe2debf : tenant à peu d'offres QC dont la dépublication fait tomber le volume à 0, compté comme non-succès par la supervision. Correction au passage du même artefact de génération : url vide dans data/sources.json → https://www.autotrader.ca (la fiche affichait « Site : []() »). Sync isolé rejoué : found=0 en 0,1 s, ok — 0 est le volume légitime tant que le tenant n'a pas de poste QC ; les offres reviendront d'elles-mêmes si republiées. 104 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 +1 −1
    2. [ka6] fix connecteur solmentalhealth: faux positif du filtre Québec — « Quebec St. » (nom de rue à Denver) matchait \bquebec\b — le statut stale vient de la dépublication NORMALE de l'unique offre du tenant (Psychiatric Clinician, id 4704220005, 404 live, retirée à 16:08 miss_count=2 → active=0), mais cette offre n'aurait JAMAIS dû être publiée : son lieu réel est « 3401 Quebec St. Suite 8000, Denver, CO, 80207 » (bureau de SOL Mental Health sur Quebec Street à Denver), classé ville=Québec/Capitale-Nationale et géocodé à Québec parce que _QC_MARKERS (\bquebec\b) est évalué avant le rejet _NON_QC_REGION_RE (« , CO ») dans is_quebec_location. La médiane historique 1.0 est donc elle-même un artefact : le bon volume QC de ce tenant est 0 (vérifié live : API Greenhouse 200, 65 offres, toutes aux États-Unis — NY/VA/MD/CO/DC). Correctif : nouveau _QUEBEC_STREET_RE — « quebec » suivi d'un type de voie anglophone (st/street/ave/blvd/rd/dr/ct/ln/way/pl/hwy/pkwy…) = nom de rue, neutralisé avant tout matching dans is_quebec_location ET parse_location ; le garde (?!-) préserve les abréviations de saints des libellés QC légitimes vérifiés en base (« CAN Quebec St-Hubert/St-Laurent/St-Hyacinthe/Ste-Thérèse », agropur). Tests unitaires ajoutés (4 rues US rejetées, libellés agropur et QC classiques conservés). Correction au passage du même artefact sources.json que samsara/delos_data/findevcanada/dupont : url vide → https://www.solmentalhealth.com (la fiche affichait « Site : []() »). Sync isolé rejoué post-patch : found=0 en 0,2 s, ok — 0 est le volume légitime, l'offre Denver ne reviendra plus même si republiée. 104 tests pytest verts. pm2 restart job-ka-sync OK, site 200.
      Simon-Pierre Boucher · 1 file +1 −1
  6. Sun, Sep 13, 2026 1

    1. Simon-Pierre Boucher · 1 file +1 −1
  7. Sat, Sep 12, 2026 2

  8. Fri, Sep 11, 2026 2

    1. [ka6] fix connecteur findevcanada: volume 0 légitime confirmé en direct — l'employeur a dépublié ses 2 dernières parutions QC le 2026-09-11 (Principal, Financial Institutions FR+EN du 09-03 et Principal, Business Integrity Officer FR+EN du 09-04 : /j/<code> → /oops, tenant-scoped → ?not_found=true, API détail 404) entre 11h31 et 12h41 EDT. Le tenant Workable findevcanada reste le système ACTUEL et vivant (widget v1 200 {name: FinDev Canada, jobs: []} ; API v3 de la SPA total=0 — concordance parfaite) : la migration est dans l'AUTRE sens que ce que suggère la page carrières findevcanada.ca, dont le lien « View our job openings » → edc.taleo.net/careersection/findevcanada_corporate est un VESTIGE pré-migration (instantané Wayback 2026-05-30 : seul le lien Taleo existait, les boutons Workable ont été ajoutés depuis ; la zone edc.taleo.net entière renvoie 503 Zone Maintenance Oracle, et EDC société mère publie elle-même sur apply.workable.com/export-development-canada — 57 lignes vérifiées, aucun poste FinDev). Aucune offre FinDev courante ailleurs (LinkedIn : mêmes parutions désormais fermées ; ecoworks : offre de juillet périmée, Toronto). Employeur ~150 personnes, médiane 4 (2 parutions × 2 langues) : zéro ouverture ponctuelle est normal. Le connecteur est INTACT et fonctionnel — aucune modification du code (plateforme workable et tenant corrects). Correction au passage d'un artefact de génération dans data/sources.json : url vide → https://www.findevcanada.ca (la fiche affichait « Site : []() »). Sync isolé rejoué : found=0 en 0,1 s, statut ok. 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 +1 −1
    2. [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 +2 −12
  9. Mon, Aug 31, 2026 1

  10. Thu, Aug 27, 2026 2

  11. Tue, Aug 25, 2026 3

    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 file +606 −3
    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 · 2 files +13,066 −12,256
    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 · 2 files +685
  12. 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 · 3 files +16,492 −2
  13. 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 · 2 files +5,791 −3,088
  14. Wed, Aug 19, 2026 2

  15. Tue, Aug 18, 2026 3

    1. 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 · 1 file +27 −1
    2. 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>
      Simon-Pierre Boucher · 1 file +368
    3. 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>
      Simon-Pierre Boucher · 3 files +1,957 −1
  16. Mon, Aug 17, 2026 2

    1. 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>
      Simon-Pierre Boucher · 4 files +1,794 −5
    2. 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 · 1 file +60
Menu

Theme