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- tablepublic.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(viapublic.member), aucune policy UPDATE/DELETE (immutabilité). - TS6.3 : Jouer le script sur la base de test -
09_create_logs_table.sqlexécuté (création deapp_logslancé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) etLoggerFactory.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 versapp_logs, seuilINFO+, debounce/batch, exclusion de soi-même). - TS6.8 : Utilitaires
downloadLogs()(Blob.logHTML5) et hookuseLogger(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 carserver.jsnon 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 ; exporterlogger+morganMiddleware. - TS6.17 :
server.js-app.use(morganMiddleware)tôt ; remplacer lesconsole.*parlogger. - TS6.18 : Ajouter
logs/au.gitignore; vérifier capture des requêtes et routage erreurs →error.log. (déjà couvert par les patternslogs/*.logexistants - 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_COLUMNSdanssrc/utils/exportTasks.js. - TS6.20 : Générateur CSV (
;, CRLF, UTF-8 BOM,escapeCsvFieldpour;/guillemets/retours ligne) - priorités/statuts en libellés FR ré-importables, s'appuie surPRIORITY_CFGdetaskHelpers. - TS6.21 : Aller-retour vérifié : test
exportTasks.test.jsréimporte un CSV exporté viaparseTaskTemplate(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/sessioninjecté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.mdetdocs/supabase_schema.sqlréalignés sur l'architectureauth.usersréelle - suppression de toute mention JWT custom / rôleadminfantôme ; le schéma consolidé pointe vers les migrationsdocs/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.jsréécrit sur le flux réel (/api/roster+/api/login+setSessionnatif) ; retrait de/api/public_data,/api/authet du bouton « Super Manager · Vue globale ». - TS6.30 :
npm run test:e2evert - 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_logscréé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
adminattendu par US-EXP-03/TS6.24 (matrice admin/super_manager/manager/employee) - sans ce travail, TS6.24 n'aurait pas de rôleadminà filtrer. Vérifiés et 2 bugs corrigés en preview réelle (voir rapport de session).
- TS6.34 : Rôle
adminvirtuel (calculé côté client suradmin@engwe-france.fr, jamais stocké en DB) pour distinguer le compte principal d'unsuper_managergénérique -src/App.jsx. - TS6.35 : Renommage
AdminDashboard.jsx→ManagerDashboard.jsx(nom fidèle à son usage réel) ; lessuper_managergénériques y atterrissent par défaut, avec bascule vers la vue globale (SuperManagerDashboard). - TS6.36 : Parité de permissions
admin↔super_managerdansTaskDetail.jsx(validation, archivage, édition priorité) et libellé de rôle corrigé dansVocalCreator.jsx. - TS6.37 : Import de tâches en self-service pour les collaborateurs (
EmployeeDashboard.jsx+ modeselfModedeImportTemplateModal.jsx) - owner forcé sur soi-même. - TS6.38 : Correction de 2 bugs trouvés en vérification preview : prop
sessionnon transmise àSuperManagerDashboardsur 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.
