SPB Git forge

spb/api-ka

Public

API-KA — plateforme centrale : collecte quotidienne des 8 services KA, historisation append-only et API publique sur www.api-ka.com

48commits 1branches 0releases
5.9 MBsize
maindefault branch
19 days agolast push
Python 60.9% HTML 21% TypeScript 7.3% JavaScript 5.2% CSS 4.8% Shell 0.8%

page 1

  1. Fri, Sep 4, 2026 2

    1. Simon-Pierre Boucher committed 19 days ago · 2 files +8 −3
  2. Fri, Aug 28, 2026 2

    1. docs: README ultra détaillé + visite guidée en 10 captures
      - README v4 : 11 services (house-ka, rent-ka), KA Agent 34 outils,
        chiffres live 2026-08-28, ~4 460 connecteurs supervisés, section
        authentification (KA ID / kapi_) et rôle central dans l ecosysteme.
      - docs/screenshots/ : 10 captures JPG du 2026-08-28 (accueil desktop
        + 3 sections + mobile, /contact, /stats, /docs Swagger, /doc x2).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 26 days ago · 11 files +81 −40
    2. feat(monitoring+data): houseka et rentka deviennent les 10e et 11e services KA
      - SERVICES += houseka, rentka : houseka avait deja son collecteur/modele/env
        (commit eb543c9) mais restait hors de la boucle de supervision et des
        routes ; rentka est integre de bout en bout (RentkaData, rentka_collector
        offset/2000 comme lou-ka, RENTKA_SOURCE_URL dans .env -> M4M36:8125,
        cadence attendue 1 h).
      - connector_health poll desormais les 11 apps (houseka 17 sources,
        rentka ~680 sources au premier run).
      - Docstrings 9 -> 11 services.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 27 days ago · 7 files +43 −8
  3. Thu, Aug 27, 2026 1

    1. feat(house-ka): 10e service supervise + agent + CORS
      - collecteur houseka (table houseka_data, HOUSEKA_SOURCE_URL M4M64b:8098)
      - supervision connector_health : cadence 4 h
      - KA Agent : catalogue de sites, DETAIL_URLS/FICHE_URLS (/property), recherche
        transversale (maisons Canada hors Quebec)
      - CORS : house-ka.com
      Simon-Pierre Boucher committed 27 days ago · 7 files +39 −1
  4. Tue, Aug 25, 2026 9

    1. web: boutons primaires lisibles — fond accent au lieu du fond encre
      Le .btn-primary du socle v1 (fond encre + texte accent) était illisible
      avec l accent indigo. Passage en fond accent / texte blanc pour
      .btn-primary et .send (playground), hover accent-deep.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 29 days ago · 2 files +10
    2. frontend: refonte éditoriale v2 (typo géante, brush, live-line, filets)
      Aligne les pages web (accueil, stats, contact) sur la nouvelle DA
      lou-ka/vrai-prix : héro typographique, .hl convertis en soulignés
      brush SVG indigo, live-line mono + filets à la place des stat-chips,
      grilles magazine en hairlines au lieu des cartes à ombres dures,
      KPI/records à filet, tableaux à en-tête éditorial. Terminal santé
      borné (max-height + scroll) et fix min-content de la grille héro.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 29 days ago · 3 files +112 −5
    3. Simon-Pierre Boucher committed 29 days ago · 8 files +14 −7
    4. Nav mobile v2 : hamburger + panneau plein écran fixed sur les pages web
      Standard KA 2026-08-25 : la .topnav wrappait en pleine largeur sous 1023px ;
      elle est remplacée par un hamburger 44px + panneau position:fixed inset:0
      (z-modal) — menu visible peu importe la position de scroll, verrou de scroll,
      fermeture lien/✕/Escape. Liens du panneau générés depuis la topnav de chaque
      page (aria-current conservé).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 3 files +229 −3
  5. Mon, Aug 24, 2026 6

    1. Simon-Pierre Boucher committed 1 mo ago · 2 files +20
    2. feat(monitoring): statut retired — retrait des sources désactivées ou disparues
      Le registre connector_health est persisté et jamais purgé : une source
      désactivée côté app (ex. stores fabri-ka enabled=0) restait broken/stale à
      perpétuité et les agents gardiens la missionnaient sans fin (2026-08-24 :
      37 missions ka6 sur origin-north.ai). Désormais :
      - nouvelle colonne last_seen (dernière apparition dans une fenêtre de sync,
        ALTER TABLE appliqué en prod + backfill sur checked_at) ;
      - statut retired si la source est déclarée désactivée par l app
        (disabled_stores/disabled_sources du /api/stats — 58 sources fabri-ka
        retirées au premier run) ou absente de tout journal depuis > 14 j ;
      - une source retired qui réapparaît dans le journal est réévaluée
        normalement (last_seen remis à jour, statut recalculé) ;
      - retired exposé dans les résumés (monitoring, /health) et le détail
        (last_seen ajouté), jamais alerté, ignoré par les gardiens (trigger
        broken/stale inchangé).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 4 files +69 −10
    3. Simon-Pierre Boucher committed 1 mo ago · 1 file +134 −55
    4. Simon-Pierre Boucher committed 1 mo ago · 1 file +98 −38
    5. feat(doc): page documentation /doc (guide + captures) + lien footer + PDF téléchargeable
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 7 files +158
    6. Simon-Pierre Boucher committed 1 mo ago · 3 files +86 −98
  6. Sun, Aug 23, 2026 8

    1. Authentification obligatoire sur l API produit (KA ID ou jeton personnel)
      - middleware KaAuthMiddleware: /api/v1/* exige session KA ID (cookie) OU Authorization: Bearer kapi_… ;
        jeton vérifié au hub via /api/sso/token-verify (HMAC secret SSO), cache 5 min (négatif 60 s)
      - exemptions: /api/v1/monitoring/* (gardiens), /api/v1/louka/fairvalue/* (app iOS), OPTIONS ;
        /api/stats/*, /api/agent/chat, /health restent publics
      - docs: carte Authentification (jeton sur groupe-ka.com/compte), code 401, playground avec jeton
        optionnel (localStorage apika_token)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 3 files +143 −5
    2. Simon-Pierre Boucher committed 1 mo ago · 3 files +696 −9
    3. SEO : robots.txt + sitemap.xml + canonical/hreflang/JSON-LD sur le site de doc
      - src/api/main.py : routes /robots.txt (Disallow /api/, /docs) et
        /sitemap.xml (/, /contact, /stats)
      - web/{index,contact,stats}.html : canonical, hreflang fr-ca, og:site_name,
        og:locale, JSON-LD WebSite + Organization + BreadcrumbList
      - la negociation de contenu existante est conservee : les clients API
        recoivent toujours le statut JSON a la racine
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 4 files +50 −1
    4. monitoring: marge d une rotation sur le seuil stale par source
      Sans marge, les sources en bord de cycle oscillent entre ok et stale
      (jobka/lassonde à 2,3 h pour un seuil de 2 h ; fabrika en bord de rotation
      de ~11 h pour un seuil de 24 h).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +6 −1
    5. monitoring: sources vides légitimes ≠ pannes + stale seulement si la dernière synchro observée est malsaine
      Revue du parc 2026-08-23 : les « brisés » niddamour, courtemanche,
      place_florimay, atlas_immo étaient des sources sans inventaire en ligne
      (vérifiées à la main) qui synchronisaient ok à 0 résultat.
      
      - un 0 résultat n est suspect que si la médiane historique de la source
        est ≥ 1 ; sinon c est un vide légitime (streak remis à zéro)
      - une source dont la dernière synchro observée est saine n est plus
        marquée stale même si son dernier succès avec résultats est ancien
      - tests mis à jour + 2 nouveaux cas (53 verts)
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 2 files +51 −4
    6. monitoring: fenêtre de sync élargie (?syncs_since_h=6) pour la santé des connecteurs
      Les apps sœurs n exposent par défaut que ~20 entrées de sync_log (~11 min
      d activité pour lou-ka et ses ~200 sources) alors que le poll est bi-horaire :
      la quasi-totalité des sources n était jamais observée, d où 195 fausses
      alertes stale le 2026-08-22 (82 sources lou-ka pourtant en pleine forme).
      Le poller demande désormais une fenêtre de 6 h ; les apps qui ignorent le
      paramètre gardent le comportement historique.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +10 −1
    7. api: HEAD / accepté, endpoint compact GET /api/stats, KPI erreurs sans le bruit des scanners
      - main.py : la route racine accepte HEAD (les moniteurs recevaient 405, 633 fois/7 j)
      - routes/stats.py : nouveau GET /api/stats (résumé léger, contrat commun KA) —
        les moniteurs qui l appelaient recevaient 404 (1752 fois/7 j)
      - routes/stats.py : les endpoints bruit (autre) / api/v1/(autre) — scans de bots —
        sont exclus des métriques du tableau de bord (ils restent journalisés)
      - reqstats.py : familles /api/auth|agent|ios|monitoring repliées sous <préfixe>/*
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 3 files +68 −1
  7. Sat, Aug 22, 2026 2

    1. topbar opaque + z-index token + hauteur 64px (standard header/menu KA 2026-08-22)
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +3 −3
  8. Wed, Aug 19, 2026 2

    1. Mobile : champs du playground et dates stats ≥16 px (anti-zoom iOS), socle mobile tokens.css, ka-agent corrigé
      - src/api/web/index.html : media query ≤767 px — .field select/.field input du
        playground passés de 13 px à 16 px (le focus d un champ <16 px déclenche un
        zoom de page sur Safari iOS).
      - src/api/web/stats.html : .input (dates #d-from/#d-to et recherche du tableau)
        à 16 px sous 768 px.
      - src/api/web/contact.html : aucun champ — rien à corriger.
      - src/api/web/ka/tokens.css : socle mobile obligatoire (échelle z-index --z-*,
        --vh100 dvh, .ka-bottombar, .ka-scroll-lock, .ka-menu/.ka-overlay, filet
        anti-zoom iOS global, zone tactile étendue du gk-badge).
      - src/api/web/ka-agent.js : safe-areas bulle/panneau, textarea 16 px, plein
        écran auto ≤640 px + verrou kaa-lock, pas de focus clavier forcé.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 4 files +116 −7
  9. Tue, Aug 18, 2026 5

    1. Endpoint /api/v1/louka/fairvalue/{uid} : juste valeur Lou-Ka en direct (proxy)
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +24
    2. feat: intégration de job-ka (9e service KA) — collecteur + supervision
      - Collecteur JobkaCollector (src/collectors/jobka_collector.py) : GET /api/jobs
        de job-ka (M3U96a:8096), pagination limit/offset (clé jobs, total annoncé),
        table jobka_data — pipeline standard fetch → checksum → dédup → backup pg_dump
        → collection_runs. One-shot validé : 7 953 offres actives collectées.
      - Config : jobka ajouté aux SERVICES (9) + JOBKA_SOURCE_URL (.env/.env.example).
        Il hérite automatiquement du run quotidien 02:00, du backfill, du backup 03:30
        et des endpoints /api/v1/jobka{,/latest,/date/…,/stats}.
      - Supervision : jobka dans connector_health (cadence attendue 1 h, recent_syncs
        par source + facteur de rotation — 200+ sources pour une fenêtre de 20) ;
        visible dans /api/v1/monitoring/connectors (19 sources + _app, tout ok).
      - Stats : libellé Job·Ka ; page /stats à 9 services.
      - Tests : 3 tests jobka (pipeline, pagination offset, registre) + compteurs
        8→9 — suite complète 51 passed.
      
      Rien à changer côté CORS (job-ka.com déjà dans les origines) ni côté agent KA
      (chercher_emplois pointe déjà sur www.job-ka.com/api/jobs).
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 13 files +148 −16
    3. Auth mobile : accepter aud ka-android (même secret partagé que ka-ios)
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 1 file +2 −1
    4. feat: supervision centralisée des connecteurs de l'écosystème KA
      - table connector_health (une ligne par service/source, upsert) + job
        src/monitoring/connector_health.py toutes les 2 h dans apika-scheduler
        (lecture seule des GET /api/stats des 8 apps sœurs, timeout 5 s,
        échec d'une app sans impact sur le job)
      - classement : broken (≥3 échecs ou 0 résultat ×3), stale (>2× cadence,
        facteur de rotation au niveau source), degraded (<50 % de la médiane),
        ok — cadences par service (lou-ka 1 h … resto-ka 168 h)
      - alertes logs/alerts.log uniquement sur transition vers broken/stale
        (anti-spam via l'état précédent mémorisé en table)
      - endpoints publics GET /api/v1/monitoring/connectors(/{service}) +
        bloc connectors dans /health
      - 15 tests (classement, parsing, anti-spam, endpoints) — suite 48/48
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 8 files +1,090 −4
    5. fix: pg_dump en chemin absolu (cron 03:30) + isolation des logs sous pytest
      - backup.py : PG_DUMP = shutil.which ou /opt/homebrew/bin/pg_dump — le cron
        de 03:30 (PATH minimal /usr/bin:/bin) échouait en [Errno 2] depuis le 17/08,
        backups ET purge 90 j jamais exécutés. Testé : 8/8 dumps + purge OK sous
        env cron simulé.
      - tests/conftest.py : fixture session isolated_logs_dir — redirige logs_dir
        (alerts.log/apika.log) vers le tmp de test ; pytest écrivait de fausses
        alertes [louka] 2026-08-03 dans le vrai logs/alerts.log de prod.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 2 files +28 −1
  10. Mon, Aug 17, 2026 3

    1. Simon-Pierre Boucher committed 1 mo ago · 2 files +105 −40
    2. Simon-Pierre Boucher committed 1 mo ago · 2 files +94 −1
    3. Câblage du widget KA Agent (bulle de chat IA Groupe KA)
      - Route GET /ka-agent.js (FileResponse, comme /og.png) dans src/api/main.py.
      - Balises window.KA_AGENT={site:"api-ka"} + /ka-agent.js (defer) dans
        index.html, contact.html et stats.html.
      - pytest : 33 passés.
      
      Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
      Simon-Pierre Boucher committed 1 mo ago · 5 files +245