SPB Git

spb/job-ka

Public
page 1
  1. Tue, Oct 6, 2026 3

    1. Revert "[ka6] fix connecteur dentons_europe: faux positif « volume QC nul » (43e cas du pattern, 1re intervention) + RÉCUPÉRATION RÉELLE par portail frère inter-ATS — variante pwc 8d150eb sur un AUTRE ATS. Le connecteur dentons_europe (Workable, org dentons-europe) est SAIN : son unique offre QC (1454A1A702 « Global Value Pricing and Project Manager », Montréal, parue 2026-05-06) a été DÉPUBLIÉE entre 05:09 et 08:08 EDT (found 1 → 0, missed=1, puis removed=1 via le garde-fou 2-miss au sync rejoué), sync_log VERT en continu (ok=1). Marqueur Workable confirmé live : détail = 302 → /oops. Board re-vérifié : 200, 64 offres mondiales (Pologne/Italie/Tchéquie/Afrique), 0 lieu CA/QC (multi-lieux et 23 remote inspectés), recherche v3 Montreal/Quebec/Canada = 0 ; orgs frères Workable « dentons » et « dentons-global » = 200 mais 0 offre ; pas de migration (board vivant, c'est le portail EUROPE du cabinet). MAIS le vrai board des postes du bureau de Montréal est ailleurs : careers.dentons.com = SuccessFactors CSB (141 offres mondiales, sitemap urlset), 2 offres QC VIVANTES (paire FR/EN « Responsable, Comptes fournisseurs / Accounts Payable Lead », Montréal, multi-villes Ottawa/Toronto/Montréal) non couvertes par job-ka → NOUVEAU connecteur frère dentons (SuccessFactorsConnector, 4 lignes), volume employeur 0 → 2 (médiane historique 1.0). Ce tenant SF a exposé 3 angles morts GÉNÉRIQUES de la plateforme, corrigés dans successfactors.py : (1) description vide — le span itemprop=description enveloppe des span/p imbriqués et la capture non gourmande _ITEMPROP_RE s'arrêtait au premier </p> → extraction ÉQUILIBRÉE _balanced_itemprop (compte d'imbrication du même tag, ancien regex en repli) → descriptions 10 937/8 141 car.; (2) titre tronqué — slug terminé par la province abrégée seule (« …-Payable-Lead-Queb/ », marqueur Kiewit) alors que l'heuristique [:-3] suppose une queue -Prov-CP1-CP2 → le titre de la page détail (itemprop=title) fait désormais autorité; (3) offre multi-villes — meta addressLocality répétée (Ottawa/Toronto/Montreal, dernière gagnante) pouvait écraser la ville QC du slug par une ville hors QC → garde-fou is_quebec_location sur l'override. Bonus normalize.py : parse_date apprend le format java.util.Date.toString() (« Sun Oct 04 02:00:00 UTC 2026 », émis par les meta datePosted des sites SF CSB) qui rendait date_posted NULL — + test test_date_java_tostring. Artefact vague C comblé dans sources.json : url employeur vide → https://www.dentons.com (vérifié 200 via Scrapfly, « Dentons - Home », curl direct = 403 anti-bot) + entrée registre du nouveau connecteur dentons. Docstrings dentons_europe.py (chronologie) et dentons.py (généalogie du portail) écrites. Tests réels : sync dentons ×2 → found=2, ok=1, 2,9-3,0 s, fiches complètes (titres entiers, dates 2026-10-04, fr/en, GPS-ready) ; sync dentons_europe rejoué → found=0 stable, ok=1, 0,3 s (structurel tant que le board Europe ne republie pas de rôle Global à Montréal — même classe que strongtie a295929 / reworld c59448d) ; non-régression plateforme SF sur tenant vivant alstom : found=245 (médiane ~224), ok=1, 8,6 s. Fiches docs/connecteurs/ dentons.md (nouvelle) + dentons_europe.md + ats-successfactors.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). 107 tests pytest verts (106 + 1 nouveau). pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200."
      …
      This reverts commit 89aedd99e79c43621f55e258f9e2cb5f055e347b.
      Simon-Pierre Boucher · 11 files +212 −421
    2. [ka6] fix connecteur dentons_europe: faux positif « volume QC nul » (43e cas du pattern, 1re intervention) + RÉCUPÉRATION RÉELLE par portail frère inter-ATS — variante pwc 8d150eb sur un AUTRE ATS. Le connecteur dentons_europe (Workable, org dentons-europe) est SAIN : son unique offre QC (1454A1A702 « Global Value Pricing and Project Manager », Montréal, parue 2026-05-06) a été DÉPUBLIÉE entre 05:09 et 08:08 EDT (found 1 → 0, missed=1, puis removed=1 via le garde-fou 2-miss au sync rejoué), sync_log VERT en continu (ok=1). Marqueur Workable confirmé live : détail = 302 → /oops. Board re-vérifié : 200, 64 offres mondiales (Pologne/Italie/Tchéquie/Afrique), 0 lieu CA/QC (multi-lieux et 23 remote inspectés), recherche v3 Montreal/Quebec/Canada = 0 ; orgs frères Workable « dentons » et « dentons-global » = 200 mais 0 offre ; pas de migration (board vivant, c'est le portail EUROPE du cabinet). MAIS le vrai board des postes du bureau de Montréal est ailleurs : careers.dentons.com = SuccessFactors CSB (141 offres mondiales, sitemap urlset), 2 offres QC VIVANTES (paire FR/EN « Responsable, Comptes fournisseurs / Accounts Payable Lead », Montréal, multi-villes Ottawa/Toronto/Montréal) non couvertes par job-ka → NOUVEAU connecteur frère dentons (SuccessFactorsConnector, 4 lignes), volume employeur 0 → 2 (médiane historique 1.0). Ce tenant SF a exposé 3 angles morts GÉNÉRIQUES de la plateforme, corrigés dans successfactors.py : (1) description vide — le span itemprop=description enveloppe des span/p imbriqués et la capture non gourmande _ITEMPROP_RE s'arrêtait au premier </p> → extraction ÉQUILIBRÉE _balanced_itemprop (compte d'imbrication du même tag, ancien regex en repli) → descriptions 10 937/8 141 car.; (2) titre tronqué — slug terminé par la province abrégée seule (« …-Payable-Lead-Queb/ », marqueur Kiewit) alors que l'heuristique [:-3] suppose une queue -Prov-CP1-CP2 → le titre de la page détail (itemprop=title) fait désormais autorité; (3) offre multi-villes — meta addressLocality répétée (Ottawa/Toronto/Montreal, dernière gagnante) pouvait écraser la ville QC du slug par une ville hors QC → garde-fou is_quebec_location sur l'override. Bonus normalize.py : parse_date apprend le format java.util.Date.toString() (« Sun Oct 04 02:00:00 UTC 2026 », émis par les meta datePosted des sites SF CSB) qui rendait date_posted NULL — + test test_date_java_tostring. Artefact vague C comblé dans sources.json : url employeur vide → https://www.dentons.com (vérifié 200 via Scrapfly, « Dentons - Home », curl direct = 403 anti-bot) + entrée registre du nouveau connecteur dentons. Docstrings dentons_europe.py (chronologie) et dentons.py (généalogie du portail) écrites. Tests réels : sync dentons ×2 → found=2, ok=1, 2,9-3,0 s, fiches complètes (titres entiers, dates 2026-10-04, fr/en, GPS-ready) ; sync dentons_europe rejoué → found=0 stable, ok=1, 0,3 s (structurel tant que le board Europe ne republie pas de rôle Global à Montréal — même classe que strongtie a295929 / reworld c59448d) ; non-régression plateforme SF sur tenant vivant alstom : found=245 (médiane ~224), ok=1, 8,6 s. Fiches docs/connecteurs/ dentons.md (nouvelle) + dentons_europe.md + ats-successfactors.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). 107 tests pytest verts (106 + 1 nouveau). 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 · 11 files +421 −212
    3. [ka6] fix connecteur strongtie: faux positif de supervision « volume QC nul » (42e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 1.0, Simpson Strong-Tie siège Pleasanton CA, seul site québécois = le centre de distribution de Châteauguay qui publie 0-1 poste par vagues). Le stale de 4,1 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-05 21:48) : l'unique offre QC en base (R7985 « Warehouse Supervisor », Châteauguay, parue 2026-09-05) a été DÉPUBLIÉE par l'employeur entre 21:48 et 23:56 EDT (found 1 → 0, miss_count=1, puis removed=1 via le garde-fou 2-miss au sync rejoué). sync_log VERT en continu (ok=1). Marqueur Workday classique confirmé live : détail cxs R7985 = 403 S22 « permission denied ». Board re-vérifié live : 200, 102 offres mondiales vivantes, facette pays Canada = 2 (Pitt Meadows BC + Brampton ON), AUCUN lieu QC dans la facette locations ; les 2 offres canadiennes inspectées au détail cxs = mono-lieu BC/ON, additionalLocations vides (angle mort rbc c095c66 exclu) ; searchText Quebec/Québec/Chateauguay/Montreal = 0 partout (les 3 hits « Canada » restants = Ho Chi Minh City, correspondances texte). Aucun site frère sur le tenant : sondage de 8 noms de sites candidats → tous 404 (leçon pwc/silabs appliquée, External est le seul site). Aucune migration d'ATS : strongtie.com/about/jobs (200) référence toujours myworkdayjobs.com/External (même tenant wd1). Artefact vague D comblé dans sources.json : url employeur vide → https://www.strongtie.com (vérifié 200, « Simpson Strong-Tie – Structural Connectors, Fasteners & Hardware »), JSON valide. Tant que Châteauguay ne republie rien, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que reworld c59448d / peaktech 6a2cebc / mitacs a49f7a5 / zoetis 78938c3). Docstring strongtie.py enrichie (chronologie + nature du volume). Sync isolé rejoué ×2 : found=0 stable, ok=1, 7,0-7,2 s ; non-régression plateforme workday sur tenant vivant cineplex : found=1, ok=1, 2,5 s. Fiches docs/connecteurs/ strongtie.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 +354 −364
  2. Mon, Oct 5, 2026 7

    1. [ka6] fix connecteur reworld: faux positif de supervision « volume QC nul » (41e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5, Reworld ex-Covanta, valorisation énergétique des déchets, seul site québécois = l'usine de Chambly qui publie 0-1 poste par vagues). Le stale de 4,4 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-05 13:29) : l'unique offre QC en base (JR13561 « Waste Processing Tech II », Chambly, parue 2026-09-05) a été DÉPUBLIÉE par l'employeur entre 13:29 et 15:45 EDT (found 1 → 0, missed=1, puis removed=1 via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Marqueur Workday classique confirmé live : détail cxs JR13561 = 403 S22 « permission denied ». Board re-vérifié live : 200, 160 offres mondiales vivantes, facette pays Canada = 4 (Kitchener ON ×3 + ON Works from home ×1), AUCUN lieu QC dans la facette locations ; les 4 offres canadiennes inspectées au détail cxs = mono-lieu Ontario, additionalLocations vides (angle mort rbc c095c66 exclu) ; le hit searchText « Quebec » (1) = « AZ Driver - Regional » basé à Kitchener dont la description mentionne le Québec comme destination de ROUTE, pas comme lieu de poste. Aucun site frère sur le tenant : sondage de 9 noms de sites candidats → tous 404 (leçon pwc/silabs appliquée, External est le seul site). Aucune migration d'ATS : reworldwaste.com/careers (200) référence toujours myworkdayjobs.com/External (même tenant wd5). Artefact vague C comblé dans sources.json : url employeur vide → https://www.reworldwaste.com (vérifié 200, « A Leader in Sustainable Waste Solutions | Reworld® »), JSON valide. Tant que l'usine de Chambly ne republie rien, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que peaktech 6a2cebc / mitacs a49f7a5 / rbc edde0ca / zoetis 78938c3). Docstring reworld.py enrichie (chronologie + nature du volume). Sync isolé rejoué ×2 : found=0 stable, ok=1, 10,7-11,4 s ; non-régression plateforme workday sur tenant vivant cineplex : found=1, ok=1, 2,5 s. Fiches docs/connecteurs/ reworld.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 +271 −282
    2. [ka6] fix connecteur peaktech: stale « volume QC nul » (40e cas du pattern, 1re intervention sur cette source) — found=0 est CORRECT (médiane historique 0.5, Peak Technologies siège US, le bureau de Montréal 9066 Pascal-Gagnon n'a que 0-1 poste par vagues) : l'unique offre QC en base (3870 « Technicien de service sur le terrain », Montréal, parue 2026-07-30) a été DÉPUBLIÉE par l'employeur entre 13:25 et 15:40 EDT le 2026-10-05 (found 1 → 0, missed=1 puis removed=1 via le garde-fou 2-miss), sync_log VERT en continu (ok=1). MAIS vrai angle mort découvert et corrigé au passage : la recherche Dayforce de ce tenant est PARTITIONNÉE par culture — fr-CA renvoie désormais maxCount=0 (plus aucune offre traduite FR) alors qu'en-CA liste les 37-38 offres du board ; une future offre QC publiée seulement en anglais aurait été invisible. FIX : peaktech.py converti au pattern bi-culture CULTURES=('fr-CA','en-CA') avec fusion par external_id, version fr-CA prioritaire (même pattern que challenger/fnfmb/euromoneyplc). Board re-vérifié live : 38 offres toutes HORS QC (US ×~35, Toronto ON, GB, BE, IE) — zéro angle mort restant. Aucune migration d'ATS : peaktech.com/about-peak-technologies/careers/ (200) référence toujours dayforcehcm.com/CandidatePortal/en-CAN/peaktech (même tenant). Artefact vague C comblé dans sources.json : url employeur vide → https://www.peaktech.com (vérifié 200, « Digital Supply Chain & Mobility Solutions - Peak Technologies »), JSON valide. Tant que Peak Technologies ne republie rien au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que mitacs a49f7a5 / rbc edde0ca / zoetis 78938c3). Preuve du fetch bi-culture : fr-CA voit 0, en-CA voit 37, merge filtré QC → 0. Sync isolé rejoué ×3 : found=0 stable, ok=1, 4,4-4,8 s ; non-régression du pattern bi-culture Dayforce sur challenger : found=2, ok=1. Fiches docs/connecteurs/ peaktech.md + ats-dayforce.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 +292 −284
    3. Revert "[ka6] fix connecteur mitacs: faux positif de supervision « volume QC nul » (39e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5, Mitacs OBNL national de recherche publiant surtout hors Québec sur son board BambooHR, le bureau de Montréal n'y a que 0-1 poste par vagues). Le stale de 4,9 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-05 11:02) : l'unique offre QC en base (1823 « Directeur ou directrice, Programmes et Expériences de services », Montréal, parue 2026-09-16) a été DÉPUBLIÉE par Mitacs entre 11:02 et 13:22 EDT (found 1 → 0, missed=1, puis removed=1 via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Marqueur BambooHR « dépublié » confirmé live pour la 1re fois du repo : détail /careers/<id>/detail = 404 + JSON {"type":"not_found"} (offre vivante 1825 = 200 + jobOpeningStatus « Open »). Re-vérification live du board mitacs.bamboohr.com/careers/list : 200, 3 offres toutes HORS QC (Kelowna BC ×2, Lethbridge AB), libellés city/state propres, aucun remote ambigu — zéro angle mort. Aucune migration d'ATS : www.mitacs.ca/careers/ (200) référence toujours mitacs.bamboohr.com/careers (tenant unique, pas de sites frères sur BambooHR). Au passage, artefact vague C comblé dans sources.json (pattern zoetis 78938c3) : url employeur vide → https://www.mitacs.ca (vérifié 200) — édition ciblée 1 ligne, JSON valide. Tant que Mitacs ne republie rien au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que rbc edde0ca / zoetis 78938c3 / ghgsat 5e2c122 / poolcorp 3e3fd59). Docstring mitacs.py enrichie (chronologie + marqueur BambooHR + nature du volume). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,3 s ; non-régression plateforme bamboohr sur tenant vivant broccolini : found=23, ok=1. Fiches docs/connecteurs/ mitacs.md + ats-bamboohr.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."
      …
      This reverts commit a49f7a57fe726acb9128168dec936c09556c0c12.
      Simon-Pierre Boucher · 5 files +186 −181
    4. [ka6] fix connecteur mitacs: faux positif de supervision « volume QC nul » (39e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5, Mitacs OBNL national de recherche publiant surtout hors Québec sur son board BambooHR, le bureau de Montréal n'y a que 0-1 poste par vagues). Le stale de 4,9 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-05 11:02) : l'unique offre QC en base (1823 « Directeur ou directrice, Programmes et Expériences de services », Montréal, parue 2026-09-16) a été DÉPUBLIÉE par Mitacs entre 11:02 et 13:22 EDT (found 1 → 0, missed=1, puis removed=1 via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Marqueur BambooHR « dépublié » confirmé live pour la 1re fois du repo : détail /careers/<id>/detail = 404 + JSON {"type":"not_found"} (offre vivante 1825 = 200 + jobOpeningStatus « Open »). Re-vérification live du board mitacs.bamboohr.com/careers/list : 200, 3 offres toutes HORS QC (Kelowna BC ×2, Lethbridge AB), libellés city/state propres, aucun remote ambigu — zéro angle mort. Aucune migration d'ATS : www.mitacs.ca/careers/ (200) référence toujours mitacs.bamboohr.com/careers (tenant unique, pas de sites frères sur BambooHR). Au passage, artefact vague C comblé dans sources.json (pattern zoetis 78938c3) : url employeur vide → https://www.mitacs.ca (vérifié 200) — édition ciblée 1 ligne, JSON valide. Tant que Mitacs ne republie rien au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que rbc edde0ca / zoetis 78938c3 / ghgsat 5e2c122 / poolcorp 3e3fd59). Docstring mitacs.py enrichie (chronologie + marqueur BambooHR + nature du volume). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,3 s ; non-régression plateforme bamboohr sur tenant vivant broccolini : found=23, ok=1. Fiches docs/connecteurs/ mitacs.md + ats-bamboohr.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 +181 −186
    5. [ka6] fix connecteur ten_canada: MIGRATION D'ATS Breezy → Greenhouse (1re intervention sur cette source, 1re migration vers Greenhouse du repo) — le board Breezy ten-canada.breezy.hr/json vidé en bloc le 2026-10-05 (~11:16 EDT) répondait 200 + [] toutes régions, détail = 200 + « Position Closed » (marqueur telus_health 5134fa5) ; chronologie sync_log VERTE en continu : found=6 stable → 0 ×3 (removed=6 au 2e sync, garde-fou 2-miss). PAS une dépublication légitime : la page carrières officielle tenleasing.com/en/careers/ (403 anti-bot direct, 200 via Scrapfly ; l'ancien /en-ca/careers/job-listings/ redirige vers la homepage) pointe désormais vers 2 boards Greenhouse — transportationequipmentnetworkca (Canada, 19 offres dont 6 QC = les MÊMES postes que les 6 ex-offres Breezy : Shunt Driver/Operations Coordinator/Mobile Trailer Technician/Parts Technician/Regional Maintenance Manager à Lachine + Technician Apprentice « Quebec; St Laurent ») et transportationequipmentnetwork (US, 30 offres, 0 QC, hors périmètre). FIX : ten_canada.py converti BreezyConnector → GreenhouseConnector (BOARD transportationequipmentnetworkca, pattern mcgillstlaurentb8 93b0c2c) + gotcha lieux : les libellés Greenhouse de ce board sont des villes NUES sans province (« Lachine »), le filtre Breezy passait par state.id==QC — ajout générique « lachine » à _QC_CITIES (normalize.py, pattern dorval ; regions-qc.json mappait déjà lachine → région Montréal, homonyme « Lachine, MI » rejeté par _NON_QC_REGION_RE, vérifié). Pas de continuité d'IDs (hex Breezy → numériques Greenhouse) : les 6 offres Breezy restent archivées, les 6 Greenhouse ajoutées à neuf. sources.json : connector breezy→greenhouse, careers_url → job-boards.greenhouse.io/transportationequipmentnetworkca, artefact vague C comblé url vide → https://tenleasing.com. Sync isolé rejoué ×2 : found=6 stable (= volume d'avant-panne), ok=1, 0.1-0.2 s, 6 actives en base (Lachine/Montréal ×5, St-Laurent ×1) ; non-régression greenhouse (pcm found=1 ok) ET breezy (technica_mining found=10 ok — l'ajout _QC_CITIES ne perturbe pas les voisins). Fiches docs/connecteurs/ ten_canada.md + ats-greenhouse.md + ats-breezy.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.
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 7 files +308 −275
    6. [ka6] fix connecteur pwc: « broken » 3 syncs à 0 — le volet campus était un faux positif structurel (dépublication en bloc à l'échéance des candidatures), RÉPARATION RÉELLE par couverture du site frère Global_Experienced_Careers (1re intervention sur cette source). Chronologie (sync_log VERT en continu ok=1) : found 61 → 10 → 5 (08:41) → 0 ×3 (11:08/13:28/15:44) le 2026-10-05 — les ~65 offres campus QC (Montréal + Ville de Québec, parues fin août-début sept., cohortes janvier/mai/sept. 2027-2028) dépubliées EN BLOC par PwC à la date limite des candidatures universitaires d'automne. Marqueur vérifié live : détail cxs = 403 S22 (dépublié) sur 4 offres échantillonnées ; gotcha neuf sur ce tenant : le détail cxs exige l'externalPath COMPLET avec suffixe d'anchor (…_753347WD-2) — slug arbitraire + id nu → 404 S21 trompeur (testé contre une offre vivante). Board campus re-vérifié : 200, 1350 offres mondiales vivantes, facette locations SANS aucune ville QC (seul Canada : Vaughan ON count=1 — la facette couvre aussi les lieux secondaires des offres multi-lieux, donc zéro angle mort rbc c095c66) ; searchText Montreal/Montréal/Quebec/Québec → 0 ; façade Phenom jobs-ca.pwc.com/campus → totalHits=0 pour Montreal (purge propre). Aucune migration d'ATS : www.pwc.com/ca/en/careers.html (403 anti-bot direct, 200 via Scrapfly) référence jobs-ca.pwc.com, façade Phenom du même tenant Workday. FIX : sondage des sites frères du tenant (leçon silabs d96f5e0) → Global_Experienced_Careers (3863 offres) porte un volume QC RÉEL et permanent : 53 offres live (facette locations Montreal 49 + Montreal-1250 René-Lévesque 1 + Québec City 17, filtre serveur vérifié non factice, repli _find_qc_facet opérationnel — is_quebec_location reconnaît les 3 libellés). Couverture ajoutée via le pattern maison EXTRA_SITES + fetch() avec dédup par external_id (shell.py 28ff173 / quadreal.py) : le connecteur ne dépend plus du seul cycle campus saisonnier. Au passage, artefacts vague C corrigés : EMPLOYER/name « January 2027 » (un libellé de COHORTE campus pris pour le nom d'employeur, affiché publiquement sur le site !) → « PwC Canada », url employeur vide → https://www.pwc.com/ca — sources.json édité de façon ciblée, JSON valide. Sync isolé rejoué ×2 : found=53 stable (ajout 53, retrait propre des 5 dernières offres campus dépubliées), ok=1, 109-174 s ; en base : 53 actives (Montréal 33, Québec 5, 15 multi-lieux sans ville unique — comportement standard plateforme, cf. circlek/walmart) ; non-régression workday sur tenant vivant mcgill : found=570, ok=1. Fiches docs/connecteurs/ pwc.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 +546 −497
    7. [ka6] fix connecteur rbc: faux positif de supervision « volume QC nul » (37e cas du pattern, 2e intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5, portail Workday early talent RBCEARLYTALENT1 dominé par Toronto/US/Malaisie, le QC n'y a que 0-1 poste par vagues de stages). Le stale de 5,9 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-04 22:02) : l'unique offre QC en base (R-0000186549 « 2027 Winter Change Management Intern (4 months) », Montréal, parue 2026-09-10 — celle-là même récupérée par le fix multi-lieux c095c66 du 2026-09-28) a été DÉPUBLIÉE par RBC entre 22:02 et 00:00 EDT (found 1 → 0, missed=1, puis removed=1 via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Détail cxs de R-0000186549 : 403 S22 = marqueur Workday classique « dépublié ». Re-vérification live du board /wday/cxs/rbc/RBCEARLYTALENT1/jobs : 200, 34 offres paginées (limit max 20 sur ce tenant, 400 au-delà), publication active (postes 2027), searchText Quebec/Québec/Montreal/Montréal → 0 ; l'unique offre multi-lieux « 2 Locations » (R-0000187346, leçon rbc c095c66) vérifiée au détail cxs : Jersey City + New York, 100 % US. Topologie du tenant sondée (leçon silabs d96f5e0) : 8 noms de sites frères → 404, seul RBCEARLYTALENT1 existe. Aucune migration d'ATS : Google référence toujours RBCEARLYTALENT1 comme portail early talent (y compris l'offre dépubliée en cache) ; jobs.rbc.com = façade Phenom du volet carrières général, hors périmètre de ce connecteur. sources.json déjà propre (name/url/EMPLOYER corrigés au passage précédent). Tant que RBC ne republie rien au Québec sur le portail early talent (cycles saisonniers de stages), ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que zoetis 78938c3 / cclfg 43526d3 / ghgsat 5e2c122 / poolcorp 3e3fd59). Docstring rbc.py enrichie (chronologie + marqueur + topologie du tenant). Sync isolé rejoué ×2 : found=0 stable, ok=1, ~9 s ; non-régression plateforme workday sur tenant vivant mcgill : found=545, ok=1. 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.
      Simon-Pierre Boucher · 4 files +370 −378
  3. Sat, Oct 3, 2026 2

    1. [ka6] fix connecteur zoetis: faux positif de supervision « volume QC nul » (36e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 1.0, Zoetis santé animale, bureau canadien à Kirkland QC publiant sporadiquement sur le site international du tenant Workday zoetis.wd5). Le stale de 4,1 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-02 23:47) : l'unique offre QC en base (JR00021548 « Chef.fe de territoire, animaux de compagnie/Territory Manager, Companion Animal », CA-Quebec-Remote, parue 2026-09-03) a été DÉPUBLIÉE par Zoetis entre 23:47 et 01:54 EDT (found 1 → 0, missed=1, puis removed=1 au sync rejoué via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Détail cxs de JR00021548 : 403 S22 = marqueur Workday classique « dépublié ». Re-vérification live du board /wday/cxs/zoetis/zoetis_intl/jobs : 200, 57 offres, board international vivant (Sao Paulo/Hyderabad/Europe), 0 offre Canada ; searchText Quebec/Québec/Montreal/Montréal/Kirkland → 0 ; l'unique offre multi-lieux « 5 Locations » (JR00021645, leçon rbc c095c66) vérifiée au détail cxs : lieux 100 % UK (Exeter, Leeds, Hitchin, Bristol, Ringwood). Topologie du tenant sondée (leçon silabs d96f5e0) : sites frères zoetis/Zoetis = même board US (112 offres, 0 QC — les 3 résultats searchText « Canada » sont des correspondances TEXTE à lieux US Parsippany/US-DE-Remote/US-AR-Remote), 8 autres noms → 404. Aucune migration d'ATS : zoetis.com/join-us (200) référence toujours myworkdayjobs.com/zoetis ; zoetis.ca (www2.zoetis.ca) n'a pas de portail carrières distinct (vérifié + Serper). Aucun angle mort. Au passage, artefact vague C comblé dans sources.json (pattern telus_health 5134fa5 / cclfg 43526d3) : url employeur vide → https://www.zoetis.com (vérifié 200) — édition ciblée 1 ligne, format préservé, JSON valide. Tant que Zoetis ne republie rien au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que ghgsat 5e2c122 / poolcorp 3e3fd59 / cclfg 43526d3 / geox f785ff4). Docstring zoetis.py enrichie (chronologie + marqueur + topologie du tenant). Sync isolé rejoué ×2 : found=0 stable, ok=1, 2,7 s, retrait propre de JR00021548 (removed=1) ; non-régression plateforme workday sur tenant vivant mcgill : found=564, ok=1. Fiches docs/connecteurs/ zoetis.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 +121 −115
    2. [ka6] fix connecteur altusgroup: faux positif de supervision « volume QC nul » (35e cas du pattern, 4e intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT, et la cause est désormais prouvée STRUCTURELLE sous un angle neuf (M&A, leçon tsys ad3ad36) : Altus Group démantèle ses services-conseils par cessions successives — Property Tax → Ryan LLC (clôturé 2025), évaluations canadiennes → Newmark (clôturé ~2026-03-01), et Development Advisory (ex-Cost & Project Management, la division de l'UNIQUE offre QC historique R0013818 « Cost Consultant/Conseiller(ère) en analyse de coûts », Montréal, dépubliée 2026-08-26) → Newmark (annoncé 2026-08-04, clôture 2026-09-01, communiqué officiel altusgroup.com vérifié live). Le board Workday résiduel altusgroup.wd3/AltusGroup ne porte plus que logiciel/données : re-vérifié live 200, 42 offres (Toronto/US/UK/Inde/Singapour), searchText Quebec/Québec/Montréal/Montreal → 0, offre multi-lieux « 21 Locations » R0014026 vérifiée au détail cxs = 21 lieux 100 % US. Aucun site frère sur le tenant (9 noms sondés → 404, seul AltusGroup existe). Aucune migration d'ATS : careers.altusgroup.com reste la façade Phenom AGYAGUGLOBAL (200) au-dessus du même board. ANGLE MORT DOCUMENTÉ (pas de nouveau connecteur créé, hors périmètre) : les équipes montréalaises ex-Altus publient désormais chez NEWMARK sur Oracle Cloud HCM (hdow.fa.us6.oraclecloud.com, site CX_1001) — ≥1 offre QC vérifiée live (249132 « Billing Coordinator », Montréal, parue 2026-07-29) ; Newmark (et Ryan) non couverts par job-ka → connecteur candidat pour récupérer ce volume. Le stale de 901 h vient de la définition de succès de la supervision (dernier found>0 = 2026-08-26) : sync_log VERT en continu depuis (146/148 ok), les rares échecs = fenêtre de maintenance nocturne Workday ~03 h EDT (38 sources touchées simultanément le 2026-10-03 03:11, transitoire systémique déjà retryé). Tant qu'Altus ne republie rien au Québec — improbable vu la cession de la division concernée — ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que cclfg 43526d3 / ghgsat 5e2c122 / poolcorp 3e3fd59 / tsys ad3ad36). sources.json déjà propre (url + sectors corrigés aux passages précédents). Docstring altusgroup.py enrichie (chronologie M&A + angle mort Newmark + tenant sans site frère). Sync isolé rejoué ×2 : found=0 stable, ok=1, ~4 s ; non-régression plateforme workday sur tenant vivant mcgill : found=564, ok=1. 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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 4 files +422 −405
  4. Fri, Oct 2, 2026 3

    1. [ka6] fix connecteur cclfg: faux positif de supervision « volume QC nul » (34e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5, board Greenhouse corporatif de Connor, Clark & Lunn Financial Group, groupe de gestion d'actifs dont les bureaux actifs sont Toronto/Vancouver/Gurugram/Londres et qui ne publie à Montréal que sporadiquement). Le stale de 5,3 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-02 12:37) : l'unique offre QC en base (4382555009 « Analyste des Opérations de TI / IT Operations Analyst », Montréal, parue 2026-08-27) a été DÉPUBLIÉE par CC&L entre 12:37 et 14:16 EDT (found 1 → 0, puis removed=1 à 16:32 via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Marqueur Greenhouse vérifié live : détail dépublié = 302 → /cclfg?error=true (marqueur documenté, même que gearboxquebec 0373c30). Re-vérification live du board boards-api v1 : 200, 86 offres, tenant TRÈS vivant mais 0 mention Québec/Montréal dans le JSON complet (content=true) — offices actifs Gurugram/London/Toronto/Vancouver, aucune offre multi-lieux cachée. Aucune migration d'ATS : la page opportunités officielle cclfg.cclgroup.com/careers/opportunities/ charge toujours Greenhouse (GreenhouseBoard.initList) ; la mention « Dayforce » n'est qu'un outil interne cité dans une description de poste ; attention au soft-404 maison : www.cclgroup.com/careers/ sert une page d'erreur en 200. Topologie du groupe cartographiée (leçon novisto 894eb9d / gearbox 0373c30 — boards frères sondés) : la page opportunités agrège 7 autres boards Greenhouse d'affiliés — bcp (3 offres dont 1 QC Anjou) et pcm (14 offres dont 1 QC Montréal) DÉJÀ couverts par les connecteurs job-ka du même nom ; cclim/cclinfrastructure/cclone/crei/midstar → 0 offre QC. Aucun angle mort. Au passage, artefact vague C comblé dans sources.json (pattern telus_health 5134fa5) : url employeur vide → https://www.cclgroup.com (vérifié : 302 → cclfg.cclgroup.com, 200 avec UA navigateur) — édition ciblée 1 ligne, format préservé, JSON valide ; name « Connor, Clark & Lunn Financial Group Ltd. » conservé (raison sociale, pas une faute de graphie). Tant que CC&L ne republie rien à Montréal, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que ghgsat 5e2c122 / poolcorp 3e3fd59 / geox f785ff4 / silabs d96f5e0). Docstring cclfg.py enrichie (chronologie + marqueur + topologie des 8 boards du groupe). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,1-0,2 s ; non-régression plateforme greenhouse sur board frère vivant pcm : found=1, ok=1. Fiches docs/connecteurs/ cclfg.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 +343 −338
    2. [ka6] fix connecteur ghgsat: faux positif de supervision « volume QC nul » (33e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 1.5, tenant Workable à faible volume publiant par vagues de paires FR/EN, toutes à Montréal). Le stale de 4,4 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-02 09:33) : les 3 offres QC en base (« Senior Backend Developer - Spectra » 32DA8F3BEC, « Développeur(se) Backend Senior - Spectra » D278C951E3 + 1 frère, Montréal) ont été DÉPUBLIÉES EN BLOC par GHGSat entre 09:33 et 11:55 EDT (found 3 → 0, puis removed=3 à 12:51 via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Marqueur Workable vérifié live : détail dépublié = 302 → apply.workable.com/oops (variante documentée du 301 → board + not_found=true de findevcanada 5b0ba42). Re-vérification live du board : API v1 widget ET v3 → 200, 0 offre sur TOUT le tenant (pas juste le QC — GHGSat n'embauche plus du tout en ce moment), tenant vivant (name=GHGSAT, board « Current Openings » 200). Aucune migration d'ATS : le lien « Careers » de www.ghgsat.com (200) pointe toujours vers apply.workable.com/ghgsat. Au passage, artefacts vague C corrigés dans sources.json (pattern silabs/trugreen/reddyice/poolcorp) : name 'GHGSAT' → 'GHGSat' (graphie officielle du site, EMPLOYER aligné dans ghgsat.py — 0 offre active, aucun impact dédup) et url employeur vide → https://www.ghgsat.com (vérifié 200) — éditions ciblées, format préservé, JSON valide. Tant que GHGSat ne republie rien, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / silabs d96f5e0 / telus_health 5134fa5 / findevcanada 5b0ba42 / poolcorp 3e3fd59). Docstring ghgsat.py enrichie (chronologie + marqueurs + topologie du tenant). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,2 s ; non-régression plateforme workable sur tenant vivant genetec_inc : found=97, ok=1. Fiches docs/connecteurs/ ghgsat.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). 106 tests pytest verts. pm2 restart job-ka-sync OK, site local 200, www.job-ka.com 200.
      Simon-Pierre Boucher · 5 files +249 −256
    3. [ka6] fix connecteur poolcorp: faux positif de supervision « volume QC nul » (32e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 1.0, distributeur US de produits de piscine dont seul le centre de vente de Boucherville publie au QC, industrie SAISONNIÈRE). Le stale de 4,4 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-02 07:34) : l'unique offre QC en base (R22014 « Expéditeur/Shipping Clerk », Boucherville, parue 2026-09-24) a été DÉPUBLIÉE par POOLCORP entre 07:34 et 10:03 EDT (found 1 → 0, missed=1, puis removed=1 au sync rejoué via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Détail cxs de R22014 (et R21681) : 403 S22 = marqueur Workday documenté « dépublié ». Re-vérification live du board /wday/cxs/poolcorp/POOLCORP/jobs : 200, 168 offres, publication ACTIVE (« Posted 2 Days Ago »), facette locationRegionStateProvince SANS Québec (Canada = 3 offres, toutes en Ontario, correctement filtrées) ; searchText Quebec/Québec/Boucherville/Montreal → 0 ; les 2 offres multi-lieux « 3/4 Locations » (leçon rbc c095c66) vérifiées au détail cxs : lieux 100 % US. Aucune migration d'ATS : www.poolcorp.com/careers (403 anti-bot direct, 200 via Scrapfly) référence toujours le même tenant poolcorp.wd1. Au passage, artefacts vague C corrigés dans sources.json (pattern silabs/trugreen/reddyice) : name 'Poolcorp' → 'POOLCORP' (graphie officielle, EMPLOYER aligné dans poolcorp.py — 0 offre active, aucun impact dédup) et url employeur vide → https://www.poolcorp.com (vérifié 200 via Scrapfly) — éditions ciblées, format préservé, JSON valide. Tant que POOLCORP ne republie rien à Boucherville (attendre la saison des piscines), ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe saisonnière que reddyice 3a6cc61 / trugreen a99c362 / samsara 76fd913 ; même classe générale que geox f785ff4 / silabs d96f5e0 / telus_health 5134fa5 / findevcanada 5b0ba42). Docstring poolcorp.py enrichie (chronologie + facette lieux + vérif multi-lieux). Sync isolé rejoué ×2 : found=0 stable, ok=1, 11-12 s, retrait propre de R22014 (removed=1) ; non-régression plateforme workday sur tenant vivant mcgill : found=576, ok=1. Fiches docs/connecteurs/ poolcorp.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 +465 −444
  5. Thu, Oct 1, 2026 5

    1. [ka6] fix connecteur reddyice: faux positif de supervision « volume QC nul » (31e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 0.5, fabricant de glace US dont l'usine de Montréal publie sporadiquement, pointe SAISONNIÈRE estivale : les 4 « Associé à la production saisonnière » JR24314-17 avaient déjà disparu mi-septembre). Le stale de 5,1 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-01 12:49) : l'unique offre QC en base (JR24467 « Directeur d'usine (Plant Manager) », Montréal, parue 2026-09-01) a été DÉPUBLIÉE par Reddy Ice entre 12:49 et 15:22 EDT (found 1 → 0, missed=1, puis removed=1 à 17:21 via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Variante de marqueur Workday documentée sur ce tenant : détail cxs dépublié = 404 {"errorCode":"HTTP_404"} SANS sous-code S21/S22 (≠ le 403 S22 habituel) ; détail vivant = 200 + jobPostingInfo (vérifié sur JR24661 Manager, Distribution Center, Calgary). Re-vérification live du board /wday/cxs/reddyice/ReddyIceExternal/jobs : 200, 77 offres, publication ACTIVE (« Posted Today »), facette locations = 46 lieux TOUS US sauf « Calgary 3 » (1 offre, hors QC, correctement filtrée) ; searchText Montreal/Montréal/Quebec/Québec → 0. Aucune migration d'ATS : www.reddyice.com/careers/jobs/ (200) embarque toujours les liens du même tenant reddyice.wd5. Au passage, artefacts vague C corrigés dans sources.json (pattern silabs/trugreen) : name 'Reddyice' → 'Reddy Ice' (graphie officielle, EMPLOYER aligné dans reddyice.py — 0 offre active, aucun impact dédup) et url employeur vide → https://www.reddyice.com (vérifié 200) — éditions ciblées, format préservé, JSON valide. Tant que Reddy Ice ne republie rien à Montréal (attendre la saison chaude), ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe saisonnière que trugreen a99c362 / samsara 76fd913 ; même classe générale que geox f785ff4 / silabs d96f5e0 / telus_health 5134fa5 / findevcanada 5b0ba42). Docstring reddyice.py enrichie (chronologie + facette lieux + variante de marqueur 404). Sync isolé rejoué ×2 : found=0 stable, ok=1, 4,9 s ; non-régression plateforme workday sur tenant vivant mcgill : found=566, ok=1. Fiches docs/connecteurs/ reddyice.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 +423 −430
    2. [ka6] fix connecteur trugreen: faux positif de supervision « volume QC nul » (30e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 4.0, source SAISONNIÈRE : entretien de pelouse). Le stale de 5,3 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-01 10:36) : les 4 offres QC en base (2× « Travail Général - Technicien entretien de pelouse! » + 2× « Représentant(e) aux ventes – Temps plein », Montréal H4R 2A4 et Québec G2E 5P3, parues 2026-09-01) ont été DÉPUBLIÉES EN BLOC par TruGreen entre 10:36 et 12:58 EDT (found 4 → 0, missed=4) — fin de saison de l'entretien de pelouse au Québec, début octobre. sync_log VERT en continu (ok=1). Détail cxs des reqs R35335/R35491 : 403 S22 (marqueur Workday documenté = dépublié). Re-vérification live du board /wday/cxs/trugreen/CanadaExternalCareers/jobs : 200, 3 offres, publication ACTIVE (« Posted 2 Days Ago »), mais toutes corporate en Ontario (Barrie, Mississauga, Oshawa), searchText Quebec/Montreal → 0. Aucun angle mort : le site frère du tenant USExternalCareers (330 offres, leçon silabs d96f5e0) n'a que des villes US, searchText Quebec/Montréal → 0. NOUVEAU MARQUEUR documenté — façade Paradox.ai (chatbot Olivia) : le site carrières officiel www.trugreenjobs.com (/fr/) est un front Paradox AU-DESSUS du même tenant Workday (pages détail P1-XXXXXXX → reqs R35XXX, apply_url_destination=job_details) qui listait ENCORE les 4 offres QC dépubliées (datePosted rafraîchie 2026-09-21, purge différée) — même classe que la façade Phenom : trancher au détail cxs Workday, jamais à la façade. Aucune migration d'ATS. Tant que TruGreen ne republie pas d'offres terrain QC (attendre le printemps), ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / silabs d96f5e0 / telus_health 5134fa5 / findevcanada 5b0ba42 ; cycle saisonnier à prévoir comme samsara 76fd913). Au passage, artefacts vague C corrigés dans sources.json (pattern silabs ad3ad36) : name 'Trugreen' → 'TruGreen' (graphie officielle, EMPLOYER aligné dans trugreen.py — les 4 offres étaient en cours de retrait, aucun impact dédup) et url employeur vide → https://www.trugreen.ca (vérifié 200, vrai site canadien sans redirection vers le .com) — éditions ciblées, format préservé, JSON valide. Docstring trugreen.py enrichie (chronologie + topologie 2 sites + marqueur Paradox). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,4 s, les 4 offres retirées proprement par le garde-fou 2-miss (removed=4) ; non-régression plateforme workday sur tenant vivant mcgill : found=565, ok=1. Fiches docs/connecteurs/ trugreen.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 +323 −323
    3. [ka6] fix connecteur telus_health_7fe6b0fe8614: faux positif de supervision « volume QC nul » (29e cas du pattern, 1re intervention sur cette source) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 1.0, tenant Breezy « TELUS Health Virtual Care » à très faible volume : postes de soins virtuels pancanadiens, rarement plus d'un au QC). Le stale de 5,4 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-01 10:35) : l'unique offre QC en base (9ba0a40813bc « Soins Virtuels TELUS Santé Infirmier (ère) Praticien (ne) - Virtuels - Québec », parue 2026-03-17, en ligne ~6,5 mois) a été DÉPUBLIÉE par TELUS Santé entre 10:35 et 12:57 EDT (found 1 → 0, removed=1 au sync isolé rejoué via le garde-fou 2-miss). sync_log VERT en continu (ok=1). Marqueur Breezy « détail dépublié » documenté (1re confirmation live sur cet ATS) : page /p/<id>-<slug> → 200 + bloc application-confirmed « Position Closed — Sorry, this position is no longer accepting candidates » (titre conservé), offre absente de /json ; détail vivant = 200 + formulaire. Re-vérification live du board /json?verbose=true : 200, 1 offre restante (Nurse Practitioner Alberta, parue 2026-06-09 — hors QC, correctement filtrée par location.state.id). Aucune migration d'ATS : le tenant publie encore et le site employeur est vivant. Au passage, artefact vague C comblé dans sources.json (pattern geox/quenchwater/oliverbonacini) : url employeur vide → https://www.telushealth.com (vérifié 200 en direct ; telus.com/fr/health = 403 anti-bot direct, 200 via Scrapfly) — édition ciblée 1 ligne, format préservé, JSON valide. Tant que TELUS Santé ne publie pas de poste virtuel au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / silabs d96f5e0 / findevcanada 5b0ba42). Docstring telus_health_7fe6b0fe8614.py enrichie (chronologie + marqueur + topologie du tenant). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,1 s ; non-régression plateforme breezy sur tenant vivant recruiting : found=87, ok=1. Fiches docs/connecteurs/ telus_health_7fe6b0fe8614.md + ats-breezy.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 +176 −173
    4. [ka6] fix connecteur findevcanada: faux positif de supervision « volume QC nul » (28e cas du pattern, 2e sur cette source après 2026-09-11) — le connecteur est SAIN, found=0 est le comportement CORRECT (médiane historique 2.0, source à faible volume par vagues de paires FR/EN). Le stale de 4,0 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-10-01 09:54) : la dernière paire FR/EN de Montréal (« Coordonnateur/trice de projets, Bureau numérique - Contrat de 12 mois » 2EBE19108B / « Project Coordinator, Digital Office » 539F63ADC6, parue 2026-09-18) a été DÉPUBLIÉE par FinDev Canada entre 09:54 et 12:14 EDT (removed=2 à 14:37). sync_log VERT en continu (ok=1). Marqueur Workable précisé vs geox/quenchwater : détail dépublié = 301 → /findevcanada/j/<id> puis redirection board « Current Openings » + not_found=true ; détail vivant = 200 + titre du poste (vérifié sur l'offre Singapour 51265D00F7). Re-vérification live du board : API v1 widget ET v3 → 200, 2 offres, toutes deux à Singapour (hors QC, correctement filtrées). Aucune migration d'ATS : findevcanada.ca/en/careers (200) référence toujours apply.workable.com/findevcanada ; le lien hérité edc.taleo.net (maison mère EDC) ne résout PLUS en DNS — EDC est désormais elle aussi sur Workable (connecteur frère export_development_canada, 56 offres, vert). sources.json déjà propre (aucun artefact vague C). Tant que FinDev Canada (filiale d'EDC, bureau de Montréal) ne publie rien au Québec, ce connecteur sera re-signalé périodiquement : structurel, pas une panne (même classe que geox f785ff4 / silabs d96f5e0 / oliverbonacini d461e83). Docstring findevcanada.py enrichie (chronologie des 2 faux positifs + marqueurs + topologie EDC/FinDev). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,2 s ; non-régression plateforme workable sur tenant vivant genetec_inc : found=98, ok=1. Fiches docs/connecteurs/ findevcanada.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). 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 +306 −306
    5. [ka6] fix connecteur mcgillstlaurentb8: migration JazzHR → Lever (org=mcgillstlaurent) — le statut stale vient de la migration d'ATS de l'employeur : le tenant JazzHR historique mcgillstlaurentb8.applytojob.com répond « Inactive Career Page » (200, this account is no longer active — compte désactivé chez l'ATS, 2e cas du marqueur après xtltransportlogistics c4a681e mais ici avec REPRENEUR identifié) depuis le 2026-09-30 ~20:50 EDT, dernier sync OK found=3 à 19:05 ; plateforme jazzhr saine par ailleurs (28 autres tenants verts le 2026-10-01). La page carrières officielle mcgillstlaurent.com/career (200, site vivant) n'embarque plus AUCUN ATS — formulaire Gravity Forms de candidature spontanée seulement, pattern identique à XTL — mais balayage Serper → board Lever VIVANT jobs.lever.co/mcgillstlaurent : 5 offres au 2026-10-01 dont 4 à Montréal (Junior Grain Trader, Junior Power Trader, Physical Commodities Trader, Senior Grain Trader, publiées 2026-09-09→09-22 : la migration était en cours depuis ~3 semaines avant la fermeture du tenant JazzHR) + 1 US (Power Trader, filtrée par quebec_only). Réécriture du connecteur sur la plateforme existante jobka/connectors/lever.py (pattern challenger 28ff173), même source_id. ATTENTION espaces de noms documentée : l'ORG Lever « mcgillstlaurent » (maison mère) ≠ le connecteur frère mcgillstlaurent (tenant JazzHR mcgillstlaurent.applytojob.com = CWP Energy, division énergie du groupe, toujours VIVANT, 4 offres QC) — aucun conflit (aucun autre connecteur Lever sur cet org), aucun chevauchement de titres entre les deux boards, la dédup inter-sources tranchera au besoin. Pas de continuité d'IDs (JazzHR alphanumériques → UUID Lever) : les 3 offres JazzHR actives retirées proprement par le garde-fou 2-miss (removed=3 au 2e sync), 4 offres Lever ajoutées à neuf. sources.json : connector jazzhr → lever, careers_url → jobs.lever.co/mcgillstlaurent (200), url vide → https://mcgillstlaurent.com (vérifié 200 — artefact vague E, pattern des missions précédentes). Sync isolé rejoué ×2 : found=4 stable (added=4 puis removed=3), ok=1, 0,5-0,6 s — au-dessus de la médiane 3.0 ; fiches complètes 4/4 ville Montréal + description (5,5-9,2 k) + date_posted, URL détail live 200. Non-régression plateforme lever sur tenant vivant bhvr : found=29, ok=1. Fiches docs/connecteurs/ mcgillstlaurentb8.md + ats-lever.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 +209 −185
  6. Wed, Sep 30, 2026 3

    1. [ka6] fix connecteur silabs: faux positif de supervision « volume QC nul » (27e 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-30 14:52) : l'unique offre QC en base (20984 « Développeur logiciel I / Software Engineer I », Montréal, parue 2026-08-22) a été DÉPUBLIÉE par Silicon Labs le jour même (found 1 → 0 avec missed=1 à 17:05, removed=1 à 19:15), confirmé au détail cxs : 403 S22 (marqueur Workday documenté : dépublié). sync_log VERT en continu (ok=1). Re-vérification live du board /wday/cxs/silabs/SiliconlabsCareers/jobs : 200, 83 offres mondiales, publication ACTIVE (« Posted Today »), mais la facette locationCountry ne contient PLUS le Canada (China ×2, Finland ×2, Hungary ×7, India ×27, Norway ×4, Singapore ×17, Taiwan ×2, USA ×22) et searchText=Montreal → 0. Aucune migration d'ATS : www.silabs.com/about-us/careers (403 en accès direct — anti-bot, vérifié via Scrapfly) référence toujours le tenant silabs.wd1. Aucun angle mort : les 3 AUTRES SITES du tenant (ExperiencedJobs 66, Internships 2, NewCollegeGraduates 13) sont vivants mais sans aucune offre canadienne non plus (Montreal → 0 partout) ; SiliconlabsCareers reste le super-ensemble. Tant que Silicon Labs ne publie rien au Québec (bureau R&D de Montréal), 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 / tsys ad3ad36 / produits_kruger e25471e / oliverbonacini d461e83). Au passage, artefacts vague C corrigés dans sources.json (pattern tsys ad3ad36) : name 'Silabs' → 'Silicon Labs' (vrai nom de l'employeur, EMPLOYER aligné dans silabs.py — 0 offre active, aucun impact dédup) et url employeur vide → https://www.silabs.com (vérifié 200 via Scrapfly) — éditions ciblées, format préservé, JSON valide. Docstring silabs.py enrichie (re-vérif 2026-09-30 + chronologie + topologie des 4 sites du tenant). Sync isolé rejoué ×2 : found=0 stable, ok=1, 6-7 s ; non-régression plateforme workday sur tenant vivant mcgill : found=314, ok=1. Fiches docs/connecteurs/ silabs.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 +507 −505
    2. [ka6] fix connecteur oliverbonacini: faux positif de supervision « volume QC nul » (26e 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,8 h vient de la définition de succès de la supervision (dernier sync found>0 = 2026-09-29 19:10) : les 2 dernières offres QC en base (Bar George, Montréal — 744000140534893 « Spécialiste des événements » parue 2026-07-29, 744000144618266 « Demi Chef de Partie » parue 2026-08-20) ont été DÉPUBLIÉES par l'employeur (found 2 → 1 à 19:10 → 0 à 21:17/22:53, removed=1 chacun), confirmé au détail API : 200 + active:false (marqueur SmartRecruiters documenté, 1re confirmation live du marqueur). sync_log VERT en continu (ok=1). Re-vérification live de l'API api.smartrecruiters.com/v1/companies/OliverBonacini/postings : 200, 74 offres, publication ACTIVE (dernières le 2026-09-30 même), mais TOUTES hors Québec (Toronto ×61, Edmonton ×8, Calgary ×2, The Blue Mountains ×2, North York ×1). Les 10 offres QC historiques étaient toutes du Bar George (seul établissement montréalais d'O&B avec Le Mount Stephen), dépubliées progressivement depuis le 2026-09-04. Aucune migration d'ATS : oliverbonacini.com/careers ET bargeorge.ca/fr/news/carrieres référencent le MÊME tenant SmartRecruiters (pages filtrées par marque careers.smartrecruiters.com/OliverBonacini/bar-george et /le-mount-stephen — pas de compte séparé), la page marque Bar George affiche « Aucun » poste ouvert ; les offres Bar George encore visibles sur LinkedIn/agrégateurs sont des miroirs périmés des offres dépubliées. Tant que O&B 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 / quenchwater f1b4e0a / tsys ad3ad36 / produits_kruger e25471e). Au passage, artefact vague C dans sources.json comblé (pattern geox/quenchwater) : url employeur vide → https://www.oliverbonacini.com (vérifié 200) — édition ciblée 1 ligne, format préservé, JSON valide. Docstring oliverbonacini.py enrichie (re-vérif 2026-09-30 + chronologie + topologie tenant/marques). Sync isolé rejoué ×2 : found=0 stable, ok=1, 0,4-0,6 s ; non-régression plateforme smartrecruiters sur tenant vivant ubisoft : found=152, ok=1. Fiches docs/connecteurs/ oliverbonacini.md + ats-smartrecruiters.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 +281 −275
    3. [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
  7. 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
  8. 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
  9. 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
  10. 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
Menu

Theme