# Ulti Suite — Checklist d'exécution complète Objectif: transformer état actuel (partiellement implémenté) vers produit fonctionnel bout en bout. ## 0) Gouvernance & alignement docs - [x] Mettre à jour statuts dans `project-plan/README.md` selon réalité code (ne plus marquer "Planifié" ce qui existe déjà en API). - [x] Séparer clairement, dans chaque `.md`, ce qui est **déjà implémenté**, **partiel**, **non commencé**. - [x] Définir roadmap officielle en 3 phases: MVP fonctionnel, hardening, différenciation IA/automations. - [x] Ajouter "Definition of Done" par service (backend, frontend, sécurité, tests, observabilité). ### Owners nominaux (pilotage) | Stream | Owner nominal | Backup | |---|---|---| | Produit / priorisation | `@PO` | `@Lead` | | Backend core mail | `@BE-Core` | `@BE-Platform` | | Intégrations suite (NC/Jitsi/Immich) | `@BE-Integrations` | `@BE-Core` | | Frontend web | `@FE-Lead` | `@FE-App` | | Sécurité | `@Security` | `@BE-Platform` | | Infra / DevOps / Observabilité | `@DevOps` | `@SRE` | | QA / tests e2e | `@QA` | `@FE-App` | ## 1) Fondations transverses (obligatoire avant features) ### Auth, identité, permissions - [x] Imposer auth OIDC sur toutes routes privées, sans mode silencieux en prod. - [x] Créer middleware de rôles (admin/user/service) et l'appliquer sur `/api/v1/admin`. - [x] Mapper comptes Ulti ↔ comptes mail externes avec règles ownership strictes. - [x] Ajouter journal d'audit sécurité (login, token rejeté, action admin, suppression critique). - [x] Définir modèle permissions commun (read/write/admin) réutilisable Drive/Photos/Contacts/Agenda. ### Sécurité secrets & credentials - [x] Chiffrer credentials IMAP/SMTP au repos (AES-GCM + key rotation planifiée). - [x] Interdire stockage plaintext secrets dans DB. - [x] Centraliser gestion secrets `.env`/runtime pour dev/prod. - [x] Ajouter politique rotation secrets (OIDC, SMTP, webhook shared secrets). - [x] Ajouter validation stricte inputs (URL webhooks, payload size, MIME, etc.). ### Qualité backend - [x] Ajouter couche service claire entre handlers HTTP et accès DB. - [x] Uniformiser erreurs API (code, message, details, trace id). - [x] Ajouter validations payload complètes sur tous endpoints. - [x] Ajouter pagination/filtrage standard partout (contacts, events, files, assets, messages). - [x] Ajouter migrations DB manquantes pour besoins réels (indexes, contraintes d'intégrité, FK manquantes). ### Observabilité & exploitation - [x] Ajouter request-id/correlation-id dans logs. - [x] Ajouter métriques Prometheus (latence, erreurs, jobs sync, queue outbox, webhook success rate). - [x] Ajouter health checks détaillés (DB, Redis/KeyDB, Nextcloud, Immich, Jitsi). - [x] Ajouter dashboard Grafana baseline. - [x] Définir alerting (mail sync bloquée, outbox bloquée, erreurs 5xx anormales). ### Tests & CI - [x] Couvrir endpoints critiques par tests d'intégration. - [x] Ajouter tests worker IMAP/smtp outbox/rules/webhooks. - [x] Ajouter tests de migration DB en CI. - [x] Ajouter tests e2e frontend sur parcours clés (lire mail, envoyer, planifier, rechercher). - [x] Bloquer merge si tests critiques échouent. ## 2) Backend monolithe (`ulti-backend`) ### 2.1 API Mail (Ultimail backend) #### Correctifs prioritaires - [x] Corriger logique outbox "scheduled" vs "queued" pour envoi planifié. - [x] Vérifier ownership sur `UpdateLabels`, `UpdateFlags`, `DeleteMessage`, `UpdateRule`, `DeleteRule`, `DeleteWebhook`. - [x] Corriger flux création utilisateur manquant (external_id OIDC absent -> échec sous-requêtes user_id). - [x] Ajouter gestion robuste erreurs SQL (`rows.Scan`, `Exec` result check, `rows.Err`). - [x] Corriger cohérence threading (`thread_id`, `references`, `in_reply_to`). #### Implémentation manquante - [x] Endpoint brouillons (create/update/delete/list). - [x] Endpoint pièces jointes (upload/download/inline/cid mapping). - [x] Endpoint dossiers/labels (CRUD + mapping IMAP flags/folders). - [x] Endpoint recherche avancée (filtres expéditeur, date, attachment, label, account). - [x] Endpoint identities (alias/from/reply-to/signature par compte). #### Hardening - [x] Limiter taille body/attachments. - [x] Sanitizer HTML côté lecture. - [x] Protection anti-abus envoi (rate limit, retry backoff, circuit breaker SMTP). - [x] Idempotency key sur envoi. ### 2.2 Sync IMAP & pipeline mail - [x] Persister état sync incrémental fiable (UIDVALIDITY, MODSEQ, last seen UID). - [x] Support suppressions/updates IMAP, pas seulement insert nouveaux messages. - [x] Gérer dossiers spéciaux (Sent/Drafts/Trash/Archive/Spam) cross-provider. - [x] Extraire et stocker attachments vers object storage. - [x] Lancer rules engine à réception et tracer résultats. - [x] Déclencher webhooks selon règles matchées. - [x] Publier events realtime WS après sync. ### 2.3 SMTP / Outbox / Scheduling - [x] Normaliser statuts outbox (`draft`, `queued`, `scheduled`, `sending`, `sent`, `failed`, `cancelled`). - [x] Implémenter retries exponentiels + dead-letter strategy. - [x] Implémenter "send now", "reschedule", "cancel scheduled". - [x] Écrire message envoyé dans dossier Sent (sync cohérente UI). - [x] Gérer inline attachments MIME multipart mixed/alternative. ### 2.4 Rules & Webhooks - [x] Câbler réellement `rules.Engine` dans pipeline réception. - [x] Câbler réellement `webhooks.Executor` depuis actions de règles. - [x] Ajouter simulation/test endpoint "run rule on sample message". - [x] Ajouter templates webhook versionnés + preview rendu variables. - [x] Ajouter signatures webhook (HMAC) + retry + backoff + DLQ. - [x] Ajouter observabilité des exécutions (latence, erreur, payload tronqué). ### 2.5 Realtime (`/ws`) - [x] Remplacer `user_id` query param non sûr par auth token WS. - [x] Ajouter événements typés (mail.created, mail.updated, outbox.updated, contact.updated...). - [x] Ajouter heartbeat/ping/pong. - [x] Gérer reconnexion client + rattrapage delta. - [x] Limiter connexions par user/session. ### 2.6 Search - [x] Finaliser recherche events (Agenda) et contacts (CardDAV), pas fallback users local. - [x] Ajouter recherche multi-index (mail+contacts+files+events) avec score unifié. - [x] Ajouter snippets contextuels et highlighting. - [x] Ajouter filtres type/date/account. - [x] Préparer option Meilisearch/Typesense activable. ### 2.7 Modules suite (Drive/Calendar/Contacts/Meet/Photos/Admin) #### Drive - [ ] Ajouter upload chunked gros fichiers. - [ ] Ajouter rename/copy/list trash/recent/starred. - [ ] Ajouter ACL simplifiées (owner/editor/viewer) mappées correctement. - [ ] Ajouter quotas et erreurs métier propres. #### Calendar - [ ] Ajouter update événement + gestion ETag/If-Match. - [ ] Ajouter invitations/réponses participants. - [ ] Ajouter free/busy endpoint. - [ ] Ajouter création lien Meet auto depuis event. #### Contacts - [ ] Ajouter update contact + ETag. - [ ] Ajouter sync incrémentale (sync-token). - [ ] Ajouter fusion doublons serveur. - [ ] Ajouter endpoints enrichissement interactions mail/réunions/fichiers. #### Meet - [ ] Valider claims JWT Jitsi (iss/sub/aud/domain) selon déploiement réel. - [ ] Ajouter logique droits modérateur (owner room, policy). - [ ] Ajouter enregistrement + stockage Drive. - [ ] Ajouter métadonnées sessions (participants, durée, logs). #### Photos - [ ] Corriger mapping API Immich (champs JSON exacts, erreurs HTTP). - [ ] Ajouter pagination/tri/filtres robustes. - [ ] Ajouter albums CRUD complets. - [ ] Ajouter liaison stockage/quota avec Ultidrive. #### Admin - [ ] Ajouter RBAC admin strict. - [ ] Ajouter CRUD utilisateurs complet (create/invite/disable/reactivate). - [ ] Ajouter quotas multi-service (mail/drive/photos). - [ ] Ajouter pages stats exploitables + export audit. ## 3) Frontend web (`gmail-interface-clone`) ### 3.1 Fondation data/API - [ ] Remplacer `lib/email-data.ts` par source serveur paginée. - [ ] Remplacer `lib/contacts/mock-data.ts` et `mock-accounts` par API backend. - [ ] Créer client API unique (baseURL, auth bearer, gestion erreurs, timeout, retry). - [ ] Ajouter couche query/cache (SWR ou TanStack Query). - [ ] Définir contrat TypeScript partagé avec backend (DTOs versionnés). ### 3.2 Mail UI - [ ] Brancher liste mails, lecture, flags, labels, delete sur `/api/v1/mail`. - [ ] Brancher compose/send/scheduled sur outbox backend. - [ ] Brancher recherche UI sur backend search (fallback local supprimé). - [ ] Brancher multi-comptes réels (accounts API + switch account effectif). - [ ] Brancher settings (pas page placeholder) avec persistance backend. ### 3.3 Contacts UI - [ ] Brancher store contacts sur API contacts. - [ ] Brancher création/édition/suppression/fusion sur backend. - [ ] Brancher import/export vCard/CSV. - [ ] Ajouter état synchronisation + résolution conflits. ### 3.4 Agenda/Drive/Meet/Photos UI - [ ] Créer shell pages front pour chaque service avec navigation cohérente. - [ ] Implémenter workflows MVP: Drive list/upload/download, Agenda list/create event, Meet create/join, Photos list/upload. - [ ] Réutiliser patterns UI partagés (toasts, loaders, erreurs, confirmations). - [ ] Ajouter permissions UI selon rôle. ### 3.5 Realtime UX - [ ] Connecter WS sécurisé. - [ ] Rafraîchir liste/detail sans reload quand events backend arrivent. - [ ] Gérer offline/reconnect/sync status visible. - [ ] Ajouter indicateur santé sync par compte. ### 3.6 Accessibilité, i18n, perf - [ ] Audit a11y (navigation clavier, aria, contraste). - [ ] Uniformiser FR/EN i18n. - [ ] Réduire payload initial (code splitting, lazy heavy panels). - [ ] Mesurer Core Web Vitals et fixer régressions. ## 4) Infrastructure & déploiement ### Docker/compose/proxy - [ ] Vérifier routes nginx (`/api`, `/ws`, `/cloud`, `/meet`, `/auth`) en env réel. - [ ] Ajouter TLS (Let's Encrypt ou reverse proxy dédié) pour prod. - [ ] Ajouter limites upload/timeout proxy adaptées gros fichiers. - [ ] Ajouter profiles compose clairs (dev, prod, modules optionnels). ### Données & backup - [ ] Politique backup PostgreSQL + object storage + Nextcloud. - [ ] Test restauration périodique. - [ ] Politique rétention logs et audit. ### Sécurité runtime - [ ] Durcir containers (users non-root, capabilities minimales, seccomp). - [ ] Mettre scan vulnérabilités dépendances/images en CI. - [ ] Ajouter CSP/headers sécurité côté frontend + proxy. ## 5) Plateformes futures ### Desktop (Tauri) - [ ] Initialiser wrapper Tauri. - [ ] Gérer auth desktop sécurisée (token storage natif). - [ ] Ajouter notifications système. - [ ] Ajouter intégration filesystem native (uploads drag/drop large files). ### Mobile - [ ] Définir stratégie mobile (PWA avancée vs app native). - [ ] Implémenter MVP mobile mail (liste/lecture/compose simple). - [ ] Ajouter sync background + notifications push. ## 6) Validation "ça fonctionne" ### Parcours utilisateur obligatoires - [ ] Connecter compte OIDC, créer compte mail IMAP/SMTP, voir inbox sync. - [ ] Lire mail HTML/texte + télécharger pièce jointe. - [ ] Envoyer mail immédiat, vérifier réception et dossier Sent. - [ ] Planifier envoi, replanifier, envoyer maintenant. - [ ] Créer règle (label + webhook), vérifier exécution réelle. - [ ] Rechercher mail/contact/event depuis recherche globale. - [ ] Créer contact, retrouver en auto-complétion compose. - [ ] Créer événement agenda + lien meet + invitation mail. - [ ] Upload fichier drive + partage lien. ### SLO minima - [ ] API p95 < 300ms hors endpoints lourds. - [ ] Échec sync mail < 1% sur 24h. - [ ] Taux succès webhook > 99% hors erreurs distantes. - [ ] Disponibilité service mensuelle cible >= 99.5%. --- ## Ordre recommandé d'exécution 1. **Blocage critique**: sécurité credentials + auth/rbac + bug outbox scheduled. 2. **MVP mail réel**: sync IMAP fiable + outbox + UI branchée backend. 3. **Intégrations suite MVP**: contacts/calendar/drive branchés parcours simples. 4. **Observabilité + tests**: CI solide, dashboards, alerting. 5. **Différenciation**: règles avancées, webhooks templates, IA.