API-KA — plateforme centrale : collecte quotidienne des 8 services KA, historisation append-only et API publique sur www.api-ka.com
-
Tue, Aug 25, 2026 2
-
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>
-
Mon, Aug 24, 2026 6
-
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>
-
feat(doc): page documentation /doc (guide + captures) + lien footer + PDF téléchargeable
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Sun, Aug 23, 2026 8
-
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>
-
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> -
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>
-
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>
-
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>
-
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>
-
-
Sat, Aug 22, 2026 2
-
topbar opaque + z-index token + hauteur 64px (standard header/menu KA 2026-08-22)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
-
Wed, Aug 19, 2026 2
-
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>
-
Tue, Aug 18, 2026 5
-
Endpoint /api/v1/louka/fairvalue/{uid} : juste valeur Lou-Ka en direct (proxy)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
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> -
Auth mobile : accepter aud ka-android (même secret partagé que ka-ios)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
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> -
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>
-
-
Mon, Aug 17, 2026 11
-
KA ID iOS : POST /api/ios/auth/exchange (vérification HS256 du ka_token aud=ka-ios + profil hub signé) pour l app native KA
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
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> -
KA AGENT — assistant IA central de l écosystème (Claude Haiku 4.5) : POST /api/agent/chat en SSE, boucle d outils (12 outils sur les API publiques des plateformes : recherche logements/propriétés/véhicules/emplois/épicerie/produits/restos/sorties/créateurs/web QC, stats live, état des services, infos écosystème), prompt par site, cache système, CORS 13 domaines
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Rapport écosystème : nombre de plateformes dynamique (Job-Ka et suivants inclus automatiquement)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Footer/contact : Job-Ka rejoint l écosystème (ecosystem.json 13 sites)
…
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Rapport écosystème complet : GET /api/stats/ecosystem-report (PDF consolidé des 12 plateformes)
…
- src/api/ecopdf.py : EcosystemReport compose le moteur kapdf (couverture Groupe KA boîte encre + lime, page de consolidation avec totaux et classement des plateformes, une section par plateforme avec pastille accent + wordmark + KPI + records, page de fin) ; plateforme injoignable = section « données indisponibles » propre, jamais d'échec global. - /api/stats/ecosystem-report?period=…&mode=complet|synthese : dashboards des plateformes sœurs récupérés en parallèle (httpx, délai 15 s), le sien calculé en local ; cache 10 min par (period, mode) ; filename groupe-ka_ecosysteme_stats_<periode>_<date>.pdf. - kapdf._kpis : titre de section paramétrable (extension rétrocompatible). - reqstats : /api/stats/ecosystem-report ajouté aux chemins connus. - tests : test_ecosystem_pdf_builder (complet + synthese, hors-ligne). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Page /stats : tableau de bord analytique de la plateforme + rapport PDF Groupe-KA
…
- Journalisation légère des requêtes API : table api_requests (ts, méthode, endpoint normalisé, statut, durée) alimentée par le middleware de logging via un tampon mémoire non bloquant + tâche de fond (flush 5 s, purge 90 j). - Backfill : scripts/backfill_api_requests.py réimporte l historique réel des logs JSON (811 requêtes depuis le 2026-08-16), idempotent. - GET /api/stats/dashboard : contrat commun Groupe KA (SPEC.md) — KPI avec deltas, séries jour/heure (appels, latence, enregistrements collectés), top endpoints, anneau par service, heatmap, tableaux, records ; cache 5 min. - GET /api/stats/report : PDF Groupe-KA (moteur kapdf/fpdf2, wordmark API·Ka, accent #3b5bdb), modes complet et synthèse ; correctif kit : pied de page qui fuyait sur la couverture. - Page /stats (vanilla JS + SVG, langage visuel du kit kacharts) : chips de période + plage personnalisée, KPI, courbes avec infobulle et légende cliquable, barres, anneau, heatmap, tableaux triables (recherche + pagination), records, boutons PDF, états vides propres, mobile 360-1440. - Lien « Stats » dans la nav de index.html et contact.html ; fpdf2 ajouté aux requirements ; tests /api/stats (32 tests verts). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Ajoute les assets de partage Groupe KA servis à la racine (og.png, favicon.svg, apple-touch-icon)
…
- Trois routes FastAPI FileResponse : /og.png, /favicon.svg, /apple-touch-icon.png (fichiers dans src/api/web/) - index.html et contact.html : nouveau favicon SVG, apple-touch-icon, meta og:title/og:description/og:url/og:image 1200×630 + twitter:card/twitter:image Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
Design Groupe KA « éditorial sharp » + SSO KA ID
…
· Site docs refait sur le design system commun (ka-ui/tokens.css, accent indigo #3b5bdb) : header API·Ka + badge « Un service Groupe KA », footer commun .ka-footer alimenté par ecosystem.json, page /contact, responsive mobile-first (360/768/1024/1440, tactile ≥ 44 px). · Package ka-ui vendorisé dans src/api/web/ka/ et servi sur /ka (tokens.css, ecosystem.json, ka-shell.js). · SSO KA ID délégué au hub groupe-ka.com (src/api/routes/auth.py) : /api/auth/ka/login → /sso/authorize, callback JWT HS256 (aud=api-ka), cookie de session signé apika_session, /api/auth/me, /api/auth/logout, bouton « Se connecter avec KA » au header. · /contact : HTML pour navigateurs, JSON (enveloppe) pour clients API. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
-
API-KA — plateforme centrale : collecte quotidienne des 8 services KA + API publique
…
Collecteurs louka/immoka/foodka/autoka/fabrika/restoka/sortika/creaka (resto-ka avec fiches détaillées : menus, plats, options et prix réels), PostgreSQL append-only, backups horodatés, scheduler 02:00 + backfill, FastAPI /api/v1 sur www.api-ka.com, plateforme web de documentation. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>