SPB Git

spb/lou-ka

Public

Lou·Ka — tous les logements à louer du Québec, un seul endroit.

History of tests Clear filter
page 1
  1. Tue, Sep 22, 2026 1

    1. Simon-Pierre Boucher · 49 files +27,616 −887
  2. Mon, Sep 21, 2026 1

    1. [ka2] fix connecteur sotramont: erreur franche + retry sur le GET du portfolio — fini le « 0 trouvé ok » silencieux sur hoquet réseau. Les syncs du 2026-09-21 11:42 et 19:07 rapportaient found=0 ok (médiane 8, dérive déclenchée, retraits suspendus → stale) alors que le site est parfaitement sain : les seuls autres zéros de l'historique (2×09-10, 1×09-18, seconds: 0.0) tombent PILE dans les vagues DNS systémiques du nœud — le `except Exception: return listings` de fetch() avalait l'échec transitoire du GET de liste et le transformait en zéro silencieux. Vérifié live : curl 3/3 → 200, 130 Ko ; requests venv 8/8 → 200, 76 cartes ; Apache/Ubuntu direct sur DigitalOcean, aucun WAF ; aucun autre connecteur en échec dans les fenêtres des zéros du 09-21 (pas systémique app). Fix minimal, pattern devimco (edd968e) : le GET du portfolio tente 3 fois (backoff 3/6 s) puis lève une erreur FRANCHE au lieu de retourner [] ; erreur franche aussi si la soupe ne contient AUCUNE carte article.c--article-project (gabarit remanié ≠ vrai zéro — le vrai zéro reste possible : cartes présentes mais toutes « Vendu »/« En construction »). Fixture enregistrée pour la première fois (run.py record sotramont, 8 requêtes). Testé : fetch() venv → 8 annonces (Liveo Pointe-Claire 3 1 620 $, Curtiss Charlie Saint-Laurent 1 460 $, 8-10 photos — médiane 6.0 couverte), pytest sotramont 2 passed, run.py sync sotramont → found=8 ok (8,3 s), pm2 restart lou-ka-sync, site :8095 → 200.
      Simon-Pierre Boucher · 10 files +6,904
  3. Thu, Sep 17, 2026 1

    1. [ka2] fix connecteur halfred: refonte Eversa « Editorial » du site — préfixe de locale /fr + nouveau gabarit de cartes. Le sync du 2026-09-17 (dernier succès 06:46, stale 5,2 h) rapportait found=0 : halfred.ca (plateforme Eversa, cf. gestion_cem 7f020de) a basculé sur des routes préfixées de locale (/listings/list → 301 /fr/listings/list) ET un nouveau gabarit : les cartes sont désormais des <a data-sentry-component="EditorialListingCard"> avec hrefs /fr/listings/…/details (le sélecteur a[href^='/listings/'] ne matchait plus rien), titre en h3 (plus h1), lieu « Secteur · Ville » (plus « Ville (Secteur) »), SpecItem textuels sans icônes lucide, prix « À partir de $1,559 » avec ancien prix .line-through dans un composant line, disponibilité en pill « Disponible le … » ; la fiche détail expose la description via RichTextDisplay (plus de h2 « Description de l'annonce ») et des Walk/Bike Score® en anglais. Fix minimal : LIST_URL → /fr/listings/list, _external_id retire le préfixe de locale (ids historiques préservés, aucune ré-ingestion), _city_sector gère « Secteur · Ville » (ancien format en repli, normalisation Gatineau intacte), _features lit SpecItem/pills/line, _fetch_detail lit RichTextDisplay et les scores bilingues. Testé : fetch() venv → 173 annonces en 133 s (30 Rue De Matapédia Gatineau/Pointe-Gatineau 4½ 1 300 $ promo, 12 fiches détail avec description+contact+scores — médiane 172 couverte), fixtures ré-enregistrées + pytest 2 passed, run.py sync halfred → found=174 ok (added=1, 131 s), pm2 restart lou-ka-sync, site :8095 → 200.
      Simon-Pierre Boucher · 30 files +14,258 −13,180
  4. Wed, Sep 9, 2026 1

    1. [ka2] fix connecteur groupe_theoret: réécriture pour la refonte du site (GoDaddy Website Builder → GoDaddy Airo, ~2026-09-09) — le widget « menu » n'existe plus. Le sync de 15:40 a rapporté found=0 ok=1 (médiane 23, retraits suspendus) : reproduit en live, l'URL accentuée /appartements-%C3%A0-louer redirige 301 vers /appartements-a-louer et la nouvelle page (React Router, 88 Ko) ne contient plus aucun marqueur data-aid MENU_SECTION_*. Le nouveau site embarque TOUT le catalogue dans le payload d'hydratation window.__staticRouterHydrationData (données créées le 2026-09-01, unités ajoutées encore aujourd'hui) : 40 immeubles avec adresse + ville + code postal + slug /proprietes/<slug> + services + photos (/airo-assets/images/<slotKey>, vérifiées 200 image/jpeg) + contact, et par unité DISPONIBLE un id stable, le type, le loyer et la date de dispo ISO. Nouveau fetch() : une seule requête (plus de pages immeuble ni de cache détail), extraction du littéral JS par regex tolérante aux guillemets échappés puis double json.loads, external_id=u<id> (clé BD du site), RuntimeError si le payload est absent ou sans immeuble (une page saine embarque toujours les ~40 immeubles même à 0 dispo — même pattern que c3r/brio). Gain net vs l'ancien site : photos 25/25 (avant 0 %), inclusions 25/25, contact 24/25, code postal systématique. Testé : run.py sync groupe_theoret → found=25 ok (médiane 23, added=25 — nouveaux ids, les 23 anciennes annonces seront dépubliées par les retraits), fixtures ré-enregistrées (record → 1 requête, 25 annonces ; pytest 2 passed), pm2 restart lou-ka-sync, site :8095 → 200. sources.json : listing_url → /appartements-a-louer.
      …
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 16 files +272 −8,625
  5. Fri, Sep 4, 2026 2

  6. Thu, Aug 27, 2026 1

    1. feat(scraping): migration Firecrawl -> Scrapfly des 6 connecteurs a rendu JS
      …
      - base.get_rendered : rendu via Scrapfly (render_js+ASP), wait_ms = ancien
        waitFor Firecrawl, retry x3 sur contenu vide puis echec honnete ;
        FIRECRAWL_API retire du socle
      - aalto/osgoode/brigil/realstar : _rendered delegue au socle (retry centralise)
      - realstar/osgoode/brigil : selecteur li[class*=property-box] — le rendu
        Scrapfly capture le DOM avant que le JS RentCafe ne revele les cartes
        (property-box-hidden), qui sont completes ; filtre QC en aval inchange
      - via_capitale : CARD_SPLIT accepte les hrefs relatifs (serialisation
        Scrapfly) en plus des absolus (fixtures Firecrawl historiques)
      - fixtures record/replay : get_rendered accepte wait_ms (cle de rejeu = URL)
      - fixtures re-enregistrees via Scrapfly : aalto 24, osgoode 4, brigil 12,
        realstar 9 ; rejeu test_connectors 10/10
      - gen_connector_docs : backend get_rendered documente Scrapfly (ex-Firecrawl)
      
      Valide en live : aalto 24, lynk_olymbec 4, via_capitale page 1 = 34 cartes.
      Lou-Ka ne depend plus de FIRECRAWL_API_KEY.
      Simon-Pierre Boucher · 124 files +229,955 −483
  7. Fri, Aug 21, 2026 1

    1. quality: porte de pertinence — quarantaine des stationnements, garages, locaux commerciaux et locations à la nuit
      …
      Certaines sources mêlent aux logements des cases de stationnement (~200 $),
      garages/entreposage, locaux commerciaux/bureaux, objets divers et tarifs à la
      nuit. relevance_reason() les détecte (titre + description + seuils de prix,
      sans faux positif sur les logements « avec stationnement inclus ») et evaluate()
      les met en quarantaine (published=0). Backfill appliqué : 78 annonces retirées.
      
      Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +102
  8. Tue, Aug 18, 2026 3

    1. KA Scores — suite géographique maison (Walk/Transit/Bike/Calme/Services)
      …
      · environment.py : inventaire OSM par tuile (Overpass) — routes majeures,
        rails, aéroports, zones industrielles, bars, pistes cyclables (géométrie
        densifiée) et TOUS les POI par catégorie ; cache env_tiles ~3 mois.
      · kascores.py : 5 scores 0-100 par immeuble + global pondéré, barème
        versionné (2026.08-v1), détails honnêtes par score, « Données
        insuffisantes »/« Non desservi » plutôt que des 0 trompeurs ; Transit =
        proximité des arrêts × percentile PMD StatCan ; calcul incrémental
        (7 900 immeubles en ~8 s), distribution de calibration en sortie.
      · API : ks_* joints à /api/listings et /api/search (tri « ka », filtre
        kascore_min), détail complet sur la fiche, /api/kascores/stats.
      · Frontend : pastille KA sur les cartes d annonces, section KA Scores de
        la fiche (5 jauges + détail dépliable + date/version), page /ka-scores
        (méthodologie publique + pondérations personnelles en curseurs), tri
        « Meilleur KA Score » dans la vue carte, filtre « KA Score minimal ».
      · Boucle watch : env (4 tuiles max) + kascores incrémental à chaque sync.
      · Tests : test_kascores.py (barème, honnêteté, rendement décroissant,
        cohérence spatiale sur le parc réel).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 2 files +231
    2. Recherche synchronisée liste ↔ carte (une seule vérité partagée)
      …
      · /api/search : une réponse = page de liste + tous les points carte,
        même tri — compteur liste = marqueurs par construction ; bbox, polygone
        dessiné, tris (prix/récent/affaires), include=liste, annonces sans
        position comptées honnêtement.
      · MapSearch.tsx : état unique filtres+zone+tri+page, miroirs survol/clic
        < 100 ms dans les deux sens, page ajustée au clic marqueur + pulsation,
        « Rechercher quand je déplace la carte », « Rechercher dans cette zone »,
        recadrage animé respectant l intention (byUser), « Recadrer sur les
        résultats », zone dessinée en puce retirable + URL, carrousel mobile
        synchronisé aux marqueurs, états vides propres, URL complète partageable.
      · Géolocalisation d accueil : arrivée sur le site → demande de position →
        vue carte centrée sur l utilisateur (une fois par session, lien partagé
        respecté, refus silencieux).
      · Marqueurs « déjà vu » atténués (localStorage), fourchette de prix des
        clusters au survol, spiderfy discret des unités d un même immeuble.
      · Tests : scripts/test-sync.mjs (25 vérifications E2E Playwright, critères
        1-9), tests/test_search.py (9 tests API).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 1 file +87
    3. Qualité des données + solidité mobile + framework de juste valeur (fair value)
      …
      Mission 1 — enrichissement des connecteurs et qualité :
      - quality.py : score de complétude 0-100 + seuil de publication (quarantaine
        des annonces sans prix plausible / localisation / contenu exploitable)
      - imgcheck.py : audit des images (liens morts 404/410, minuscules, placeholders
        multi-adresses, doublons) -> galeries nettoyées images_ok, cache image_checks,
        politesse 3 requêtes/hôte, écriture hors transaction réseau
      - 26 connecteurs enrichis (galeries complètes, descriptions, prix, adresses) :
        kangalou, royal_lepage, medway, remax_quebec, groupe_maurice, mellem, sutton,
        lespac, heafey, kijiji, fb_marketplace, zumper, equinoxe_batimo, logis_experts,
        quartier_sila, msi, summum, quartier_plus, urban_services, cosoltec, garic,
        lakle, matinale, huma, jutras, groupe_theoret, ferrovia
      - normalize : clean_city/clean_sector (rues et entités HTML retirées des menus),
        kijiji : adresses françaises « 89, rue X » correctement découpées
      - geocode : virgule après le n° civique corrigée (lot AQ), base en WAL
      - dedup : une annonce en quarantaine ne masque jamais un doublon publié
      
      Mission 2 — mobile :
      - /api/img : miniatures WebP servies à la taille de l écran (cache disque)
      - SmartImg : miniature -> original -> visuel de secours Lou-Ka (jamais d icône cassée)
      - lightbox tactile : balayage scroll-snap + pincement + double-tape
      - bannière témoins : ne recouvre plus le bouton Filtres (--consent-h)
      - cibles tactiles >= 44 px (pointer: coarse) ; KA Agent plein écran à l ouverture
      - stats : complétude moyenne, quarantaine par source
      
      Mission 3 — juste valeur locative (fairvalue.py, fv-logement-1.0) :
      - 3 niveaux : segments médians (repli en échelle) + coefficients de
        caractéristiques appris et centrés + comparables kNN géographiques (médiane
        pondérée) ; couloir de sécurité, fourchette, indice de confiance
      - prudence : pas de verdict si confiance faible, prix « à partir de »,
        prix non mensuel, écart hors plausible ; chambres/coloc = segment dédié
      - pastilles sous/dans/au-dessus du marché (cartes + fiche), bloc Analyse de
        prix avec histogramme, filtre « Sous le marché » + tri, page /juste-valeur
      - API : champs fv_* + deal/sort, /api/fairvalue/{uid} ; stats + PDF ;
        historisation fv_segments ; tests synthétiques ; docs/FAIRVALUE*.md
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 20 files +1,522 −1,664
  9. Sun, Aug 9, 2026 10

    1. Expansion P3 — Estrie (6 connecteurs +24 annonces, 17 non-connectables)
      …
      terater (12) · alexcellence (4e Houzez, sous-classe Dynamic) · oxford ·
      immeubles_pm (plogg vivant) · majestic (Granby) · lequerre (OBNL).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 49 files +53,323
    2. Expansion P3 — Est & Nord + Chaudière-Appalaches (7 connecteurs +98 annonces, 9 non-connectables)
      …
      quartier_plus (Thetford, 59) · immeubles_bois (Rimouski, catalogue 23) ·
      louer_saguenay · luxuor · beaulieu_groupe · gestion_jdm · alias_appartements.
      LM Gestion et Alexandre Pelletier re-vérifiés (sites toujours morts).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 32 files +28,807
    3. Expansion P3 — Mauricie/CdQ/Lanaudière (6 connecteurs +53 annonces, 8 non-connectables)
      …
      moderno · acceslogis_gb · ferrovia (23, prix non publiés) · habitations_sf ·
      lambert · fournelle. Non-connectables documentés (parcs pleins, vitrines
      sans unités, renvois Facebook).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 33 files +41,782
    4. Expansion P3 — Outaouais (5 connecteurs +41 annonces, 10 non-connectables)
      …
      wandji (API /api/buildings découverte, 29) · gio (crawl-delay 3 respecté) ·
      immnasr · quanta · leviu (portail Magex). Registre fusionné.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 20 files +9,687
    5. Expansion P2 — Estrie (15 connecteurs, +279 annonces)
      …
      Famille Houzez factorisée (dynamic -> gestimmo_estrie, agence_sherbrooke) ·
      uptimo (51) · dynamic (49) · matinale (42, Crawl-Delay 20 respecté) ·
      gestimmo (41) · montagnais (6 campus étudiants) · floria (Livya) + 8 autres.
      6 non-connectables documentés (plateforme plogg morte, vitrines sans prix).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 304 files +429,316
    6. Expansion P2 — Outaouais (10 connecteurs, +136 annonces)
      …
      garic (admin-ajax JSON avec GPS, 47) · aalto (RentCafe/Zibi via Firecrawl,
      28) · desmarais (14) · souleymane (13) · elite (12) · lacite (crawl-delay 10
      respecté, prix non publiés) + 4 autres. Aucune exclusion nécessaire.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 130 files +89,737
    7. Expansion P2 — Est & Nord (19 connecteurs, +633 annonces)
      …
      medway (494 — Lévis 343, Québec 81, La Malbaie, Pont-Rouge, Rivière-du-Loup) ·
      immeubles_aeb (26, Saguenay) · location_saguenay (21, crawl-delay 10 respecté) ·
      appartements_rimouski (17, GPS permutés corrigés) · habitations_jeanne (14,
      Baie-Comeau) · stb_immobilier (11, correctif : Matane pas Lévis) ·
      immeubles_dcl (9, API FleetCart) + 12 autres. Non-connectables documentés :
      habitat_honguedo (Gaspé, vide depuis 2020), immofidelite (RPA hors périmètre).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 201 files +251,215
    8. Expansion P2 — Mauricie/Centre-du-Québec/Lanaudière (17 connecteurs, +423 annonces)
      …
      evoludev (Laravel+JSON-LD, 125) · groupe_robin (admin-ajax, 65) · cosoltec
      (Planpoint x3 vitrines, 51) · info_logement (45) · jutras (35) · gestion_isr
      (API Supabase découverte, 21) + 11 autres. 3 non-connectables documentés
      (nicolyn, gestion_traversy, proplex).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 211 files +321,481
    9. Expansion P2 — Chaudière-Appalaches (le_baronet, girs, +11 annonces)
      …
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 29 files +24,366
    10. Expansion provinciale P1 : 26 nouveaux connecteurs + 8 extensions (+1 358 annonces)
      …
      Lot 0 extensions : girescom +Beauce, msi +Thetford, utile +Trois-Rivières/
      Rimouski, cogir/realstar/centurion/plan_a +Gatineau/Sherbrooke.
      Lot 1 plateformes maîtrisées : thrace (Livya, 181), lr_gestion (Rentsync),
      urban_services + immobilia (Building Stack).
      Lot 2 Est & Nord : immeubles_bc (Rimouski), tri_logis (Rouyn), devcore
      (Sept-Îles/Outaouais), multi_logis (Côte-Nord+Lévis), courtemanche (Saguenay).
      Lot 3 Estrie : lachance (82), gesteco (API Umbraco), savouet, laureat_richard,
      desroches. Lot 4 Mauricie/CdQ : location_di, cap_gestion (122), capital_rdr,
      gestion_tb, summum (93). Lot 5 Outaouais/Ch-App : halfred (165), heafey (245),
      brigil (Firecrawl), mellem, quartier_oree, le_st_georges, place_florimay.
      
      Enrichissement complet appliqué : géocodage provincial (+616), POI 1 756
      immeubles, quartier 1 088 annonces jointes (0 hors-zone), normalize corrigé
      (frontières de mots des mois). Registre : 114 sources, 108 connecteurs,
      ~7 350 annonces. Secrets tiers caviardés des fixtures (jetons Mapbox +
      caviardage automatique à l'enregistrement).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher · 836 files +731,391 −499
  10. Sat, Aug 8, 2026 10

    1. Text mining des descriptions : nettoyage, extraction, sections, En bref
      …
      louka/textmine.py (déterministe, ~1 ms/annonce, aucune dépendance) :
      - A nettoyage : TITRES EN MAJUSCULES -> sections, doublons (« Disponible
        disponible »), phrases collées, typographie québécoise (insécables $/%)
      - B extraction : bail minimum, occupants (« 11 chambreurs »), sdb/cuisine
        commune-privée, électros, dépôt, ~40 quartiers (réutilise normalize.py)
      - C sections jamais reformulées ; « En bref » par gabarit strict à partir
        des faits haute-confiance seulement (aucune invention)
      - D confiance par fait, incohérences (quartier mentionné ≠ secteur),
        complétude 0-100 — 25 tests dont un test d'or sur le 2435 boul. Laurier
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1 file +357
    2. Sécurité : caviardage des clés API tierces dans les fixtures de test
      …
      Les pages HTML archivées des sites sources contenaient leurs clés Google Maps
      (publiques par nature côté client, mais republiées inutilement sur GitHub).
      Toutes caviardées ; l'enregistreur les caviarde désormais automatiquement.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1,329 files +1,598 −1,598
    3. Mission 3 (suite) — 13 nouveaux connecteurs Québec/Lévis (+747 annonces)
      …
      somex_saintnicolas (145) · quartier_sila (200) · edifia (184 : Le Vital,
      Capella, Cardinal N/S) · aula (69) · girescom (38) · mercini (35) ·
      quartier_mosaique (24) · la_cour (20) · louis14 (18, prix réels via widget
      Livya jamais affichés sur leur site) · immeubles_guillot (7) · sig (4
      résidences étudiantes UL) · promenade_des_forts (2) · centurion (Quartier QB,
      684 unités — 'No Vacancy' actuellement, se peuplera automatiquement).
      
      Découverte transverse : 4 sites (Somex, Sila, Louis XIV, Le Vital) utilisent
      le module Livya (ex-RealVuu) dont le flux RSC Next.js rendu serveur expose
      l'inventaire JSON complet. La Cour + AULA partagent le parseur do-selecteur
      (REST wp-json), déjà éprouvé chez Immostar.
      
      Registre : 88 sources, 82 connecteurs. 191 tests verts.
      Couverture GPS : 95,6 % global · 97,5 % des annonces avec adresse.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 219 files +160,977
    4. Mission 1b (lot 8) — logisbourg, logisco, logisma, lokalia, lynk_olymbec
      …
      - lokalia : +12 annonces (variantes « + DEN » dédupliquées à tort), GPS 100 %
      - logisco : adresse complète JSON-LD, superficie/étage structurés, 4 sections
        de commodités, pages unité en cache
      - lynk_olymbec : valeurs semi-inventées supprimées, prix/dispo réels RentCafe
      - normalize.py : non-chauffé avec trait d'union, branchements combinés,
        « refusés sauf un chat » -> conditions, « (sans utilisation) » neutralisé,
        fourchettes « de X $ à Y $ » = prix plancher
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 299 files +502,704
    5. Mission 1b (lot 5) — gestipro, gimcote, gparadis, groupe_dallaire, hazelview
      …
      - groupe_dallaire : superficie 49 % -> 100 %, inclusions réelles par unité,
        fiches en cache (180 requêtes/sync évitées)
      - gestipro : GPS 100 %, animaux 92 %, inclusions depuis « Frais et charge »
      - gimcote : description/animaux/meublé 100 %, GPS 100 %
      - gparadis : +1 immeuble Saint-Roch (regex pluriels)
      - normalize.py : « à la charge des locataires » -> non inclus,
        « actuellement vacant » -> disponible maintenant
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 378 files +569,572
    6. Mission 1b (lot 6) — headway, huma, immomarketing, immostar, interrent
      …
      - interrent : bug amenities (champ inexistant) corrigé, animaux 0 -> 203
      - immostar : commodités 0 -> 100 % sur les 6 micro-sites, superficie 100 %
      - huma : dates de dispo réelles par unité, adresses et GPS par phase
      - immomarketing : GPS 100 %, cache detail, animaux 53/82
      - normalize.py : animal au singulier, promos neutralisées, prix stationnement
        complet (formats 150 $ et $85)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 306 files +386,472
    7. Mission 1b (lots 4,7,9-13) + mission 2 — 37 connecteurs mis à niveau, Logis-Experts activé
      …
      Nouveau connecteur logis_experts (logis-experts.com, API JSON) : 516 annonces,
      188 immeubles, prix/adresse/code postal/secteur/lat-lng à 100 %, superficie et
      commodités via pages détail en cache.
      
      Faits saillants de l'audit :
      - lakle : +20 unités (phases 2-3 ignorées), superficie terrasse->habitable
      - dma_locago : +11 unités Tour Frontenac, correction des disponibilités
      - equinoxe_batimo : adresses 0 % -> 100 % (602 annonces)
      - sgiq : lat/lng 88 %, animaux 100 %, sync 83 s -> 4 s
      - msi/picard/progim/capreit… : pages détail migrées vers le cache BD
      - utile : statut hero corrigé (2 annonces faussement « Complet »)
      - per : « Animaux permis : Non » inversé corrigé
      
      normalize.py : ~20 nouveaux cas génériques remontés par les agents (dates
      anglaises mois-jour, animaux singulier/poids/interdits, aires communes,
      piscine/stationnement « chauffé », balcon négatif, vélo, « ($) », semi-meublé,
      superficies balcon/terrasse ignorées, milliers avec virgule, hydro/heat/terrace
      anglais, nombres en toutes lettres) — chaque cas couvert par un test.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 1,338 files +1,400,896 −2,158
    8. Mission 1b (lot 1) — akelius, app_urbains, axia, beaudoin, boardwalk, bribourg
      …
      - akelius : JSON détail découvert (pets 221/247, meublé, inclusions, photos HD)
      - boardwalk : superficie 100 %, dispo réelle, sync 210 s -> 54 s (cache detail)
      - beaudoin : commodités 100 % (additional_features), superficie 67 %
      - app_urbains : superficie 100 %, adresse Le Charlie corrigée
      - normalize.py : « chiens et chats acceptés » -> oui (priorité sur conditions)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 227 files +329,569
    9. Mission 1b (lots 2-3) — audit et mise à niveau de 10 connecteurs + correctifs normalisation
      …
      Connecteurs : brio, brivia_1sp, brochu, capreit, cogir, contraste, copley,
      cromwell, denux, devimco — fixtures + tests + rapports d'audit.
      
      Faits saillants :
      - cogir : collision d'uid corrigée (283 annonces au lieu de 270), annonces
        fantômes « liste d'attente » exclues
      - capreit : lat/lng 100 %, fiches derrière cache detail (sync 75 s -> 0,4 s)
      - devimco : adresses 84 % -> 100 %, superficie structurée
      - contraste : commodités 0 % -> 100 %, faux « 0 $/mois » supprimés
      - brivia_1sp : API AJAX des plans découverte (dispo réelle, superficies)
      
      normalize.py : négations chauffage/éclairage, « chiens non permis » -> pets
      conditions, options payantes neutralisées (optionnel/en sus), stationnement
      mixte int+ext, étage restreint aux commodités, refrigerator/cooling anglais.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 339 files +574,113
    10. Mission 1a — couche commune : schéma enrichi, normalisation centrale, robustesse, tests
      …
      - schema.Listing : availability_date (ISO/now), area_sqft, pets, furnished,
        details (JSON structuré) + finalize() appliqué à toutes les sources
      - normalize.py : dates FR/EN → ISO, superficies pi²/m², prix robuste,
        types d'unité (chambres→½, 6½+, MDV…), commodités → tags canoniques,
        stationnement/animaux/fumeur/contact extraits du texte
      - db.py : migration auto, délai de grâce (2 syncs) avant désactivation,
        détection de dérive (volume + taux de prix null) avec retraits suspendus,
        cache des pages détail, cache de géocodage (préparé pour la carte)
      - fixtures.py + run.py record : enregistrement/rejeu des réponses HTTP,
        tests de régression pytest par connecteur (snapshot + validité schéma)
      - web.py : nouveaux filtres pets/furnished/available_by/area_min
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      simon-pierre boucher · 60 files +165,077
Menu

Theme