SPB Git

spb/job-ka

Public
page 1
  1. Wed, Sep 30, 2026 1

    1. [ka6] fix connecteur xtltransportlogistics: compte JazzHR désactivé chez l'ATS (verdict site_source_mort, 1re intervention sur cette source) — le connecteur est INTACT et détecte correctement la condition (marqueur « Inactive Career Page » ajouté en adb8637, cas derumarketcatering) : RuntimeError explicite à chaque sync, sync_log propre. Chronologie précise (sync_log) : dernier sync OK 2026-09-29 17:12 EDT avec found=36 (médiane 36.0), puis « Inactive Career Page » à 21:20 — TOUT le tenant xtltransportlogistics.applytojob.com est fermé (page liste /apply/, iframe /apply/jobs/ ET pages détail des offres en base → 200 « Inactive Career Page », vérifié live le 2026-09-30). L'employeur XTL Transport reste bien VIVANT et recrute (offres LinkedIn/Indeed postées APRÈS la fermeture, directement sur les agrégateurs, sans URL de candidature vers un ATS) mais AUCUNE migration d'ATS détectable : les pages carrières officielles xtl.com FR/EN embarquent toujours l'iframe JazzHR mort, aucun compte JazzHR renommé (xtl/xtltransport/xtlgroup/xtltransportinc inexistants), balayage Serper Workday/Dayforce/UKG/BambooHR/Lever/Greenhouse/SmartRecruiters/Workable/Recruitee/Zoho/Teamtailor → néant ; la page « conduisez-avec-xtl » n'offre qu'un formulaire Gravity Forms. Décision : connecteur CONSERVÉ (fermeture vieille de 30 h — possible incident de facturation ou migration en cours ; précédent derumarketcatering 6744631 : retrait seulement après confirmation sur plusieurs semaines ET faux positif d'employeur, ce qui n'est pas le cas ici). Si le tenant revient, le sync repart seul ; si XTL réapparaît sur un autre ATS, repointer ORG. Les 36 offres actives en base (liens désormais morts) s'archiveront d'elles-mêmes via expire_stale (7 j sans last_seen, vers le 2026-10-06) — mécanisme du repo, aucune purge manuelle. Couverture de repli partielle : XTL publie sur Guichet-Emplois (offres QC vues, ex. Bromont), déjà agrégé par job-ka. Au passage, artefacts vague E corrigés dans sources.json (pattern cliniqued 51913fe) : url employeur vide → https://www.xtl.com (vérifié 200) et sectors [] → [Transport, Logistique] (vocabulaire établi : 32 et 41 sources) — éditions ciblées, format multiligne préservé, JSON valide. Docstring xtltransportlogistics.py enrichie (chronologie + re-vérifs + décision). Sync isolé rejoué : échec explicite attendu « compte JazzHR désactivé », comportement conçu ; non-régression plateforme jazzhr sur tenant vivant motosillimitees : found=2, ok=1. Fiches docs/connecteurs/ xtltransportlogistics.md + ats-jazzhr.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 5 files +190 −152
  2. Tue, Sep 29, 2026 4

    1. [ka6] fix connecteur produits_kruger: faux positif de supervision « volume QC nul » (25e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT. Le stale de 4,5 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-09-29 13:24) : l'unique offre QC en base (rid 2722 « Transportation Coordinator (18-month contract) » Gatineau, parue 2026-08-04) a été dépubliée par Kruger Products entre 13:24 et 15:34 (removed=1 à 17:45). sync_log VERT en continu (ok=1, 391 syncs, 0 erreur). Re-vérification live du flux RSS tre.tbe.taleo.net org=KRUGER2 cws=78 : 200, 23 offres, publication active, mais TOUTES hors Québec (Memphis TN, Mississauga/Whitby/Trenton ON, New Westminster BC) — vérifié offre par offre via og:title des pages détail. Nouveau marqueur Taleo TBE documenté : requisition.jsp répond désormais 302 → /ats/careers/v2/viewRequisition pour TOUTES les offres ; vivante = JSON-LD JobPosting présent sur la page v2, dépubliée = ni JSON-LD ni og:title + « no longer available » (requests suit la redirection, _fetch_detail inchangé). Aucune migration d'ATS : krugerproducts.ca/careers référence toujours KRUGER2 cws=78. Aucun angle mort : le connecteur frère kruger (babillard corporatif, même tenant) est VERT avec 53 offres QC actives (Trois-Rivières, Montréal…). sources.json déjà propre (aucun artefact vague C). Tant que Kruger Products ne publie rien au Québec sur la section cws=78, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / gearboxquebec 0373c30 / samsara 76fd913 / novistofr 894e9d / quenchwater f1b4e0a / tsys ad3ad36). Docstring produits_kruger.py enrichie (re-vérif 2026-09-29 + chronologie + marqueur TBE). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,2 s. Fiches docs/connecteurs/ produits_kruger.md + ats-taleo_tbe.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 4 files +223 −222
    2. [ka6] fix connecteur tsys: faux positif de supervision « volume QC nul » (24e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT : les 6 offres Canada du board ont été dépubliées EN BLOC par l'employeur le matin même (found 6 → 5 à 09:04 → 0 à 11:21, removed=5 à 13:35), sync_log VERT en continu (ok=1). Détail cxs des offres retirées (R0071963 Montréal, R0075053 Toronto…) = 403 S22 (marqueur Workday documenté : dépublié), page publique 200 (shell SPA). Re-vérification live du board /wday/cxs/tsys/TSYS/jobs : 200, 214 offres mondiales, publication active (« Posted Today »), mais la facette locations ne contient PLUS AUCUNE ville canadienne et searchText=Montreal → 0. Cause vraisemblable documentée : restructuration Global Payments 2025-2026 (TSYS/Issuer Solutions vendu à FIS, Worldpay acquis) — vérifié live : www.tsys.com redirige vers fisglobal.com/products/total-issuing, tsys.com/careers = 404 pointant careers.fisglobal.com, le board tsys.wd1 s'intitule désormais « Global Payments & Our Family of Brands », et la façade jobs.globalpayments.com agrège tsys.wd1/TSYS + worldpay.wd5/Worldpay_External_Careers_Site. Angles morts sondés : aucun autre site sur le tenant tsys (S21 partout), Montreal → 0 aussi sur worldpay.wd5 et fis.wd5/SearchJobs → couverture intacte au 2026-09-29 ; si les offres QC réapparaissent chez FIS/Worldpay, créer un connecteur frère plutôt que modifier celui-ci. Tant que Global Payments ne publie rien au Québec sur ce board, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / gearboxquebec 0373c30 / samsara 76fd913 / novistofr 894eb9d / quenchwater f1b4e0a). Au passage, artefacts vague C corrigés (pattern rbc c095c66) : EMPLOYER 'Tsys' → 'TSYS' (tsys.py) et name 'Tsys' → 'TSYS' + url employeur vide → https://www.tsys.com (vérifié 200 via Scrapfly, redirige vers FIS) dans sources.json — éditions ciblées, format préservé. Docstring tsys.py enrichie (re-vérif 2026-09-29 + chronologie + contexte corporatif). Sync isolé rejoué ×2 : found=0 stable, ok=1, 12,6-14,8 s. Fiches docs/connecteurs/ tsys.md + ats-workday.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). 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 · 5 files +346 −341
    3. [ka6] fix connecteur quenchwater: faux positif de supervision « volume QC nul » (23e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5). Le stale de 5,0 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-09-29 08:55) : l'unique offre QC en base (1ba16442 « Field Service Technician » Montréal, parue 2026-08-17) a été dépubliée par Quench entre 08:55 et 11:11 — détail 404 sur la page publique ET sur l'API v0 (nouveau marqueur documenté : Lever détail dépublié = 404, board 200). Le sync_log local est VERT en continu (ok=1, 313/313 syncs). Re-vérification live de l'API api.lever.co/v0/postings/quenchwater : 200, 64 offres, publication ACTIVE (dernières le 2026-09-28), couvre le Canada (Woodbridge/Toronto ON, Vancouver BC) mais zéro Québec. Aucune migration d'ATS : quenchwater.com (redirige vers quench.culligan.com) → page carrières Duda quenchwater--careers.multiscreensite.com, le board Lever reste la source des offres. Tant que Quench ne publie rien au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / gearboxquebec 0373c30 / samsara 76fd913 / novistofr 894eb9d). Au passage, artefact vague C dans sources.json comblé (pattern geox/gearboxquebec) : url employeur vide → https://quenchwater.com (vérifié 200) — édition ciblée 1 ligne, format préservé. Docstring quenchwater.py enrichie (re-vérif 2026-09-29 + chronologie). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,9 s. Fiches docs/connecteurs/ quenchwater.md + ats-lever.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 5 files +283 −286
    4. [ka6] fix connecteur novistofr: faux positif de supervision « volume QC nul » (22e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5). Le stale de 4,9 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-09-28 19:04) : l'unique offre QC en base (4649647005 « Enterprise Account Executive - Montreal » Montréal, parue 2026-01-19) a été dépubliée par Novisto entre 19:04 et 21:12 — API détail 404, page 302 → /novistofr?error=true (marqueurs Greenhouse documentés, confirmés gearboxquebec 0373c30 / samsara 76fd913). Le sync_log local est VERT en continu (ok=1, aucune erreur). Re-vérification live de l'API boards-api.greenhouse.io/v1/boards/novistofr/jobs : 200 mais board VIDE (0 offre toutes régions). Particularité inédite documentée : « novistofr » est le board MIROIR FRANCOPHONE de « novisto78 » (ids Greenhouse appariés : 4649647005 FR vs 4649646005 EN, même titre) — Novisto a vidé le miroir FR et republié l'offre uniquement sur le board principal (4738750005, vivante), déjà captée par le connecteur frère novisto78 (VERT, found=6, 6 offres QC Montréal actives en base) → AUCUN angle mort, la couverture QC de Novisto est intacte. Aucune migration d'ATS : la page carrières officielle novisto.com/company/careers/job-openings (200) intègre l'embed Greenhouse du board novisto78 uniquement ; novistofr n'est plus référencé nulle part. Tant que le board FR reste vide, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / gearboxquebec 0373c30 / samsara 76fd913). Au passage, artefact vague C dans sources.json comblé (pattern geox/gearboxquebec) : url employeur vide → https://novisto.com (vérifié 200) — édition ciblée 1 ligne, format préservé. Docstring novistofr.py enrichie (re-vérif 2026-09-29 + chronologie + particularité board miroir). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,1 s. Fiches docs/connecteurs/ novistofr.md + ats-greenhouse.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 5 files +254 −263
  3. Mon, Sep 28, 2026 3

    1. [ka6] fix connecteur samsara: faux positif de supervision « volume QC nul » (21e cas du pattern, 3e passage sur cette source après 2026-08-29 et 2026-09-13) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5). Le stale de 4,6 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-09-28 13:20) : l'unique offre QC en base (7926750 « Mid-Market Account Executive - French Fluent » Montréal, parue 2026-05-14) a été dépubliée par Samsara entre 13:20 et 15:33 — API détail 404, page 302 → /samsara?error=true (marqueur Greenhouse documenté, confirmé gearboxquebec 0373c30). Particularité inédite documentée : c'est la MÊME offre 7926750 déjà dépubliée les 2026-08-29 et 2026-09-13 puis REPUBLIÉE sous le même id — Samsara la fait tourner en cycle dépublication/republication, donc ce connecteur re-signalera périodiquement des stales dans les deux sens (structurel, pas une panne ; même classe que geox f785ff4 / gearboxquebec 0373c30, avec en plus la republication réversible). Le sync_log local est VERT en continu (ok=1, aucune erreur, 340+ syncs). Re-vérification live de l'API boards-api.greenhouse.io/v1/boards/samsara/jobs : 200, 237 offres mondiales, zéro QC (les 21 « Remote - Canada » sans province sont exclues par design). Aucune migration d'ATS : la page carrières officielle samsara.com/company/careers/roles (200) référence toujours gh_board=samsara. Aucun artefact sources.json restant (déjà comblé au passage du 2026-09-13). Docstring samsara.py enrichie (re-vérif 2026-09-28 + chronologie du cycle 7926750). Sync isolé rejoué ×2 : found=0 stable, ok=1, 1,3-3,3 s. Fiches docs/connecteurs/ samsara.md + ats-greenhouse.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 4 files +87 −96
    2. [ka6] fix connecteur gearboxquebec: faux positif de supervision « volume QC nul » (20e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5). Le stale de 5,1 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-09-28 12:48) : l'unique offre QC en base (7807902003 « Directeur·rice du design / Design Director » Montréal, parue 2026-07-17) a été dépubliée par Gearbox entre 12:48 et 15:01 — page détail Greenhouse HTTP 302 → ?error=true (nouveau marqueur documenté : Greenhouse détail dépublié = 302 vers le board avec error=true). Le sync_log local est VERT en continu (ok=1, aucune erreur, 354+ syncs). Re-vérification live de l'API boards-api.greenhouse.io/v1/boards/gearboxquebec/jobs : 200, {"jobs":[],"meta":{"total":0}} — board vivant mais VIDE, zéro offre toutes régions. Aucune migration d'ATS : la page carrières officielle (gearboxquebec.com → 2k.com/fr-CA/studios/gearbox/careers/#quebec, Gearbox appartient à Take-Two/2K) pointe toujours vers greenhouse.io/gearboxquebec ; le board frère « gearbox » (siège) n'a qu'1 offre, Frisco Texas, zéro Québec — aucun angle mort. Tant que Gearbox Québec ne publie rien, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / lifestance a4e473a). Au passage, artefact vague C dans sources.json comblé (pattern geox/lifestance) : url employeur vide → https://www.gearboxquebec.com (vérifié 200, redirige vers la page studio 2K) — édition ciblée 1 ligne, format préservé. Docstring gearboxquebec.py enrichie (re-vérif 2026-09-28 + chronologie). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,1-0,9 s. Fiches docs/connecteurs/ gearboxquebec.md + ats-greenhouse.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 5 files +409 −422
    3. [ka6] fix connecteur rbc: angle mort réel « poste multi-lieux » derrière un stale volume-QC-nul (1re intervention) — contrairement aux 19 faux positifs précédents, il y avait une VRAIE offre QC manquée. Contexte : site early talent Workday rbc.wd3/RBCEARLYTALENT1 (stages/co-op, médiane QC 0.5), l'unique offre QC en base (« 2027 Capital Markets, Global Markets Program Summer Analyst » R-0000180191, Montréal) dépubliée par RBC dans la nuit → found=0 ×2, sync_log VERT en continu (ok=1, 233+ syncs). Re-vérification live du board : 200 JSON, 46 postes (Toronto/USA/Malaisie), searchText=Quebec → 1 poste VIVANT : « 2027 Winter Change Management Intern (4 months) » R-0000186549, lieu principal MONTRÉAL Quebec + secondaire Toronto, publié 2026-09-10 — mais sa ligne de liste affiche locationsText=« 2 Locations » sans nommer les villes, que le filtre client is_quebec_location rejetait ; et ce tenant n'expose AUCUNE facette de province (State_Province sans Quebec ni Ontario) donc pas de filtre serveur possible. FIX dans workday.py (_keep) : repli sur le slug de lieu de l'externalPath (…/job/MONTRAL-Quebec-Canada/…, porte le lieu PRINCIPAL) quand le libellé est vide ou « N Locations » — zéro requête additionnelle, ne touche que les tenants filtrés client ; limite assumée documentée : un poste dont seul un lieu SECONDAIRE est QC reste manqué. La page détail remplace déjà « 2 Locations » par le vrai lieu (mécanique existante) → l'offre entre en base avec city=Montréal. Au passage, artefacts vague C corrigés (pattern ci/geox) : EMPLOYER 'Rbc' → 'RBC' (rbc.py, docstring re-vérif 2026-09-28 + chronologie), name 'Rbc' → 'RBC' et url vide → https://www.rbc.com (vérifié 200) dans sources.json — éditions ciblées, format préservé. Sync isolé rejoué : found=1 (added=1 puis stable ×2), ok=1, ~14 s ; non-régression Workday : cibc found=69 ≈ médiane 73. Fiches docs/connecteurs/ rbc.md + ats-workday.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). 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 · 6 files +355 −318
  4. Sun, Sep 27, 2026 1

    1. [ka6] fix connecteur geox: faux positif de supervision « volume QC nul » (19e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5). Le stale de 5,7 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-09-27 08:16) : l'unique offre QC en base (rkgocT7cPQ « Associé(e) à la vente – temps partiel » Pointe-Claire) a été dépubliée par GEOX dans la matinée — page détail HTTP 410 Gone (nouveau marqueur documenté : JazzHR détail dépublié = 410). Le sync_log local est VERT en continu (ok=1, aucune erreur, 250+ syncs) ; le garde-fou anti-faux-zéro de jazzhr.py (marqueur resumator) écarte l'hypothèse d'une page challenge. Re-vérification live du board geox.applytojob.com/apply/ : 200, marqueur resumator présent, 2 offres publiées, TOUTES deux en Ontario (Store Manager Heartland Town Centre Mississauga, Part-Time Sales Associate Mapleview Mall Burlington), zéro Québec — aucune migration d'ATS, compte JazzHR actif. Tant que GEOX ne publie rien au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que lifestance a4e473a). Au passage, artefacts vague E dans sources.json comblés (pattern lifestance/cibc) : url employeur vide → https://www.geox.com (vérifié 200) et sectors vide → « Commerce de détail » — édition ciblée, format préservé. Docstring geox.py enrichie (re-vérif 2026-09-27 + chronologie). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,1-0,2 s. Fiches docs/connecteurs/ geox.md + ats-jazzhr.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). 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 · 5 files +97 −76
  5. Sat, Sep 26, 2026 9

    1. [ka6] fix connecteur lifestance: faux positif de supervision « volume QC nul » récidivant (2e passage après 25262c1 du 2026-08-27) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane 0.0). Le stale de 745.8 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-08-26, avant la purge des 6 faux positifs d'homonymie Kirkland WA) : le sync_log local est VERT en continu (ok=1 found=0 toutes les ~2 h, 239+ syncs), un seul échec transitoire à 20:41 ce soir (« Expecting value: line 1 column 1 » = réponse Lever non-JSON, non reproduite). Re-vérification live de l'API Lever api.lever.co/v0/postings/lifestance : 200 JSON, 1398 postings, TOUS aux États-Unis (top lieux Philadelphia/Naperville/Haverford…, toujours 6 à Kirkland WA rejetés par is_quebec_location), zéro Canada/Québec — aucune migration d'ATS (jobs.lever.co/lifestance 200). Tant que LifeStance ne publie rien au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne. Au passage, artefacts vague C dans sources.json comblés (pattern epwealth/cibc) : url employeur vide → https://lifestance.com (vérifié 200) et region « Kirkland » ambiguë → « Kirkland WA » — édition ciblée 2 lignes, format préservé. Docstring lifestance.py enrichie (re-vérif 2026-09-26 + chronologie). Sync isolé rejoué ×2 : found=0 stable, ok=1, 1,5-4,2 s. Fiches docs/connecteurs/ lifestance.md + ats-lever.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 5 files +117 −102
    2. [ka6] fix connecteur cibc: faux positif de supervision, variante « cycle interrompu » (4e cas après childrensplace 5ed90ff, churchdwight 43ac4f4 et ci 14dfdf4) — le connecteur est SAIN (71 offres QC live ≈ médiane 73.25), rien à corriger dans le code. Le statut stale vient de la nuit : dernier succès 00:29 (found=71), échec unique à 03:14 (« Workday non-JSON après 3 essais, HTTP 200 text/html » = fenêtre de maintenance nocturne ~03 h EDT déjà documentée, non reproduite au matin), puis cycles de sync interrompus par des restarts pm2 d'autres missions (KeyboardInterrupt à 05:21, 05:37, 05:55, 06:34, 06:52, 07:06 et 07:26 au log — même paquet de stales dans la plage alphabétique c–f), si bien que le scan de supervision n'a vu aucun succès entre 00:29 et son passage ; dès la reprise du cycle, syncs de 06:10 (found=71, updated=71), 06:49 et 07:21 (found=71) ok=1. Re-vérification live du board Workday cibc.wd3/search : 200 JSON, cxs searchText=Quebec → 106 correspondances (filtre QC client is_quebec_location fait le tri → 71). Contrairement à childrensplace/ci, PAS d'artefact vague C : EMPLOYER='Banque CIBC' et name déjà corrects (connecteur vague initiale 4657429) ; seule l'url employeur était vide dans sources.json → comblée (https://www.cibc.com, vérifié 200) — édition ciblée 1 ligne, format préservé. Docstring cibc.py enrichie (re-vérif 2026-09-26 + chronologie). Sync isolé rejoué ×2 : found=71 stable, ok=1, 6,6-7,1 s. Fiches docs/connecteurs/ cibc.md + ats-workday.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 5 files +85 −78
    3. [ka6] fix connecteur ci: faux positif de supervision, variante « cycle interrompu » (3e cas après childrensplace 5ed90ff et churchdwight 43ac4f4) + correction de l'artefact vague C EMPLOYER=titre de poste — le connecteur est SAIN (3 offres QC live = médiane exacte 3.0). Le statut stale vient de la nuit : dernier succès 00:29 (found=3), échec unique à 03:13 (« Workday non-JSON après 3 essais, HTTP 200 text/html » = fenêtre de maintenance nocturne ~03 h EDT déjà documentée, non reproduite au matin), puis cycles de sync interrompus par des restarts pm2 d'autres missions (KeyboardInterrupt à 05:21, 05:37, 05:55, 06:34, 06:52 et 07:06 au log — même paquet de stales dans la plage alphabétique c–f), si bien que le scan de supervision n'a vu aucun succès entre 00:29 et son passage ; dès la reprise du cycle, syncs de 06:09 (found=3, updated=2), 06:49 et 07:21 (found=3) ok=1. Re-vérification live du board Workday ci.wd3/CI_FINANCIAL_EXTERNAL_CAREER-SITE : 200 JSON, searchText=Quebec → total=3 (Adjoint(e) aux ventes Montréal, Associé(e) au service Dorval, Vice-président régional Conseils en gestion de patrimoine Montréal) = médiane historique 3.0 — aucune migration d'ATS, aucun angle mort. CORRECTION RÉELLE au passage : artefact du générateur vague C (c45c753) — EMPLOYER/'name' était le TITRE DE POSTE « Associé(e) au service » au lieu de l'employeur CI Financial (même classe que childrensplace 5ed90ff), url vide et secteurs erronés (« Services, Commerce de détail » inférés du titre) dans sources.json ; les 3 offres publiques affichaient « Postuler chez Associé(e) au service ». Fix : EMPLOYER='CI Financial' dans ci.py (docstring re-vérif enrichie), name + url (https://www.cifinancial.com, vérifié 200 direct, titre « CI Financial ») + sectors=['Finance'] (cohérent avec cibc/sunlife/fieracapital) dans sources.json — édition ciblée, format du fichier préservé. Sync isolé rejoué ×2 : found=3 stable (updated=3 puis 0), ok=1, 2,2-2,3 s, les 3 offres actives en base portent maintenant l'employeur correct. Fiches docs/connecteurs/ ci.md + ats-workday.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 5 files +95 −92
    4. [ka6] fix connecteur churchdwight: faux positif de supervision, variante « cycle interrompu » (2e cas après childrensplace 5ed90ff) — le connecteur est SAIN (5 offres QC live = médiane exacte), rien à corriger dans le code ni sources.json. Le statut stale vient de la nuit : dernier succès 00:29 (found=5), échec unique à 03:12 (« Workday non-JSON après 3 essais, HTTP 200 text/html » = fenêtre de maintenance nocturne ~03 h EDT déjà documentée, non reproduite au matin), puis cycles de sync interrompus par des restarts pm2 d'autres missions (KeyboardInterrupt à 05:21, 05:37, 05:55, 06:34 et 06:52 au log — d'où le paquet de stales dans la même plage alphabétique c–f : ci, cibc, cineplex, circlek, conagrabrands, danaher…), si bien que le scan de supervision n'a vu aucun succès entre 00:29 et son passage ; dès la reprise du cycle, syncs de 06:09 (found=5, updated=2) et 06:49 (found=5) ok=1. Re-vérification live du board Workday churchdwight.wd1/chdcanadacareers : 200 JSON, 13 offres au total dont exactement 5 à Montréal QC (Superviseur Validation Qualité, Spécialiste Systèmes de la Qualité, Spécialiste Gestion d'inventaire, Chimiste-Analyste réviseur des données, Monteur-ajusteur) = médiane historique 5.0 — aucune migration d'ATS, aucun angle mort ; contrairement à childrensplace, PAS d'artefact vague C : EMPLOYER='Church & Dwight Canada' et sources.json (name/url https://churchdwight.ca) déjà corrects (connecteur vague 5a66f48). Seule la docstring est enrichie (re-vérif 2026-09-26 + chronologie documentée). Sync isolé rejoué ×2 : found=5 stable, ok=1, 1,9 s. Fiches docs/connecteurs/ churchdwight.md + ats-workday.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). 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 · 4 files +72 −67
    5. [ka6] fix connecteur childrensplace: faux positif de supervision (le connecteur est sain — 27 offres QC live = médiane) + correction de l'artefact vague C EMPLOYER=titre de poste — le statut stale vient de la nuit : échec unique à 03:11 (« Workday non-JSON après 3 essais, HTTP 200 text/html » = fenêtre de maintenance nocturne ~03 h EDT déjà documentée, non reproduite au matin) suivi de cycles de sync interrompus par des restarts pm2 d'autres missions (KeyboardInterrupt à 05:55 et 06:34 dans guichet_emplois visibles au log), si bien que le scan de supervision n'a vu aucun succès entre 00:28 et son passage ; dès la reprise du cycle, syncs de 06:08 et 06:49 ok=1 found=27. Re-vérification live du board Workday childrensplace.wd1/TCP05 : 200 JSON, 171 offres au total, searchText=Quebec → total=27 = exactement la médiane historique (Place Laurier, Galeries de la Capitale, Place Versailles…) — aucune migration d'ATS, aucun angle mort. CORRECTION RÉELLE au passage : artefact du générateur vague C (c45c753) — EMPLOYER/'name' était le TITRE DE POSTE « Associé des ventes » au lieu du nom de l'employeur (même classe que x49_solutions_1 99dccba et le piège Recruitee documenté), et url vide dans sources.json ; les 27 offres publiques affichaient « Postuler chez Associé des ventes ». Fix : EMPLOYER="The Children's Place" dans childrensplace.py (docstring re-vérif enrichie), name+url (https://www.childrensplace.com, vérifié via Scrapfly asp : 200, titre « The Children's Place Canada », le direct rend 403 anti-bot retail) dans sources.json — édition ciblée 3 lignes, format du fichier préservé. Sync isolé rejoué ×2 : found=27 stable (updated=27 puis 0), ok=1, 3,4-3,6 s, les 27 offres actives en base portent maintenant l'employeur correct. Fiches docs/connecteurs/ childrensplace.md + ats-workday.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). 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 · 5 files +129 −124
    6. [ka6] fix connecteur mackenzie: angle mort mono-portail iCIMS — le tenant publie sur DEUX portails par langue (careersfr-/careersen-mackenzieinvestments), le connecteur ne scannait que le FR, vide depuis cette nuit — fusion des deux portails, version FR prioritaire (pattern fnfmb) — le statut stale vient de la définition de succès de la supervision (syncs ok=1 found=0 après dépublication des 2 offres QC du portail FR, re-vérifiée live : détails 410 « L'emploi requis n'a pas été trouvé », liste FR = vraie page « aucun emploi trouvé », 200/22 Ko), MAIS contrairement aux 19 cas précédents du pattern ce n'était PAS un simple faux positif : la page carrières officielle EN (mackenzieinvestments.com/en/careers, 403 direct, lue via Scrapfly) pointe vers careersen-mackenzieinvestments.icims.com — portail jumeau JAMAIS scanné, 16 offres vivantes dont 1 QC (6009 « Summer Intern 2027 - Inside Sales - Montreal Office », JSON-LD Montreal,QC, parue 2026-09-10) invisible du connecteur mono-portail. La page FR officielle (/fr/careers) pointe toujours vers careersfr- : les deux portails sont légitimes et actuels, migration d'ATS exclue ; même espace d'IDs (5416-6020), chaque offre n'apparaît que sur le(s) portail(s) de publication — même classe d'angle mort que la partition par culture Dayforce (fnfmb 2026-08-31, challenger 28ff173). Fix minimal dans mackenzie.py : SUBS=(careersfr-, careersen-), fetch() itère les deux sous-domaines via super().fetch() et fusionne par external_id (setdefault, FR gagne) — icims.py intact, les 3 autres connecteurs iCIMS (capreit, mccarthy_tetrault, globalexcel, edf_renouvelables, omni_hotels_*) non touchés. Sync isolé rejoué ×2 : found=1 stable (added=1 puis 0), ok=1, 24,1 s puis 2,8 s (cache détail) — 1 > médiane 0.0, fiche complète (titre, Montréal, description, date_posted 2026-09-10), URL live 200. Fiches docs/connecteurs/ mackenzie.md + ats-icims.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). 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 · 4 files +93 −46
    7. [ka6] fix connecteur gilead: faux positif de supervision re-confirmé sous un angle NOUVEAU — le portail carrières officiel exclut migration d'ATS et angle mort (0 offre QC légitime, 19e cas du pattern) — le statut stale vient toujours de la définition de succès de la supervision : le board Workday gilead.wd1/gileadcareers n'a AUCUNE offre QC (516 offres live re-scannées ce jour, 0 occurrence de montréal/québec/laval/gatineau/sherbrooke/longueuil/trois-rivières, facette locations Canada = Edmonton 9 + Ontario 1 + Mississauga 4, searchText=Quebec → total=0, les 59 offres multi-lieux TOUTES re-inspectées une à une au détail cxs : aucune localisation canadienne, encore moins québécoise), donc les syncs horaires rendent ok=1 found=0 (médiane 0.0) comptés comme non-succès ; le seul échec réel (03:45 cette nuit, « Workday non-JSON après 3 essais, HTTP 200 text/html ») est la fenêtre de maintenance nocturne ~03 h EDT déjà documentée, non reproduite au matin. ANGLE NEUF (jamais couvert par l'intervention précédente 0760e1f qui re-vérifiait seulement l'API cxs) : inspection de la page carrières OFFICIELLE www.gilead.com/careers (200 direct, 116 Ko) → les seuls liens ATS pointent vers CE board Workday gilead.wd1.myworkdayjobs.com/gileadcareers — patterns challenger (migration JazzHR→Dayforce) et altusgroup (façade Phenom avec cache fantôme) EXCLUS ; sondage d'autres sites de publication du tenant (External, Ext, Careers, GileadExternal, Canada, GileadCanada, KiteCareers) → tous 404 (GileadCareers 200 = même site, casse insensible, même total 516), gileadcareers est l'unique portail externe (pas d'angle mort type autodesk « uni »). Le connecteur est INTACT : rien à corriger dans le code ni sources.json (propre depuis 0760e1f), seule la docstring est enrichie (re-vérif 2026-09-26 + angle portail officiel documenté). Fiches docs/connecteurs/ gilead.md + ats-workday.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é ×2 : found=0 en 38,3 s, ok=1 — 0 reste le volume légitime tant que Gilead Sciences (biopharma, sites canadiens à Edmonton et Mississauga) ne publie pas au Québec ; toute publication réelle apparaîtra dans le cxs et sera capturée (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.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 4 files +90 −76
    8. [ka6] fix connecteur coorstek: faux positif de supervision re-confirmé sous un angle NOUVEAU — le portail carrières officiel exclut migration d'ATS et angle mort (0 offre QC légitime, 18e cas du pattern) — le statut stale vient toujours de la définition de succès de la supervision : le board Workday coorstek.wd1/CoorsTekCareers n'a AUCUNE offre QC (100 offres live re-scannées ce jour, 0 occurrence de montréal/québec/laval/gatineau/sherbrooke/longueuil/trois-rivières, seule offre canadienne = Ottawa ON R-114322, les 4 offres multi-lieux R-114408/R-113714 (29 lieux)/R-113978/R-112832 re-inspectées au détail cxs : lieux tous US dont Virtual USA), donc les syncs horaires rendent ok=1 found=0 (médiane 0.0) comptés comme non-succès ; le seul échec réel (03:24 cette nuit, « Workday non-JSON après 3 essais, HTTP 200 text/html ») est la fenêtre de maintenance nocturne ~03 h EDT déjà documentée dans workday.py, non reproduite au matin. ANGLE NEUF (jamais couvert par les 2 interventions précédentes b7ebb74/2c4caea qui re-vérifiaient seulement l'API cxs) : inspection de la page carrières OFFICIELLE www.coorstek.com/en/careers (200 direct, 104 Ko) → un SEUL lien ATS, vers CE board Workday coorstek.wd1.myworkdayjobs.com/en-US/CoorsTekCareers — patterns challenger (migration JazzHR→Dayforce) et altusgroup (façade Phenom avec cache fantôme) EXCLUS ; sondage d'autres sites de publication du tenant (External, Ext, Careers, CoorsTek, CoorsTekCanada, Canada, CoorsTekExternal, CoorsTekCareersCanada) → tous 404, CoorsTekCareers est l'unique portail externe (pas d'angle mort type autodesk « uni »). Le connecteur est INTACT : rien à corriger dans le code ni sources.json (propre depuis 2c4caea), seule la docstring est enrichie (re-vérif 2026-09-26 + angle portail officiel documenté). Fiches docs/connecteurs/ coorstek.md + ats-workday.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é ×2 : found=0 en 6,3-6,6 s, ok=1 — 0 reste le volume légitime tant que CoorsTek (céramiques techniques, usines US/Europe/Asie) ne publie pas au Québec ; toute publication réelle apparaîtra dans le cxs et sera capturée (filtre client is_quebec_location + garde-fou _NON_QC_REGION_RE opérationnels). 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 · 4 files +75 −67
    9. [ka6] fix connecteur altusgroup: faux positif de supervision re-confirmé sous un angle NOUVEAU — le portail carrières officiel exclut migration d'ATS et angle mort (0 offre QC légitime, 17e cas du pattern) — le statut stale vient toujours de la définition de succès de la supervision : le board Workday altusgroup.wd3/AltusGroup n'a AUCUNE offre QC (44 offres live re-scannées ce jour, 0 occurrence de montréal/québec/laval/gatineau/sherbrooke, les 8 offres multi-lieux inspectées au détail cxs : 21+9+5+2×5 localisations toutes US/UK/Canada hors QC), donc les syncs horaires rendent ok=1 found=0 (médiane 0.0) comptés comme non-succès. ANGLE NEUF (jamais couvert par les 3 interventions précédentes f092997/09-18/09-19 qui re-vérifiaient seulement l'API cxs) : inspection de la page carrières OFFICIELLE www.altusgroup.com/careers → careers.altusgroup.com = façade Phenom People (tenant AGYAGUGLOBAL, CDN phenompeople.com) — pattern challenger/autodesk d'une migration d'ATS EXCLU car chaque applyUrl Phenom pointe vers CE board Workday (altusgroup.wd3.myworkdayjobs.com/AltusGroup/.../apply). Le portail Phenom affiche 53 offres dont UNE au Québec (« Cost Consultant/Conseiller(ère) en analyse de coûts », R0013818, Montréal, 60-75 k$, parue 2026-05-12) ABSENTE du board Workday : vérification décisive au détail cxs → 403 S22 « permission denied » (les deux variantes R0013818 et R0013818-1, avec et sans cookies de session fr-CA) = posting existant mais DÉPUBLIÉ du site externe, signature démontrée par triangulation (ID bidon → 404 S21 « not found », offre vivante témoin R0013639 → 200) et confirmée sur échantillon (R0013662, R0013813 aussi 403 = fantômes ; R0013890 présent au board → 200) : Phenom sert un CACHE jamais purgé (~31 offres périmées sur 53), le board Workday cxs est la source de vérité. Hypothèse « partition par locale » (pattern Dayforce) testée et écartée : pagination complète du board en session fr-CA = mêmes 44 offres, sans R0013818 ; la page publique 200 de l'offre est une coquille SPA vide (6 Ko, 0 JSON-LD) qui rendrait « not found » via le même cxs 403. Le connecteur est INTACT : rien à corriger dans le code (sources.json déjà propre depuis 09-18), seule la docstring est enrichie (re-vérif 2026-09-26 + signature 403 S22 documentée). Fiches docs/connecteurs/ altusgroup.md + ats-workday.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 4,0 s, ok=1 — 0 reste le volume légitime tant qu'Altus ne republie pas au Québec ; toute republication réelle apparaîtra dans le cxs et sera capturée (filtre client + facette serveur opérationnels). 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 · 4 files +408 −400
  6. 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 · 5 files +128 −149
    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 · 6 files +434 −400
    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 · 7 files +748 −443
    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 · 4 files +158 −147
  7. 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 · 5 files +81 −103
    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 · 5 files +214 −236
    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 · 5 files +287 −312
    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 · 5 files +279 −271
  8. 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 · 5 files +177 −171
    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 · 5 files +277 −298
  9. 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 · 5 files +392 −414
  10. 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 · 5 files +207 −227
    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 · 5 files +71 −57
    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 · 5 files +162 −184
    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 · 5 files +256 −256
  11. Sat, Sep 19, 2026 2

    1. [ka6] fix connecteur coorstek: faux positif de supervision récurrent (0 offre QC toujours légitime — les seules offres historiques étaient à East Granby, CONNECTICUT) + échec nocturne transitoire de maintenance Workday — aucun défaut du connecteur, correction d'artefacts sources.json (url vide, region « East Granby » = ville du Connecticut) et de l'employer en base — le statut stale vient de la définition de succès de la supervision : le tenant Workday coorstek.wd1 n'a AUCUNE offre QC depuis le retrait le 2026-08-27 des 2 faux positifs « Production Operator II » R-114260/R-114269 (East Granby CT mappé par homonymie sur Granby/Estrie, fix générique f4038e4), donc les syncs horaires rendent ok=1 found=0 (médiane 0.0) et sont comptés comme non-succès depuis 560 h — même profil que altusgroup f092997, quadreal ef41976, cpab e498c30, drop_genie 8a53793. Le seul échec réel (sync de 03:37 cette nuit : « Workday non-JSON après 3 essais, HTTP 200 text/html ») est la fenêtre de maintenance nocturne Workday ~03 h EDT documentée dans workday.py (retry+backoff déjà en place), non reproduite au matin. Le connecteur est INTACT et re-vérifié live sous l'angle multi-lieux (angle mort type quadreal) : 91 offres sur 5 pages, zéro occurrence de quebec/montréal/laval/gatineau/sherbrooke dans le JSON complet des listes, recherche serveur searchText Quebec/Montréal → total 0 (Canada → 1, Ottawa ON), et les 4 offres « N Locations » (jusqu'à 29 lieux, dont AI Deployment Engineer R-113714-1) vérifiées UNE À UNE au détail cxs : 38 localisations cumulées, toutes US (Golden CO, Oak Ridge TN, Houston TX…), aucune canadienne. Correction au passage de deux artefacts du générateur vague C dans data/sources.json : url vide → https://www.coorstek.com (vérifié 200, titre « CoorsTek | Global Leader in Engineered Technical Ceramics ») et region « East Granby » → «» (East Granby est au Connecticut — la source n'a jamais eu de localité QC légitime ; 29 sources ont déjà une region vide), avec UPDATE en base de l'employer « Production Operator II » → « CoorsTek » des 2 offres inactives (le générateur avait mis le titre du poste comme employeur ; unifié avec l'EMPLOYER du connecteur). Docstring du connecteur mise à jour (re-vérif 2026-09-19, multi-lieux couverts). Sync isolé rejoué : found=0 en 7,6 s, ok=1 — 0 reste le volume légitime tant que CoorsTek ne publie pas au Québec ; les offres reviendront d'elles-mêmes si publiées (filtre client is_quebec_location + repli facette serveur opérationnels, le garde-fou _NON_QC_REGION_RE continue d'exclure East Granby CT). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 2 files +8 −3
    2. [ka6] fix connecteur altusgroup: faux positif de supervision récurrent (0 offre QC toujours légitime) + échec nocturne transitoire de maintenance Workday — aucun défaut du connecteur, ajout du secteur manquant dans sources.json — le statut stale vient de la définition de succès de la supervision : le tenant Workday altusgroup.wd3 n'a AUCUNE offre QC depuis la dépublication fin août de l'unique offre montréalaise « Cost Consultant/Conseiller(ère) en analyse de coûts » R0013818 (active=0 depuis le 2026-08-26), donc les syncs horaires rendent ok=1 found=0 (médiane 0.0) et sont comptés comme non-succès depuis 565 h — même profil que quadreal ef41976, cpab e498c30, drop_genie 8a53793, et déjà diagnostiqué sur CE connecteur les 2026-08-26, 2026-09-12 et 2026-09-18. Le seul échec réel (sync de 02:43 cette nuit : « Workday non-JSON après 3 essais, HTTP 200 text/html ») est la fenêtre de maintenance nocturne Workday ~03 h EDT documentée dans workday.py (retry+backoff déjà en place), non reproduite au matin. Le connecteur est INTACT et re-vérifié live sous un angle NOUVEAU (l'angle mort multi-lieux type quadreal) : 42 offres sur 3 pages, zéro occurrence de quebec/montréal/laval/gatineau/sherbrooke/rougemont dans le JSON complet des listes, recherche serveur searchText Quebec/Montréal → total 0, et les 8 offres « N Locations » (jusqu'à 21 lieux) vérifiées UNE À UNE au détail cxs : 41 localisations cumulées, toutes US/UK (Texas, New York, Illinois, London, Manchester…), aucune canadienne hors Ontario/Alberta déjà exclues. Correction au passage du dernier artefact vague D dans data/sources.json : sectors [] → [Immobilier] (Altus Group = intelligence en immobilier commercial ; secteur déjà au vocabulaire, 29 sources ; la fiche affichait « Secteurs : n/d »). Docstring du connecteur mise à jour (re-vérif 2026-09-19, multi-lieux couverts). Sync isolé rejoué : found=0 en 3,9 s, ok=1 — 0 reste le volume légitime tant qu'Altus ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées (filtre client is_quebec_location + repli facette serveur opérationnels). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 2 files +6 −3
  12. Fri, Sep 18, 2026 4

    1. [ka6] fix connecteur quadreal: faux positif de supervision (0 offre QC légitime — QuadReal n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'artefacts sources.json (url vide, graphie « Quadreal », région) — le statut stale vient de la définition de succès de la supervision : le tenant Workday quadreal.wd10 n'a AUCUNE offre QC depuis la dépublication aujourd'hui (2026-09-18, dernier sync à 1 : 15:26) de l'unique offre montréalaise « Property Administrator/Administrateur immobilier » R0006871 (ajoutée lors de la mission du 2026-09-10, détail live 404, recherche par ID → 0, miss_count=2 → active=0 déjà appliqué), donc les syncs horaires rendent ok=1 found=0 (médiane 0.5) et sont comptés comme non-succès depuis 4,5 h. Le connecteur est INTACT et re-vérifié live sur les DEUX sites du tenant (balayage double instauré le 2026-09-10, commit précédent) : Parkbridge = 8 offres (facette provinces AB 3 / ON 3 / BC 2), QuadReal = 69 offres (ON 31 / BC 29 / AB 6 / NY 5 / CA 3) — zéro valeur Québec dans les facettes, zéro occurrence de quebec/montréal/laval/gatineau/magog dans le JSON des listes, et les 6 offres multi-lieux (« 2/3 Locations », angle mort potentiel du filtre client) vérifiées une à une au détail : toutes Vancouver/Calgary/Toronto. Même profil que cpab e498c30, drop_genie 8a53793, altusgroup 2fc9e63 : tenant à volume QC nul compté non-succès par la supervision. Correction au passage de trois artefacts du générateur vague C dans data/sources.json : nom « Quadreal » → « QuadReal (QuadReal Property Group) » (graphie officielle, titre du site « QuadReal Property Group | QuadReal »), url vide → https://quadreal.com (vérifié 200 ; la fiche affichait « Site : [Quadreal]() »), region « Magog » (lieu de la seule offre Parkbridge historique) → « Montréal, Magog » (les deux localités QC ayant eu des offres), avec UPDATE en base de la graphie employer « Quadreal » → « QuadReal » de l'offre inactive R0006877 (unifiée avec l'EMPLOYER du connecteur). Docstring du connecteur mise à jour (re-vérif 2026-09-18, 0 offre QC sur les deux sites). Sync isolé rejoué : found=0 en 5,0 s, ok=1 — 0 est le volume légitime tant que QuadReal ne republie pas au Québec ; les offres reviendront d'elles-mêmes si republiées (le double balayage couvre déjà tout le tenant). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 2 files +11 −5
    2. [ka6] fix connecteur cpab: faux positif de supervision (0 offre QC légitime — le CPAB n'a plus de poste au Québec) — aucun défaut du connecteur, correction d'artefacts sources.json (url vide, nom « Cpab », secteur « Conseil » erroné) — le statut stale vient de la définition de succès de la supervision : le tenant Dayforce cpab n'a AUCUNE offre QC depuis la dépublication aujourd'hui (2026-09-18, sync de 16:24) de son unique offre montréalaise « Adjoint, Affaires juridiques et conseil d'administration » 1159 (parue le 2026-05-27, absente du search live, miss_count=2 → active=0 déjà appliqué au sync de 18:18), donc les syncs horaires rendent ok=1 found=0 (médiane 0.5) et sont comptés comme non-succès depuis 5,1 h. Le connecteur est INTACT et re-vérifié live : le search Dayforce répond 200 en fr-CA/en-CA/en-US avec maxCount=1 — l'unique offre du board est « Directeur, Inspections (Vancouver) » 1173, Vancouver BC, correctement exclue par le filtre Québec (l'aveuglement fr-CA type g3canada/stateindustrial est exclu : le fr-CA sert bien le board, mêmes résultats que en-CA). Même profil que drop_genie 8a53793, altusgroup 2fc9e63, autotradercanada 77020a3 : tenant à volume QC nul compté non-succès par la supervision. Correction au passage de trois artefacts du générateur vague C dans data/sources.json : l'employeur est le Conseil canadien sur la reddition de comptes (CPAB/CCRC, régulateur de l'audit des sociétés ouvertes, bureaux Toronto/Montréal/Vancouver — l'offre « Directeur, Inspections » = inspections de cabinets comptables) — nom « Cpab » → « CPAB (Conseil canadien sur la reddition de comptes) », url vide → https://cpab-ccrc.ca (vérifié 200, version fr /fr, footer « Conseil Canadien Sur La Reddition De Comptes »), secteur « Conseil » (confusion du générateur avec le mot « Conseil » du nom) → « Comptabilité » (déjà au vocabulaire), avec UPDATE du champ employer de l'offre inactive 1159 en base et EMPLOYER du connecteur aligné. Docstring du connecteur mise à jour (1 offre live hors QC, re-vérif 2026-09-18). Sync isolé rejoué : found=0 en 3,9 s, ok=1 — 0 est le volume légitime tant que le CPAB 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.
      Simon-Pierre Boucher · 2 files +11 −7
    3. [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 · 2 files +6 −4
    4. [ka6] fix connecteur awc: ajout de Rougemont (Montérégie) au dictionnaire _QC_CITIES — le connecteur était aveugle aux offres du vignoble québécois d'Arterra — le statut broken combinait trois éléments : (1) une NameResolutionError DNS transitoire le 18/09 12:53 sur awc.wd3.myworkdayjobs.com (même vague que altusgroup/autotradercanada à 12:51, non reproduite), (2) la dépublication NORMALE de l'unique offre suivie « Représentant des ventes (SAQ/licenciés) Montréal/Brossard » R-13270 (absente du board live, miss_count=2 → active=0), qui a fait tomber found de 1 à 0, et (3) un VRAI défaut : le tenant Workday awc.wd3 n'expose qu'une facette de lieux plate au niveau ville, et sa seule localisation QC restante est « Rougemont » (Montérégie, vignoble d'Arterra) — absente du dictionnaire curé _QC_CITIES de normalize.py, donc invisible à la fois pour le filtre client is_quebec_location ET pour le repli facette-serveur de _find_qc_facet (qui agrège les valeurs de facette via la même fonction). Résultat : 2 offres QC réelles ignorées, dont « Électromécanicien - syndiqué (Qc) » R-13064 parue le 2026-08-19 (aveuglement d'un mois) et « Partenaire d'affaires en ressources humaines » R-13556 parue le 2026-09-10. Correction minimale dans normalize.py : entrée « rougemont » → « Rougemont » dans _QC_CITIES (regions-qc.json connaissait déjà rougemont → Montérégie ; le garde-fou _NON_QC_REGION_RE continue d'exclure « Rougemont, NC »). Bénéficie aussi au connecteur lassonde (Industries Lassonde, Rougemont). Sync isolé rejoué : found=2, added=2 en 4,6 s — R-13556 et R-13064 en base, actives, ville Rougemont, région Montérégie, volume 2 ≥ médiane 1.0. 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 −1
Menu

Theme