SPB Git

spb/job-ka

Public
page 1
  1. Thu, Aug 27, 2026 19

    1. [ka6] fix connecteur usamechasp: employeur USA Mechanical & Energy Services américain — entreprise CVC/mécanique du Connecticut (siège East Granby, CT). Les 3 offres captées (Commercial HVAC Technician, Human Resources Assistant, HVAC Commercial Mechanical Engineer) étaient localisées « East Granby, CT » / « East Granby CT » : faux positif du filtre Québec parce que « Granby » (ville d'Estrie, dans _QC_CITIES) matchait à l'intérieur de « East Granby » — même famille que coorstek b7ebb74 / echodynecorp 5bf3718 / edelmanfinancialenginesllc 6f6298c / epwealth e34defd / insomniacookies 9f92204 / blockslearning 3bf461d / bluetoothsiginc 7d5cd82 / kestramedicaltechnologiesinc f41a81a / lakewashingtondermatology 411e4a1 / lifestance 25262c1 / nadel 80e2f6f / onemedical a57eee6 / phynetdermatology 9a9de3d / residential11 46f36ee / sweeneyconrad 91b5a0e / synterra 68745a5 / seymourpacificdevelopmentsltd e27e36a / tealcommunicationsinc 24812b3. Depuis le fix is_quebec_location f4038e4, ces offres sont correctement rejetées (volume 0), y compris la variante « East Granby CT » sans virgule. Purge par le mécanisme normal du pipeline: sync isolé rejoué le 2026-08-27 → miss_count=2 → active=0 (found=0, removed=3, statut ok); médiane 3.0 < DRIFT_MIN_BASE=8 donc garde anti-dérive non déclenchée. Vérifié à la source: 23 postings Greenhouse, TOUS au Connecticut (East Granby, Hartford, Middletown, Enfield, New London, Waterbury, New Haven, Meriden, Avon, West Hartford, Glastonbury), zéro au Québec. Filtre vérifié sur les 23 libellés: is_quebec_location = False partout. Volume 0 = comportement correct. Note de contexte ajoutée au connecteur.
      Simon-Pierre Boucher · 1 file +21 −1
    2. Simon-Pierre Boucher · 1 file +17 −2
    3. [ka6] fix connecteur synterra: employeur Synterra ontarien — entreprise de sécurité du Nord de l'Ontario. L'unique offre captée était « Security Guard — Kirkland Lake, ON, Canada » : faux positif du filtre Québec parce que « Kirkland » (ville de l'Ouest-de-l'Île, dans _QC_CITIES) matchait à l'intérieur de « Kirkland Lake » — même famille que coorstek b7ebb74 / echodynecorp 5bf3718 / edelmanfinancialenginesllc 6f6298c / epwealth e34defd / insomniacookies 9f92204 / blockslearning 3bf461d / bluetoothsiginc 7d5cd82 / kestramedicaltechnologiesinc f41a81a / lakewashingtondermatology 411e4a1 / lifestance 25262c1 / nadel 80e2f6f / onemedical a57eee6 / phynetdermatology 9a9de3d / residential11 46f36ee / sweeneyconrad 91b5a0e / seymourpacificdevelopmentsltd e27e36a. Depuis le fix is_quebec_location f4038e4 (rejet du code de province « , ON » dans le libellé), cette offre est correctement rejetée (volume 0). Purge par le mécanisme normal du pipeline: sync isolé rejoué le 2026-08-27 → miss_count=2 → active=0 (found=0, removed=1, statut ok); médiane 1.0 < DRIFT_MIN_BASE=8 donc garde anti-dérive non déclenchée. Vérifié à la source: 23 postings JazzHR « Security Guard », TOUS en Ontario (Kirkland Lake, Timmins ×5, Thunder Bay ×2, Wawa ×2, Chapleau ×2, Sudbury, Sault Ste. Marie, Hearst, Dryden, Red Lake, Atikokan, Fort Frances, Geraldton, Rainy River, White River), zéro au Québec. Volume 0 = comportement correct. Note de contexte ajoutée au connecteur (+ correction du chemin dans l'en-tête).
      Simon-Pierre Boucher · 1 file +22 −2
    4. [ka6] fix connecteur seymourpacificdevelopmentsltd: employeur Seymour Pacific Developments de l'Ouest canadien — constructeur résidentiel de Campbell River (C.-B.). Les 2 offres captées étaient à « Portage La Prairie, MB » (Manitoba) : faux positif du filtre Québec parce que « La Prairie » (ville de la Montérégie, dans _QC_CITIES) matchait à l'intérieur du libellé — variante manitobaine de la famille des villes homonymes (Kirkland WA : coorstek b7ebb74 / echodynecorp 5bf3718 / edelmanfinancialenginesllc 6f6298c / epwealth e34defd / insomniacookies 9f92204 / blockslearning 3bf461d / bluetoothsiginc 7d5cd82 / kestramedicaltechnologiesinc f41a81a / lakewashingtondermatology 411e4a1 / lifestance 25262c1 / nadel 80e2f6f / onemedical a57eee6 / phynetdermatology 9a9de3d / residential11 46f36ee). Depuis le fix is_quebec_location f4038e4 (rejet du code de province « , MB » en fin de libellé), ces offres sont correctement rejetées (volume 0). Purge par le mécanisme normal du pipeline: syncs réels → miss_count=2 → active=0 (removed=1 le 2026-08-27 02:03); médiane 0.5 < DRIFT_MIN_BASE=8 donc garde anti-dérive non déclenchée. Vérifié à la source: 11 postings JazzHR, TOUS hors Québec (Campbell River BC, Fernie BC, South Calgary AB, Ottawa ON, Saskatoon SK, Portage La Prairie MB), zéro au Québec. Sync isolé rejoué: found=0, statut ok. Volume 0 = comportement correct. Note de contexte ajoutée au connecteur (+ correction du chemin dans l'en-tête).
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +16 −2
  2. Wed, Aug 26, 2026 10

    1. Simon-Pierre Boucher · 1 file +1 −1
    2. Simon-Pierre Boucher · 1 file +8 −2
    3. Simon-Pierre Boucher · 1 file +7 −2
  3. Tue, Aug 25, 2026 11

    1. Refonte visuelle majeure du front-end : design editorial premium
      …
      - Hero : halo cyan, pastille « marche en direct », recherche centrale
        (barre blanche a ombre decalee cyan) + chiffres live (offres,
        employeurs, % salaire affiche)
      - Filtres : rail de selecteurs discrets sur desktop (pilules, etat
        actif encre/cyan), panneau bas coulissant sur mobile, puces de
        filtres actifs retirables + « Tout effacer »
      - Offres : fini les cartes bordees — rangees editoriales a filets
        fins, titre Space Grotesk, salaire en exergue cyan a droite avec
        equivalent annuel, metadonnees calmes en mono, barre d'accent au
        survol ; favoris alignes sur la meme structure
      - Fiche : mise en page ouverte (plus de grosse boite), metriques en
        blocs a filet superieur, CTA « Postuler » en accent
      - Tableau employeurs allege (filets fins), pagination sobre en mono,
        menu mobile avec entree en cascade, prefers-reduced-motion respecte
      - Bulle KA Agent masquee quand un panneau plein ecran est ouvert
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 6 files +768 −245
    2. Nav v2 correctif : le ✕ de fermeture vit DANS le panneau (fixe, toujours visible)
      …
      Le ✕ était le burger du header ; si le header n'est pas épinglé (bas de page),
      il défilait hors écran alors que le panneau fixed restait affiché. Ajout d'un
      .mm-close position:fixed en haut à droite du panneau et burger masqué à
      l'ouverture.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 2 files +22 −1
    3. Nav mobile v2 : le dropdown 480px devient un panneau plein écran fixed
      …
      Standard KA 2026-08-25 : .mobile-menu passe de position:absolute top:100%
      (max-height 480px) à position:fixed inset:0 — le menu est visible peu importe
      la position de scroll. Liens numérotés font-display, rang du header (marque +
      burger→✕) maintenu au-dessus du panneau.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +26 −15
    4. Phase 3 — enrichissement des 1050+ connecteurs (exigences, séniorité) + refonte du display des offres avec métriques claires
      …
      Backend (enrichissement central via finalize() -> tous les connecteurs) :
      - normalize.py : extract_requirements() (années d'expérience, scolarité,
        langues exigées, FR/EN, bornes de plausibilité), parse_seniority()
        (stage/junior/intermédiaire/senior/direction : titre, libellés ATS,
        années d'expérience), en-têtes d'avantages élargis
      - schema.py : champ seniority + branchement des extracteurs (setdefault,
        jamais d'écrasement des valeurs ATS)
      - db.py : colonne seniority (migration auto) dans insert/update
      - web.py : filtre + facette séniorité, salary_context (médiane/quartiles
        de la catégorie + écart % de l'offre, cache 10 min), employer_jobs,
        median_salary_year dans /api/stats
      - scripts/backfill_enrich.py : backfill exécuté — 23 680 offres scannées,
        16 606 exigences ajoutées (26 % -> 77 %), 10 966 séniorités (0 -> 46 %)
      - tests/test_enrich.py : 27 nouveaux tests (101 au total, tous verts)
      
      Frontend (display + métriques claires) :
      - JobCard : badge Nouveau (≤3 j), salaire avec équivalent annuel, badges
        séniorité/exigences/bilingue, pied fraîcheur · avantages · plateforme
      - Fiche : panneau « En un coup d'œil » (salaire vs marché avec barre
        interquartile P25-P75, expérience, scolarité, langues, fraîcheur, date
        limite), volume d'offres de l'employeur, historique du salaire affiché
      - Accueil : filtre séniorité ; api.ts : types + helpers (compactMoney,
        yearlyEquiv, daysSince)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 11 files +819 −37
    5. Vague E — 3 nouvelles familles ATS (JazzHR, Teamtailor, Zoho Recruit) + 60 connecteurs, ~547 offres QC
      …
      - Nouvelles classes de plateforme : jazzhr.py (liste /apply/ + JSON-LD),
        teamtailor.py (sitemap + JSON-LD), zoho_recruit.py (flux RSS public) —
        filtre QC au détail avec report si budget épuisé (doctrine taleo_tbe/adp).
      - serper_scout.py : 5 nouveaux motifs (jazzhr, teamtailor, zohorecruit,
        talentnest, njoyn avec CLID/CL/hôte) + CLID dans le dédoublonnage.
      - 60 connecteurs : 31 JazzHR (Optel 13, Playground 21, Ultium CAM,
        Altitude Aérospatiale, FortNine, XTL 21, Valnet 22…), 17 Zoho Recruit
        (Mallette Saguenay 26, DRB 22, dentago 20, Carnaval de Québec, FÉRIQUE,
        Altitude Sports, Excavations Lafontaine…), 9 Teamtailor (Norda Stelo 50,
        Workin Group 34, Humanise 13, CAM Mécanique, Synertek…), 3 Njoyn
        (IR-CUSM 37, RTL 17, Groupe Master 17).
      - njoyn.py : correctif _keep — certains habillages mettent la date dans la
        colonne pays (Groupe Master 0 -> 17) ; n'exclure que les pays reconnus.
      - sources.json : 1 108 sources, 23 familles ATS ; docs/connecteurs
        régénérées (1 133 fiches) ; rapport docs/prospection-vagueE.md
        (écartés motivés + reliquats vague F : TalentNest, ENPQ/APCHQ, CUSM).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1,200 files +13,772 −4,752
    6. Vague D implémentée — 75 nouveaux connecteurs (968 -> 1044 employeurs), ~768 offres QC
      …
      - 55 connecteurs générés depuis feeds-vagueD.json (gen_connectors), tous
        synchronisés sans échec (333 offres). Sandvik re-pointé sur le babillard
        public sandvik-jobs.
      - 20 connecteurs manuels sur familles existantes (435 offres) : ADP ×12
        (Nordik, Uniboard, Richelieu, UV Assurance, Strathmore, H2O, Cook It,
        Canadian Royalties, Niobec, Nemaska, Abritek, Triple Boris), Alstom
        SuccessFactors (227 offres, La Pocatière/MTL), Kiewit-Ganotec (50),
        Groupe Bellemare Njoyn (27), Ville de Mirabel, Sel Windsor, Global Excel,
        Graymont TBE, IAMGOLD Taleo.
      - Correctifs de familles : adp.py FORCE_CITY (mono-sites QC sans
        requisitionLocation) ; taleo_tbe.py secours og:title variante
        « - Canada - QC - Ville » (Graymont 0 -> 4) ; successfactors.py slug
        « -queb » final + garde-fou is_quebec_location contre les faux « QC »
        (quality control, 3 offres US interceptées ; Kiewit 3 -> 50).
      - 9 pistes écartées avec raison (babillards US/vides, iCIMS SPA) —
        détail dans docs/prospection-vagueD.md.
      - sources.json : 1 048 sources ; docs/connecteurs régénérées (1 070 fiches).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1,151 files +37,534 −21,599
Menu

Theme