Changelog
Ce changelog liste les évolutions back-end qui impactent les intégrateurs front-end (Nathan Lengagne, JUWA). Les ADRs internes sont référencés depuis le repo (apps/api/docs/decisions/).
2026-07-10
- Module visio livré (chantier avenant 2026-3). Côté senior :
POST /v1/video/initiate(appel vers un contact du carnet),GET /v1/video/quota,GET /v1/video/:id/status,POST /v1/video/:id/end. Côté aidant :GET /v1/me/video/sessions(sessions actives avecdirection),POST /v1/me/video/sessions/:id/join,POST /v1/me/video/sessions/:id/end,POST /v1/me/seniors/:id/video/initiate. Quota 5 appels par jour et par senior (toutes directions), cadence anti-harcèlement à partir de la troisième tentative vers un même contact, aucun enregistrement. Raccrocher n'est pas terminer : quitter avec au moins deux participants restants laisse l'appel vivre, le dernier départ ferme la salle. - Authentification duale dans l'app mobile. Un appareil non enrôlé propose l'espace aidant : login email et mot de passe (
POST /v1/auth/login), annuaireGET /v1/me/seniors, écrans d'appel entrant et sortant. Le kiosque senior reste inchangé et prioritaire quand une session device existe. - Page de jonction proche (
apps/visio-join) : application web minimale (Vite + React) que le proche ouvre depuis son lien, prénom prérempli, un bouton pour rejoindre l'appel. - Infrastructure basculée sur serveur dédié. Les environnements quittent les conteneurs serverless Scaleway pour une Dedibox à Paris pilotée en Ansible ; l'environnement dev tourne sur k3s et se redéploie à chaque push
develop(workflowdeploy-box). Les URLs publiques passent sur*.195-154-239-8.sslip.ioen attendant l'enregistrement du domaine définitif. Voir Environnements. - Le smoke de déploiement vérifie désormais l'enregistrement du worker vocal auprès de LiveKit : un déploiement qui rendrait Helena muette échoue au lieu de passer au vert.
2026-06-09
- Politique de modèles révisée : tout en Mistral Small (
mistral-small-2603). Medium rejoint Large dans les paliers interdits (latence et coût). Les limites connues de Small sont compensées par des garde-fous déterministes côté runtime et mesurées par un banc comportemental dédié. Révision documentée dans l'ADRllm-model-policy.md. - Runtime vocal réécrit en Python (
apps/voice-agent, SDK LiveKit Agents). L'ancien worker TypeScript hébergé dansapps/apiest retiré ; les outils de l'agent restent des clients HTTP vers/v1/voice/internal/*. Aucun changement de contrat pour les clients.
2026-05-25
- Endpoint
GET /v1/admin/seniors/:id/reminders/allexposé. Vue brute tablereminders, opposé sémantique de/reminders(qui filtrestatus='active' AND scheduled_at >= now()). Filtres opt-in?status=,?kind=,?from=,?to=. Pagination cursor base64url ordonnée(created_at DESC, id DESC),?limit=1..200(default 50). - Endpoint
GET /v1/admin/seniors/:id/mood-entriesexposé. Journal humeur brut, 1 row par capturemood_scoresavecscore0-100,confidence0-1,source(per_turn|end_of_day|manual_entry|onboarding_j7),captured_at(aliasrecorded_at). Filtres?source=,?from=,?to=. Pagination cursor(recorded_at DESC, id DESC),?limit=1..200. - Endpoint
POST /v1/admin/stats/tokens/seed-testexposé. Dev seed pour la rendition du widget tokens/cost du dashboard. Body{ days_back?: 1..90 default 30, models?: string[], flux?: ("cache" | "memory" | "agent")[] }. Réponse{ senior_id, days_back, models, flux, seeded_count, tokens_used_total, cost_eur_micros_total }. Hard-gateKOHAMI_ENV !== 'prod'(overrideALLOW_TEST_SEED_IN_PROD=true). Rate-limit 5 / actor / heure. GET /v1/admin/usersreçoit deux extensions :- paramètre
?search=(1..256, trim) :ILIKE %search%case-insensitive surusers.emailetseniors.display_nameviaLEFT JOIN, - champ
meta.total_countdans la réponse (COUNT(*) OVER ()window function, ignore le cursor mais respecte les filtresrole,include_deleted,search).
- paramètre
- Restoration du prompt système Helena à sa version minimale concise (546 → 65 lignes, 163 → 10 règles strictes). Le comportement vocal retombe sur le contour Phase A : deux phrases courtes maximum, zéro relance fin de tour, anti-hallucination outils, mood adaptation, anti-marqueurs
[DEV QA MODE]. - Sanitization adapter-side de la sortie NLU
MistralOnboardingNluAdapter:- sentinels
"null"/"undefined"/"none"/"n/a"/"nul"ramenés ànullréel, - chaînes vides ou whitespace-only ramenées à
null, - valeurs hors-enum (
housing_type,chronotype) ramenées ànullavec un logwarn.
- sentinels
SlotGuidanceétendu avecacceptedValues?: readonly string[]pour les slots enum, injecté dans le prompt NLU pour bloquer la mauvaise extraction silencieuse.
2026-05-20
- Refonte de la documentation développeur (Phase A), palette vert santé, FR-only, composants
EndpointReference,EventCard,InvariantBadge.
2026-05-17
- Catalogue d'événements DataChannel élargi à 13 entries (ajout des familles
assistanceetoutbound_call). - Endpoint
POST /v1/onboarding/postponeexposé pour reporter l'onboarding. - Endpoint
GET / PUT /v1/onboarding/caregiver-configexposé pour configuration aidant.
2026-05-13
- Architecture C, le voice-worker est isolé physiquement de l'API (ADR
voice-agent-process-model.md).
2026-05-08
- Endpoint
POST /v1/admin/caregivers/:id/reactivation-noticeexposé (escalade admin). - Endpoint
GET /v1/admin/alerts/recentexposé (dashboard JUWA).
2026-05-01
- Endpoints
POST /v1/auth/password-reset/requestetPOST /v1/auth/password-reset/applyexposés.
2026-04-15
- 2FA TOTP rollout pour aidants et admins (ADR
auth-2fa-totp-rollout.md).
2026-03-20
- Jalon 1 livré, contrat API REST stable.