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 surorigin/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 :
- Chacun peut changer son code PIN depuis son espace (bouton « 🔑 PIN »).
- On n'efface plus une tâche : on l'archive. Le Super Manager a un nouvel onglet « 📦 Archives » pour retrouver l'historique.
- 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 |
deleteTask → archiveTask (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)) ; onDelete → onArchive ; user={session} |
src/pages/AdminDashboard.jsx |
deleteTask → archiveTask ; 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 admin → manager, 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), plusmanager/1052→test-loginettest-workflowutilisent 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 parserver.jset 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.
- 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 - 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(colonnearchived) - RLS -
docs/features/sql/05_rls_policies.sql - ADR -
docs/ADR/ADR_0002…0007_*.md(auth native, proxy, workflow, archivage, sécurité PIN, pepper) - 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) ✅
