[Unreleased]En cours
Security — classe systémique admin|owner-bypass (audit 360 vague 1, 2026-07-16)
- L'audit 360 (5 auditeurs read-only sur 617k LOC) a révélé que l'idiome
- matches!(user.role, "admin"|"owner") traitait un rôle d'organisation (que
- chaque signup obtient) comme un super-admin plateforme. 5 fuites tenant
- fermées, chacune vérifiée ligne-à-ligne + rejeu live :
- CRITIQUE — GET /billing/payments exposait le grand livre du compte
- marchand plateforme à tout inscrit. Corrigé : nouveau guard
- require_platform_elevation (super-admin + jeton d'élévation issu de la clé de
- licence). Rejeu live : inscrit lambda → 403.
- HIGH — list_chat_sessions (GET /chatmessage) listait les conversations
- de tous les tenants. Corrigé : scope org unique + cast $1::uuid.
- HIGH — skills_for_gateway (fuite du nom + skills d'une gateway d'autrui) ;
- la 1re remédiation scopait sur workspace_user (table VIDE) → régression fermant
- l'accès à tous. Corrigé : scope par accessible_workspace_filter (organization_id).
- HIGH — sessions orchestrateur (assert_session_owned), dossiers patients
- PHI/RGPD Art.9 (may_access), import de workspace empoisonné (import_workspace) :
- bypass retiré / check rendu inconditionnel.
Fixed
- Skills scopés au plan : skills_for_server_ids exige désormais que toutes
- les étapes de la recette soient couvertes par les serveurs embarqués du workflow
- (avant : recipe.first() seul → 2 skills odoo+grafana fuyaient sur un plan Solo
- Odoo). Un plan Solo Odoo n'expose que les skills Odoo ; ajouter un serveur ajoute
- ses skills sans fuite hors-plan.
Changed
- UI /chat : bouton « Skill » déplacé à côté de la roue crantée ; picker et
- welcome-chips scopés au plan du workflow (plus de repli sur le catalogue global) ;
- auto-sélection de la conversation la plus récente à l'ouverture d'un workflow ;
- sidebar filtrée par workflow (gatewayId exposé par ChatSession).
Plateforme - mise à jour du 2026-10-06
- Passerelle MCP : allowlist portée à 18 connecteurs (erpnext, searxng,
- mediacms, onlyoffice ajoutés) ; 7 URL de connecteurs corrigées (moodle → learn,
- mediacms → media, noms internes mcp-*) ; neko-tor exclu et documenté.
- Portes clients : nouvelle route publique GET /api/v1/public/doors
- (portes du plan client, cache 60 s, source embarquée au build, refus au
- démarrage si le nom sort de mcp-*) ; affichée à l'étape « Prouver » du parcours.
- /leads (marketing) : l'élévation de session (clé de licence) couvre
- désormais les lectures GET ; le motif de refus réel est relayé à l'interface
- au lieu d'un message générique.
- Notifications marketing : alerte d'équipe exhaustive sur les 5 formulaires
- (contact, démo, newsletter, pied de page, fiche de processus) ; courriel de
- confirmation au prospect (contact/démo/jumeau) ; échappement HTML.
- DR : unité de sauvegarde sauvegarde (container systemd, cron 03:00 UTC,
- sonde d'estampille à trois verdicts, secrets par plan) — palier 4.