DOC
Accueil/ Projets/ MJY Task Platform/ Tâches techniques - Sprint 06 (Observabilité & Export de données)

Tâches techniques - Sprint 06 (Observabilité & Export de données)

Décomposition des stories du Sprint Backlog 06 en tâches techniques. Cibles : logger centralisé (ADR 0009), export CSV/JSON à portée par rôle, clôture des résidus Sprint 05, recette import.


🛠️ Kanban des Tâches Techniques

US-LOG-01 · Table app_logs + RLS

  • TS6.1 : Créer docs/features/sql/09_create_logs_table.sql - table public.app_logs (id uuid pk, created_at timestamptz default now(), level text, category text, message text, description text, payload jsonb, user_id uuid, browser_info jsonb).
  • TS6.2 : Activer RLS - policy INSERT ouverte (anon + authenticated), SELECT réservé super_manager (via public.member), aucune policy UPDATE/DELETE (immutabilité).
  • TS6.3 : Jouer le script sur la base de test - 09_create_logs_table.sql exécuté (création de app_logs lancée par le PO à la clôture du sprint). Insert anon / select super / immuabilité conformes à la policy.

US-LOG-02 · Cœur du logger front (src/utils/logger.js)

  • TS6.4 : Définir LogLevels (TRACE0 → FATAL5, OFF6) et LoggerFactory.getLogger(name) avec héritage hiérarchique par namespace (.).
  • TS6.5 : Implémenter ConsoleTransport (couleurs CSS par niveau).
  • TS6.6 : Implémenter BufferTransport (500 derniers logs en mémoire).
  • TS6.7 : Implémenter SupabaseTransport (envoi vers app_logs, seuil INFO+, debounce/batch, exclusion de soi-même).
  • TS6.8 : Utilitaires downloadLogs() (Blob .log HTML5) et hook useLogger(name).
  • TS6.9 : Tests unitaires Vitest (niveaux, héritage, filtrage seuil, buffer).

US-LOG-03 · Interception API + anti-boucle

  • TS6.10 : Wrapper window.fetch - log méthode, URL, durée, statut, résumé du corps.
  • TS6.11 : Injecter le fetch wrappé dans l'init de src/services/supabaseClient.js (auth + tables tracés).
  • TS6.12 : Anti-boucle : ignorer toute requête dont l'URL contient /rest/v1/app_logs.
  • TS6.13 : Initialiser le logger + interception globale dans src/main.jsx.
  • TS6.14 : Vérifier : FETCH GET /api/roster SUCCESS in Xms, aucun log récursif, aucun doublon. (vérifié en preview : FETCH GET /api/roster FAILURE in 68ms - 500 attendu car server.js non lancé dans le navigateur de preview ; aucune récursion observée sur le POST /rest/v1/app_logs)

US-LOG-04 · Middleware backend Winston/Morgan

  • TS6.15 : npm install winston morgan.
  • TS6.16 : Créer middlewares/logger.middleware.js - Winston (console colorisée + logs/error.log + logs/combined.log), Morgan (ESM) streamé dans Winston ; exporter logger + morganMiddleware.
  • TS6.17 : server.js - app.use(morganMiddleware) tôt ; remplacer les console.* par logger.
  • TS6.18 : Ajouter logs/ au .gitignore ; vérifier capture des requêtes et routage erreurs → error.log. (déjà couvert par les patterns logs / *.log existants - aucun ajout nécessaire)

US-EXP-01 · Export CSV (format import étendu)

  • TS6.19 : Format CSV export = colonnes du template d'import (Tâche;Notes;Assigné à;Responsable;Priorité;Pilier;Échéance) + Projet;Statut;Phase;Créé par;Date de création - EXPORT_COLUMNS dans src/utils/exportTasks.js.
  • TS6.20 : Générateur CSV (;, CRLF, UTF-8 BOM, escapeCsvField pour ;/guillemets/retours ligne) - priorités/statuts en libellés FR ré-importables, s'appuie sur PRIORITY_CFG de taskHelpers.
  • TS6.21 : Aller-retour vérifié : test exportTasks.test.js réimporte un CSV exporté via parseTaskTemplate (ADR 0008) et recrée des tâches cohérentes (owner/manager/priorité/échéance résolus).

US-EXP-02 · Export JSON complet

  • TS6.22 : tasksToJson - JSON exhaustif (liste blanche de champs + notes + projet/phase résolus), enveloppe _meta (scope, count, exportedAt).
  • TS6.23 : Exclusion stricte des secrets - liste blanche de champs ⇒ aucun jeton/clé exporté (test : access_token/pin/session injectés → absents du JSON).

US-EXP-03 · Portée d'export par rôle

  • TS6.24 : filterTasksByRole (respecte la RLS) :
    • admin / super_manager → toutes les tâches ;
    • manager → siennes (owner) + celles qu'il a créées (createdBy) ou doit valider (manager) ;
    • employee → siennes (owner = self) uniquement.
  • TS6.25 : UI ExportButtons (⬇️ CSV / ⬇️ JSON, style aligné BackupButtons) câblée dans les 3 dashboards (ManagerDashboard, SuperManagerDashboard, EmployeeDashboard).
  • TS6.26 : Matrice de portée couverte par 5 tests unitaires (admin/super/manager/employee + « un employee n'exporte pas les tâches d'autrui ») ; portée admin = toutes les tâches vérifiée en preview réelle (export CSV/JSON, Supabase live). (Vérif live des 4 rôles simultanée non rejouée cette session - logique prouvée par les tests.)

US-DOC-01 · Réalignement documentaire (fin US-DOC-07)

  • TS6.27 : product_backlog.md (US1.1/US1.2/US5.1), README.md et docs/supabase_schema.sql réalignés sur l'architecture auth.users réelle - suppression de toute mention JWT custom / rôle admin fantôme ; le schéma consolidé pointe vers les migrations docs/features/sql/.
  • TS6.28 : Procédures documentées - inscription (Admin API + trigger handle_new_user), changement de PIN self-service, export CSV/JSON par rôle (nouvelles sections README).

US-TEST-01 · e2e Playwright (auth)

  • TS6.29 : e2e/auth.spec.js réécrit sur le flux réel (/api/roster + /api/login + setSession natif) ; retrait de /api/public_data, /api/auth et du bouton « Super Manager · Vue globale ».
  • TS6.30 : npm run test:e2e vert - 7/7 (écran roster, popup PIN, mauvais PIN, connexion des 3 rôles + compte admin jusqu'au dashboard).

US-VAL-01 · Recette import par les chefs

  • TS6.31 : Démo préparée - script de recette docs/features/import_liste_taches/recette_demo.md (CSV/Markdown, aperçu, scope projet, self-service, aller-retour export).
  • TS6.32 : Présenter à Julien & Marco ; consigner la validation formelle. (⏳ reporté au Sprint 07 - validation planifiée après le vendredi soir par le PO ; tableau prêt au §4 du script de recette.)

Clôture ADR

  • TS6.33 : ADR 0009 passé de Proposé à Accepté (logger livré front + backend, app_logs créée - cf. TS6.3).

Hors périmètre initial · Refonte des rôles (admin virtuel) - non planifiée, livrée en cours de sprint

Travaux menés en parallèle (outil « antigravity ») pendant la session logger, non présents dans le découpage initial du sprint. Conservés ici car ils posent la base technique du rôle admin attendu par US-EXP-03/TS6.24 (matrice admin/super_manager/manager/employee) - sans ce travail, TS6.24 n'aurait pas de rôle admin à filtrer. Vérifiés et 2 bugs corrigés en preview réelle (voir rapport de session).

  • TS6.34 : Rôle admin virtuel (calculé côté client sur admin@engwe-france.fr, jamais stocké en DB) pour distinguer le compte principal d'un super_manager générique - src/App.jsx.
  • TS6.35 : Renommage AdminDashboard.jsxManagerDashboard.jsx (nom fidèle à son usage réel) ; les super_manager génériques y atterrissent par défaut, avec bascule vers la vue globale (SuperManagerDashboard).
  • TS6.36 : Parité de permissions adminsuper_manager dans TaskDetail.jsx (validation, archivage, édition priorité) et libellé de rôle corrigé dans VocalCreator.jsx.
  • TS6.37 : Import de tâches en self-service pour les collaborateurs (EmployeeDashboard.jsx + mode selfMode de ImportTemplateModal.jsx) - owner forcé sur soi-même.
  • TS6.38 : Correction de 2 bugs trouvés en vérification preview : prop session non transmise à SuperManagerDashboard sur 2 des 3 routes qui le rendent (crash potentiel au changement de PIN + en-tête affichant "Super Manager" au lieu du prénom réel de la personne connectée, ex. Julien/Marco).

📌 Pré-requis / décisions (déjà tranchés)

  • Déploiement : après le Sprint 06 (sprint dédié).
  • Login : roster conservé (proposition B écartée).
  • Export : CSV (import étendu) + JSON complet, portée par rôle.