SPB Git

spb/job-ka

Public
page 1
  1. Sat, Oct 3, 2026 1

    1. [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
  2. 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
  3. 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
  4. 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
  5. 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
  6. 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
  7. 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
  8. 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
  9. Fri, Sep 25, 2026 4

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

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

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

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

Theme