DOC
Accueil/ Projets/ MJY Task Platform/ Rapport - 08/07/2026 · Sprint 05 (session 3) - Couche données, archivage & PIN in-app

Rapport - 08/07/2026 · Sprint 05 (session 3) - Couche données, archivage & PIN in-app

Suite de rapport_2026-07-08.md. Ce document consigne tout ce qui a été modifié après ce premier rapport : ce qui est déjà committé (3 commits d'avance sur origin/dev/perf) et ce qui est encore dans le working tree (non committé). Il se termine par un plan de commits prêt à copier et 2 points bloquants à traiter avant de pousser.


0. Résumé express (pour tout le monde)

Depuis le premier rapport, on a rebranché l'application sur la nouvelle base et ajouté trois choses concrètes que les utilisateurs vont voir :

  1. Chacun peut changer son code PIN depuis son espace (bouton « 🔑 PIN »).
  2. On n'efface plus une tâche : on l'archive. Le Super Manager a un nouvel onglet « 📦 Archives » pour retrouver l'historique.
  3. L'écran de détail d'une tâche ne sauvegarde plus « tout seul » à chaque clic : on modifie, un bandeau « Modifications non sauvegardées » apparaît, puis on clique « ✅ Mettre à jour ».

En coulisses, on a aussi changé la façon dont les codes PIN sont stockés (raison technique : Supabase refuse les mots de passe de moins de 6 caractères, or un PIN fait 4 chiffres). Conséquence importante : tous les comptes doivent être réinitialisés avec le script npm run reset:pins, sinon plus personne ne peut se connecter.


1. Ce qui est DÉJÀ COMMITTÉ (3 commits, en avance sur origin/dev/perf)

Ces commits correspondent au gros de la migration décrite dans le 1er rapport (§4 et §6). Ils sont faits, il reste juste à git push.

Commit Sujet Contenu principal
4d0e24f refonte auth Supabase natif bases de la migration
88b7f4b connexion front sur session Supabase native US-AUTH-06
2438cd7 migration Supabase relationnel + Auth natif useData.jsx (nouveau, +354), réécriture des 3 dashboards, storage.js vidé, member.js, PhasesManager, trigger membre 08_member_trigger.sql

✅ Cohérents avec le 1er rapport. Rien à refaire dessus, sinon les pousser.


2. Ce qui est ENCORE DANS LE WORKING TREE (non committé)

14 fichiers modifiés + 6 nouveaux fichiers. Regroupés par intention ci-dessous.

2.1 🔐 Format de mot de passe PIN (raison : minimum Supabase 6 caractères)

Le mot de passe stocké devient PIN + '_myjholding' partout où on crée/change un compte.

Fichier Changement
lib/authBackend.js login et createOrUpdateMember (2 endroits) : password: String(pin) + '_myjholding'. Retire aussi pinCustomized du roster.
src/services/authService.js changePin : même suffixe
scripts/seed-members.js ensureAuthUser : même suffixe
scripts/reset-pins.js (nouveau) remet chaque compte à son PIN par défaut au nouveau format (npm run reset:pins)
package.json ajoute le script reset:pins
src/pages/Auth.jsx supprime l'indicateur 🔒 (le roster n'expose plus pinCustomized)

2.2 📦 Archivage des tâches (remplace la suppression)

On ne supprime plus une tâche, on la marque archived = true.

Fichier Changement
src/hooks/useData.jsx deleteTaskarchiveTask (update {archived:true}) ; le fetch filtre .eq('archived', false) ; mapping enrichi (project_id, _wsId, archived) ; upsert remplacé par insert (nouveau) / update (existant)
src/pages/SuperManagerDashboard.jsx nouvel onglet « 📦 Archives » (lecture seule, charge .eq('archived', true)) ; onDeleteonArchive ; user={session}
src/pages/AdminDashboard.jsx deleteTaskarchiveTask ; onArchive conditionné aux droits ; isMine corrigé (createdBy/manager par nom)

2.3 ✏️ Détail de tâche : édition par brouillon + archivage

Fichier Changement
src/components/tasks/TaskDetail.jsx refonte : état draft local, bandeau « Modifications non sauvegardées », bouton « ✅ Mettre à jour » (fin de la sauvegarde auto), bouton « 📦 Archiver » (onArchive), rôles adminmanager, canValidate/canArchive clarifiés
src/components/tasks/TaskCard.jsx libellé de validation affiné selon createdByRole (création employé vs retour manager)

2.4 🔑 Modale « changer mon PIN » branchée

Fichier Changement
src/components/modals/ChangePinModal.jsx (nouveau) modale 4 chiffres, refuse le PIN par défaut, met pin_customized = true
src/pages/AdminDashboard.jsx · SuperManagerDashboard.jsx · EmployeeDashboard.jsx bouton « 🔑 PIN » + montage de la modale

2.5 👤 Dashboard employé : ses tâches + tri des validations

Fichier Changement
src/pages/EmployeeDashboard.jsx filtre t.owner === member.name (ne voit que ses tâches) ; les pending_validation sont rangées dans À faire / En cours selon startedAt + createdByRole ; bouton « 🔑 PIN »

2.6 🛡️ RLS

Fichier Changement
docs/features/sql/05_rls_policies.sql project_members_select simplifié en project_id in (select public.my_project_ids())

2.7 📄 Documentation (nouveaux / modifiés)

  • Modifiés : docs/sprints/sprint_04/tasks.md, docs/sprints/sprint_04/sprint_backlog.md
  • Nouveaux : docs/sprints/sprint_04/sprint_review.md, docs/sprints/sprint_04_bis/{sprint_backlog,tasks}.md, docs/sprints/sprint_05/rapport_2026-07-08.md, ce rapport, docs/features/propositions_nouvelles_fonctionnalites.pdf

3. ⚠️ Points bloquants à traiter AVANT de pousser

3.1 ✅ RÉSOLU - Colonne task.archived

La colonne existe bien dans la base de test (confirmé). Elle était juste absente du script de schéma. Corrigé : 02_schema.sql inclut désormais archived boolean not null default false dans la table task, donc une reconstruction « à froid » de la base reste cohérente. Aucune migration à jouer sur l'instance test (la colonne y est déjà).

3.2 ✅ RÉSOLU - Scripts de test + centralisation du format de PIN

La dérivation du mot de passe est désormais centralisée dans lib/pinPassword.js (pinToPassword(pin)), utilisée partout (backend, scripts, client). Les scripts de test ont été corrigés en conséquence. Effet secondaire trouvé et corrigé : les tests contenaient des données périmées -

  • Marco est maintenant super_manager (PIN 9999), plus manager/1052test-login et test-workflow utilisent désormais My Tam (mytam@miyan.fr, manager miyan) ;
  • il existe un 14ᵉ membre dev « Seer » (seerharley03@gmail.com, manager) hors seed → l'assertion « super voit 13 membres » devient « ≥ 13 » (robuste).

3.3 🟠 Rappel opérationnel - FAIT

npm run reset:pins a été relancé : 13 comptes ré-alignés sur le nouveau format. ✅


3bis. 🔐 Sécurité - ce qui a été ajouté (v1) et reporté (v2)

✅ Fait maintenant (v1)

  • Rate limiting anti brute-force sur /api/login - lib/rateLimiter.js : 5 échecs → verrouillage 15 min par membre, compteur remis à zéro à la réussite. Réponse HTTP 429 propagée telle quelle par server.js et la fonction Netlify (aucune modif des handlers). ⚠️ État en mémoire → « best-effort » en serverless.
  • Centralisation de la dérivation du mot de passe (lib/pinPassword.js) : le passage au pepper (v2) sera un changement d'un seul fichier.

🔜 Reporté en v2 (décision tracée)

  • Pepper serveur (HMAC) - voir ADR 0007 (statut Proposé). Nécessite de déplacer le changement de PIN côté serveur (/api/change-pin) + migration des comptes. Rappel : le suffixe actuel n'ajoute aucune sécurité (constant + visible côté client) ; c'est le rate limiting qui protège réellement le PIN à 4 chiffres.

4. Plan de commits proposé (à faire à la main)

Ordre conseillé : 1 → 2 → 3 → 4 → 5. Voir le message de chat pour les commandes git complètes.

  1. Sécurité auth : format PIN centralisé + rate limiting + reset - lib/pinPassword.js (nouveau), lib/rateLimiter.js (nouveau), lib/authBackend.js, src/services/authService.js, scripts/seed-members.js, scripts/reset-pins.js, scripts/test-login.js, scripts/test-workflow.js, package.json, src/pages/Auth.jsx
  2. Front : archivage + PIN in-app + édition brouillon - src/hooks/useData.jsx, src/components/tasks/TaskDetail.jsx, src/components/tasks/TaskCard.jsx, src/components/modals/ChangePinModal.jsx, src/pages/AdminDashboard.jsx, src/pages/SuperManagerDashboard.jsx, src/pages/EmployeeDashboard.jsx, docs/features/sql/02_schema.sql (colonne archived)
  3. RLS - docs/features/sql/05_rls_policies.sql
  4. ADR - docs/ADR/ADR_0002…0007_*.md (auth native, proxy, workflow, archivage, sécurité PIN, pepper)
  5. Docs - docs/sprints/sprint_04/*, docs/sprints/sprint_04_bis/*, docs/sprints/sprint_05/*, docs/features/propositions_nouvelles_fonctionnalites.pdf

5. Vérifications passées (08/07)

npm run test 3/3 ✅ · npm run build · npm run reset:pins 13/13 ✅ · npm run test:login · npm run test:workflow · rate limiter (5 échecs → verrou 900 s)