ultisuite-backend/project-plan/checklist-execution.md
R3D347HR4Y a2e17c5b6c Enhance WebSocket hub with authentication and event handling improvements
- Updated the WebSocket hub to replace the insecure `user_id` query parameter with an authentication token for secure connections.
- Introduced typed events for mail operations (created, updated, deleted) to streamline event handling.
- Implemented heartbeat functionality (ping/pong) to maintain connection health.
- Enhanced client reconnection logic and delta replay for improved user experience.
- Added limits on connections per user/session to prevent abuse and ensure stability.
2026-05-22 18:09:02 +02:00

12 KiB

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

  • Mettre à jour statuts dans project-plan/README.md selon réalité code (ne plus marquer "Planifié" ce qui existe déjà en API).
  • Séparer clairement, dans chaque .md, ce qui est déjà implémenté, partiel, non commencé.
  • Définir roadmap officielle en 3 phases: MVP fonctionnel, hardening, différenciation IA/automations.
  • 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

  • Imposer auth OIDC sur toutes routes privées, sans mode silencieux en prod.
  • Créer middleware de rôles (admin/user/service) et l'appliquer sur /api/v1/admin.
  • Mapper comptes Ulti ↔ comptes mail externes avec règles ownership strictes.
  • Ajouter journal d'audit sécurité (login, token rejeté, action admin, suppression critique).
  • Définir modèle permissions commun (read/write/admin) réutilisable Drive/Photos/Contacts/Agenda.

Sécurité secrets & credentials

  • Chiffrer credentials IMAP/SMTP au repos (AES-GCM + key rotation planifiée).
  • Interdire stockage plaintext secrets dans DB.
  • Centraliser gestion secrets .env/runtime pour dev/prod.
  • Ajouter politique rotation secrets (OIDC, SMTP, webhook shared secrets).
  • Ajouter validation stricte inputs (URL webhooks, payload size, MIME, etc.).

Qualité backend

  • Ajouter couche service claire entre handlers HTTP et accès DB.
  • Uniformiser erreurs API (code, message, details, trace id).
  • Ajouter validations payload complètes sur tous endpoints.
  • Ajouter pagination/filtrage standard partout (contacts, events, files, assets, messages).
  • Ajouter migrations DB manquantes pour besoins réels (indexes, contraintes d'intégrité, FK manquantes).

Observabilité & exploitation

  • Ajouter request-id/correlation-id dans logs.
  • Ajouter métriques Prometheus (latence, erreurs, jobs sync, queue outbox, webhook success rate).
  • Ajouter health checks détaillés (DB, Redis/KeyDB, Nextcloud, Immich, Jitsi).
  • Ajouter dashboard Grafana baseline.
  • Définir alerting (mail sync bloquée, outbox bloquée, erreurs 5xx anormales).

Tests & CI

  • Couvrir endpoints critiques par tests d'intégration.
  • Ajouter tests worker IMAP/smtp outbox/rules/webhooks.
  • Ajouter tests de migration DB en CI.
  • Ajouter tests e2e frontend sur parcours clés (lire mail, envoyer, planifier, rechercher).
  • Bloquer merge si tests critiques échouent.

2) Backend monolithe (ulti-backend)

2.1 API Mail (Ultimail backend)

Correctifs prioritaires

  • Corriger logique outbox "scheduled" vs "queued" pour envoi planifié.
  • Vérifier ownership sur UpdateLabels, UpdateFlags, DeleteMessage, UpdateRule, DeleteRule, DeleteWebhook.
  • Corriger flux création utilisateur manquant (external_id OIDC absent -> échec sous-requêtes user_id).
  • Ajouter gestion robuste erreurs SQL (rows.Scan, Exec result check, rows.Err).
  • Corriger cohérence threading (thread_id, references, in_reply_to).

Implémentation manquante

  • Endpoint brouillons (create/update/delete/list).
  • Endpoint pièces jointes (upload/download/inline/cid mapping).
  • Endpoint dossiers/labels (CRUD + mapping IMAP flags/folders).
  • Endpoint recherche avancée (filtres expéditeur, date, attachment, label, account).
  • Endpoint identities (alias/from/reply-to/signature par compte).

Hardening

  • Limiter taille body/attachments.
  • Sanitizer HTML côté lecture.
  • Protection anti-abus envoi (rate limit, retry backoff, circuit breaker SMTP).
  • Idempotency key sur envoi.

2.2 Sync IMAP & pipeline mail

  • Persister état sync incrémental fiable (UIDVALIDITY, MODSEQ, last seen UID).
  • Support suppressions/updates IMAP, pas seulement insert nouveaux messages.
  • Gérer dossiers spéciaux (Sent/Drafts/Trash/Archive/Spam) cross-provider.
  • Extraire et stocker attachments vers object storage.
  • Lancer rules engine à réception et tracer résultats.
  • Déclencher webhooks selon règles matchées.
  • Publier events realtime WS après sync.

2.3 SMTP / Outbox / Scheduling

  • Normaliser statuts outbox (draft, queued, scheduled, sending, sent, failed, cancelled).
  • Implémenter retries exponentiels + dead-letter strategy.
  • Implémenter "send now", "reschedule", "cancel scheduled".
  • Écrire message envoyé dans dossier Sent (sync cohérente UI).
  • Gérer inline attachments MIME multipart mixed/alternative.

2.4 Rules & Webhooks

  • Câbler réellement rules.Engine dans pipeline réception.
  • Câbler réellement webhooks.Executor depuis actions de règles.
  • Ajouter simulation/test endpoint "run rule on sample message".
  • Ajouter templates webhook versionnés + preview rendu variables.
  • Ajouter signatures webhook (HMAC) + retry + backoff + DLQ.
  • Ajouter observabilité des exécutions (latence, erreur, payload tronqué).

2.5 Realtime (/ws)

  • Remplacer user_id query param non sûr par auth token WS.
  • Ajouter événements typés (mail.created, mail.updated, outbox.updated, contact.updated...).
  • Ajouter heartbeat/ping/pong.
  • Gérer reconnexion client + rattrapage delta.
  • Limiter connexions par user/session.
  • Finaliser recherche events (Agenda) et contacts (CardDAV), pas fallback users local.
  • Ajouter recherche multi-index (mail+contacts+files+events) avec score unifié.
  • Ajouter snippets contextuels et highlighting.
  • Ajouter filtres type/date/account.
  • 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.