diff --git a/.cursor/agents/agent-loop.md b/.cursor/agents/agent-loop.md index e0fa3b3..5ca3805 100644 --- a/.cursor/agents/agent-loop.md +++ b/.cursor/agents/agent-loop.md @@ -93,4 +93,4 @@ Répéter les étapes 1, 2 et 3 pour les x cycles demandés. Chaque cycle traite ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si la boucle n'a pas traité d'éléments, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si la boucle n'a pas traité d'éléments, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/branch-align-by-script-from-test.md b/.cursor/agents/branch-align-by-script-from-test.md index 99c28dc..b4a56c5 100644 --- a/.cursor/agents/branch-align-by-script-from-test.md +++ b/.cursor/agents/branch-align-by-script-from-test.md @@ -65,4 +65,4 @@ Prérequis (imposés par le script) : ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le script a échoué ou si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le script a échoué ou si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/change-to-all-branches.md b/.cursor/agents/change-to-all-branches.md index c411958..a085c26 100644 --- a/.cursor/agents/change-to-all-branches.md +++ b/.cursor/agents/change-to-all-branches.md @@ -20,7 +20,7 @@ description: Uniquement en test, lance /push-by-script puis deploy/change-to-all 4. Vérifier branche du dépôt projet = **test** (sinon retour 1). 5. Exécuter **/push-by-script** (message fourni par l'agent). 6. Exécuter `./deploy/change-to-all-branches.sh [project_id]` (timeout long). -7. En échec : corriger → push → relancer jusqu'à succès. +7. **En échec du script** : identifier la cause (sortie + logs/deploy_*.log). Si typecheck / lint / build : lancer **intégralement** l'agent **/fix-lint** pour le projet, puis **/push-by-script**, puis relancer `./deploy/change-to-all-branches.sh [project_id]`. Répéter jusqu'à succès ou **maximum 5 tentatives** ; au-delà, documenter les erreurs et s'arrêter. 8. Clôture : points 1 à 16 de cloture-evolution.mdc (horodatage, 5 périmètres 3-11, 12-14, 15, 16). --- @@ -41,7 +41,7 @@ description: Uniquement en test, lance /push-by-script puis deploy/change-to-all - **Échec npm sur le serveur (ENOENT, ENOTEMPTY, node_modules) :** Si la sortie ou les logs (logs/deploy_*.log) contiennent une erreur npm liée à node_modules (ex. ENOENT, ENOTEMPTY, mkdir node_modules/…, npm error enoent). Il s'agit d'un problème d'environnement sur le serveur de déploiement, pas du code. **Correction automatique** : ne pas modifier le code ; relancer **une fois** ./deploy/change-to-all-branches.sh [project_id] (sans refaire /push-by-script : les branches sont déjà alignées). Le script distant deploy/scripts_v2/remote/deploy-app.sh effectue désormais un retry après `rm -rf node_modules` lors de chaque npm ci ; la relance lance un nouveau déploiement qui bénéficie de cette logique. Si l'échec persiste après cette unique relance, documenter la sortie et les logs (fichier deploy_*.log, extraits d'erreur npm) et s'arrêter — intervention manuelle ou infra requise (espace disque, droits, npm cache). -- **Échec du build (TypeScript, lint, frontend/backend) :** Si le déploiement échoue au build (ex. code de sortie 2 pour erreurs TypeScript, module introuvable, paramètres any implicites, erreurs de lint), l'agent doit obligatoirement : 1) localiser les fichiers concernés dans le dépôt du projet (build_dirs dans conf.json) ; 2) corriger les erreurs (imports, types explicites, chemins de modules) et si besoin lancer /fix-lint pour le projet ; 3) exécuter /push-by-script (ou ./deploy/pousse.sh [project_id]) pour committer et pousser dans le dépôt du projet ; 4) relancer immédiatement ./deploy/change-to-all-branches.sh [project_id] sans demander validation. Aucune demande de validation entre correction et relance. +- **Échec du build (TypeScript, lint, frontend/backend) — boucle autonome obligatoire :** Si le déploiement échoue au build (code de sortie non nul, erreurs TypeScript, typecheck, lint, module introuvable, etc. dans la sortie ou dans logs/deploy_*.log), l'agent doit **obligatoirement** et **sans demander validation** : 1) Extraire de la sortie/log la liste des fichiers et erreurs (ex. fichiers .ts/.tsx listés par tsc ou eslint). 2) **Lancer et exécuter intégralement** l'agent **/fix-lint** (ou `.cursor/agents/fix-lint.md`) pour le projet cible, en lui passant en contexte les fichiers/erreurs identifiés si possible ; fix-lint corrige types, lint et compilation. 3) Exécuter **/push-by-script** (ou `./deploy/pousse.sh [project_id]`) pour committer et pousser les corrections. 4) **Relancer immédiatement** `./deploy/change-to-all-branches.sh [project_id]`. Répéter cette séquence (fix-lint → push-by-script → change-to-all-branches.sh) jusqu'à **succès** ou jusqu'à **5 tentatives** ; après 5 échecs consécutifs, documenter la sortie et les logs (extraits d'erreurs, fichiers concernés) et s'arrêter — intervention utilisateur requise. Aucune demande de validation entre correction et relance. - **Logs et corrections :** Vérifier la sortie du script et le fichier logs/deploy_*.log produit par deploy.sh. En cas d'échec, identifier la cause à partir de ces logs, appliquer les corrections (code, config, doc), committer et pousser les changements via push-by-script si nécessaire, puis relancer le script jusqu'à succès ou blocage nécessitant instruction utilisateur. @@ -60,11 +60,11 @@ Uniquement en test (branche git), exécuter dans l'ordre : - **Paramètres :** Le script n'accepte qu'un seul argument optionnel : le **project_id** (ex. lecoffreio). La branche est toujours **test** (imposée par le script, pas un paramètre). Si l'utilisateur fournit deux tokens (ex. « test lecoffreio » ou « lecoffreio test »), extraire celui qui correspond à un projet (existence de `projects//conf.json`) et appeler le script avec uniquement ce project_id : `./deploy/change-to-all-branches.sh lecoffreio`. - **Pas de timeout :** Ne pas lancer la commande avec un timeout court (ex. 5 min). Le déploiement (build, migrations, import-v1, redémarrage services, vérifications) peut durer 10 à 30 min ; utiliser un timeout long ou aucun timeout pour laisser le script aller au bout. -Retourner 0 en cas de succès. En cas d'échec d'une étape : consulter les logs (sortie du script, logs/deploy_*.log), identifier la cause, appliquer les corrections dans le dépôt du projet, mettre à jour git (push-by-script) si des fichiers ont été modifiés, puis **relancer immédiatement** change-to-all-branches.sh (sans demander à l'utilisateur). Répéter jusqu'à succès. S'arrêter uniquement si la correction n'est pas possible sans instruction utilisateur (ex. erreur serveur, secret manquant, décision métier). +Retourner 0 en cas de succès. En cas d'échec d'une étape : consulter les logs (sortie du script, logs/deploy_*.log), identifier la cause. **Si la cause est typecheck / lint / build** : lancer **intégralement** l'agent **/fix-lint** pour le projet, puis /push-by-script, puis **relancer immédiatement** change-to-all-branches.sh (sans demander à l'utilisateur). Répéter jusqu'à succès ou **5 tentatives** ; au-delà, documenter et s'arrêter. Pour les autres causes (erreur serveur, secret manquant, infra) : s'arrêter si la correction n'est pas possible sans instruction utilisateur. ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le script a échoué ou si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le script a échoué ou si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. **Exhaustivité obligatoire de la clôture :** diff --git a/.cursor/agents/closure-point-7-justification.md b/.cursor/agents/closure-point-7-justification.md new file mode 100644 index 0000000..1643848 --- /dev/null +++ b/.cursor/agents/closure-point-7-justification.md @@ -0,0 +1,22 @@ +# Point 7 clôture : Optimisation / mutualisation / centralisation — justification obligatoire + +Lorsque la réponse au point 7 (Optimisation / mutualisation / centralisation systématique) est **« Non réalisées encore »**, une **justification par composant sollicité** est obligatoire. + +Pour **chaque périmètre** concerné par l'agent (global/commun, frontend, backend, ressources partagées, scripts shell) où **aucune centralisation** n'a été réalisée, indiquer brièvement **pourquoi** aucune centralisation n'était possible, par exemple : + +- logique déjà centralisée, pas de doublon identifié ; +- périmètre trop restreint pour mutualiser sans sur-complexifier ; +- composant unique dans le périmètre, pas d'autre cible de centralisation ; +- contrainte architecturale ou de contrat qui empêche la mutualisation. + +Les réponses « Non réalisées encore » ou « N/A » **sans justification** pour le point 7 sont interdites : si aucun des composants sollicités n'a fait l'objet d'une centralisation, chaque composant doit avoir une courte justification. + +Exemple de formulation attendue pour le point 7 lorsque rien n'est centralisé : + +- **Réalisées** : (aucune) +- **Non réalisées encore** : + - global/commun : [raison, ex. pas de logique redondante identifiée] + - frontend : [raison] + - backend : [raison] + - ressources partagées : [raison] + - scripts shell : [raison] diff --git a/.cursor/agents/code.md b/.cursor/agents/code.md index ba3b80c..84aa784 100644 --- a/.cursor/agents/code.md +++ b/.cursor/agents/code.md @@ -109,4 +109,4 @@ Tu appliques les règles ci-dessous **lorsqu'il y a du code à produire** (évol ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le code n'a pas été modifié, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le code n'a pas été modifié, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/deploy-by-script.md b/.cursor/agents/deploy-by-script.md index 862ded3..abcc2e2 100644 --- a/.cursor/agents/deploy-by-script.md +++ b/.cursor/agents/deploy-by-script.md @@ -60,6 +60,6 @@ Le script fait alors automatiquement : suivi des branches origin, sync de la bra ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le script a échoué ou si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le script a échoué ou si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. **Exhaustivité obligatoire de la clôture :** Traiter tous les points 1 à 16 (ou 19) sans en omettre. Point 1 : horodatage début/fin et par sub-agent. Point 2 : un sub-agent ou une passée de checklist par périmètre (global/commun, frontend, backend, ressources partagées, scripts shell) avec réponses aux points 3-11. Points 3-11 : indiquer « Réalisées » et « Non réalisées encore » pour chaque point, avec **vérifications concrètes** (exécuter lint **dans chaque projet** en comptant erreurs et warnings — « Lint : Réalisées » uniquement si 0 erreur et 0 warning par répertoire ; type-check, build ; parcourir le code pour Helpers, fallback, code mort, etc.) — pas de « N/A » de convenance, sauf périmètre inexistant. Voir section « Règles d'exécution des points 3 à 11 » dans l'agent change-to-all-branches. Points 12-14 : reste à faire, réaliser non réalisé, réaliser reste à faire. Point 15 : /push-by-script si pas déjà fait. Point 16 : afficher le texte du commit. diff --git a/.cursor/agents/deploy-pprod-or-prod.md b/.cursor/agents/deploy-pprod-or-prod.md index ad0885e..4a2505a 100644 --- a/.cursor/agents/deploy-pprod-or-prod.md +++ b/.cursor/agents/deploy-pprod-or-prod.md @@ -49,4 +49,4 @@ Appliquer intégralement le bloc défini dans `.cursor/rules/cloture-evolution.m ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si une étape a échoué, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si une étape a échoué, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/docupdate.md b/.cursor/agents/docupdate.md index b4a37e3..2b30b8a 100644 --- a/.cursor/agents/docupdate.md +++ b/.cursor/agents/docupdate.md @@ -90,4 +90,4 @@ Ventiler les infos de fixknowledge dans les pages wiki existantes et ne pas cré ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/evol.md b/.cursor/agents/evol.md index bb45608..620aeeb 100644 --- a/.cursor/agents/evol.md +++ b/.cursor/agents/evol.md @@ -35,4 +35,4 @@ Tu es l'agent evol, en charge des **évolutions** (nouvelles fonctionnalités, a ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si une étape a échoué, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si une étape a échoué, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/fix-lint.md b/.cursor/agents/fix-lint.md index 801080b..72fb046 100644 --- a/.cursor/agents/fix-lint.md +++ b/.cursor/agents/fix-lint.md @@ -52,6 +52,18 @@ Corrige toutes les erreurs et tous les warnings de lint du projet (chaque réper * **Résolution directe :** En cas de problème (toutes criticités), ne jamais simplifier, contourner, forcer un résultat en dur, ou créer des bouchons. Le problème doit être résolu à sa racine. +## Priorité en amont (règles de qualité et absence de bypass) + +**Avant** toute correction de lint par lot : + +1. **Vérifier que les règles et exigences de qualité sont paramétrées** dans chaque sous-projet (backend, frontend, ressources) : fichiers de config présents et cohérents (ESLint, TypeScript, Prettier) ; règles attendues activées et non désactivées globalement. Si une règle ou un outil manque ou est désactivé, corriger ou documenter avant d'enchaîner. + +2. **Vérifier qu'il n'y a pas de bypass dans le code** : rechercher et traiter tout `eslint-disable`, `eslint-disable-next-line`, `@ts-ignore`, `@ts-expect-error` sans justification valide, `// @ts-nocheck`, désactivation locale de règles. Pour chaque bypass : soit supprimer le bypass en corrigeant le code pour respecter la règle, soit documenter une exception justifiée (référence issue ou décision validée). **Aucun bypass pour « résoudre » une erreur de lint** : toujours corriger le code. Si une règle exige un refactor (max-params, max-lines-per-function, complexity, max-lines), **faire le refactor** (objets d'options, extraction de fonctions, découpage de fichiers) ; ne pas laisser de bypass en invoquant « refactor prévu » ou « exception temporaire ». + +## Priorité centralisation / optimisation + +À chaque correction de lint, identifier les duplications et patterns répétés ; centraliser la logique dans des helpers ou modules partagés ; réutiliser les helpers existants avant d'en créer de nouveaux. Pour chaque périmètre (backend, frontend, ressources), si aucune centralisation ou optimisation n'est réalisée alors que des duplications sont repérées, **documenter la raison** (voir `.cursor/agents/closure-point-7-justification.md`). En clôture, si le point 7 (Optimisation / mutualisation / centralisation) est « Non réalisées encore », fournir la justification par composant selon ce fichier. + ## Première action obligatoire Exécuter immédiatement `npm run lint` dans **chaque** application du périmètre (backend, frontend, ressources partagées) pour lister **erreurs et warnings**. Ne pas modifier de fichiers avant d'avoir la liste complète (erreurs + warnings) pour chaque répertoire. Ne négliger aucun projet. @@ -153,4 +165,4 @@ Si un déploiement est demandé pendant l'exécution, s'arrêter proprement. ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Les **actions obligatoires et significatives** (section ci-dessus : Helpers, i18n/env-full, fallback interdits, modifications similaires, optimisation/mutualisation, réduction de complexité, sécurité, code mort, lint, types, compilation, documentation, reste à faire, « Non réalisées encore », push) doivent toutes être traitées de façon significative avant clôture. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le lint n'a pas été modifié, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant sollicité (voir `.cursor/agents/closure-point-7-justification.md`). Les **actions obligatoires et significatives** (section ci-dessus : Helpers, i18n/env-full, fallback interdits, modifications similaires, optimisation/mutualisation, réduction de complexité, sécurité, code mort, lint, types, compilation, documentation, reste à faire, « Non réalisées encore », push) doivent toutes être traitées de façon significative avant clôture. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le lint n'a pas été modifié, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/fix-search.md b/.cursor/agents/fix-search.md index b434c8f..0ab11f4 100644 --- a/.cursor/agents/fix-search.md +++ b/.cursor/agents/fix-search.md @@ -67,4 +67,4 @@ Tu es l'agent fix-search, en charge des **investigations** en vue d'identifier l ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si l'agent n'a pas modifié de code, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/fix.md b/.cursor/agents/fix.md index 931309a..64d180d 100644 --- a/.cursor/agents/fix.md +++ b/.cursor/agents/fix.md @@ -45,4 +45,4 @@ Tu es l'agent fix, en charge des **correctifs** à partir d'un problème remont ## Clôture complète obligatoire (tous les cas, sans exception) -En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le correctif n'a pas été appliqué ou a échoué, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. +En fin d'exécution de cet agent, **toujours** appliquer intégralement `.cursor/rules/cloture-evolution.mdc` : points 1 à 19. Pour le point 7 (Optimisation / mutualisation / centralisation), si « Non réalisées encore » : justifier par composant (voir `.cursor/agents/closure-point-7-justification.md`). Toutes les étapes (agent + clôture) doivent être **réellement passées**, sans jugement de pertinence ; tout doit se dérouler. (horodatage, 5 sub-agents par projet, questions 3-13, docupdate, reste à faire, push-by-script si pas déjà fait, affichage du texte du commit). **Aucune exception** : même si le correctif n'a pas été appliqué ou a échoué, la clôture complète est obligatoire. Lister les actions réalisées et non réalisées pour chaque point. diff --git a/.cursor/agents/push-by-script.md b/.cursor/agents/push-by-script.md index 1282968..ad1e95d 100644 --- a/.cursor/agents/push-by-script.md +++ b/.cursor/agents/push-by-script.md @@ -154,7 +154,7 @@ Pour chaque point, indiquer **réalisé** ou **non réalisé** et, le cas éché - **4. i18n + env-full** : Vérifier textes en dur dans l'UI, présence de `.secrets//env-full*` ; « Réalisées » si conforme, « Non réalisées encore » sinon. - **5. Fallback interdits** : Parcourir le code pour fallback, valeurs par défaut masquant des erreurs ; « Réalisées » si aucun, « Non réalisées encore » si présents. - **6. Modifications similaires** : Vérifier patterns similaires à appliquer ailleurs ; « Réalisées » si étendu ou rien à faire, « Non réalisées encore » si à faire. - - **7. Optimisation / mutualisation / centralisation** : Vérifier duplication ou centralisation possible ; « Réalisées » ou « Non réalisées encore » avec précision. + - **7. Optimisation / mutualisation / centralisation** : Vérifier duplication ou centralisation possible ; « Réalisées » ou « Non réalisées encore » avec précision. Si « Non réalisées encore », justification obligatoire par périmètre (voir `.cursor/agents/closure-point-7-justification.md`). - **8. Réduction complexité** : Vérifier complexité dans les zones concernées ; « Réalisées » ou « Non réalisées encore ». - **9. Renforcement sécurité** : Vérifier exposition de données sensibles, validation des entrées ; « Réalisées » ou « Non réalisées encore ». - **10. Code mort** : Vérifier code mort (exports inutilisés, branches mortes) ; « Réalisées » ou « Non réalisées encore ». diff --git a/.cursor/rules/cloture-evolution.mdc b/.cursor/rules/cloture-evolution.mdc index abf4b5a..7eba161 100644 --- a/.cursor/rules/cloture-evolution.mdc +++ b/.cursor/rules/cloture-evolution.mdc @@ -47,6 +47,7 @@ model: inherit 7. **Optimisation / mutualisation / centralisation systématique:** - Réalisées - Non réalisées encore + - Si « Non réalisées encore » : justification obligatoire par périmètre (voir `.cursor/agents/closure-point-7-justification.md`). 8. **Réduction de la complexité systématique:** - Réalisées diff --git a/projects/lecoffreio/docs/API.md b/projects/lecoffreio/docs/API.md index a351130..7db2c8d 100644 --- a/projects/lecoffreio/docs/API.md +++ b/projects/lecoffreio/docs/API.md @@ -8,7 +8,7 @@ Ce document consolide la documentation des APIs externes utilisées par LeCoffre ### Vue d'ensemble -Le backend appelle l'API **ai_working_help** pour les opérations **ask** (legacy), **enqueue** et **getResponse**. L'URL de base est configurée via `NOTARY_AI_AGENT_URL`. Le projet et l'env sont identifiés par le token Bearer ; l'API résout le projet via `projects//.secrets//ia_token`. Filtrage IP 192.168.1.* côté API. +Le backend appelle l’API **ai_working_help** pour les opérations **ask** (legacy), **enqueue** et **getResponse**. L’URL de base est configurée via `NOTARY_AI_AGENT_URL`. Le projet et l’env sont identifiés par le token Bearer ; l’API résout le projet via `projects//.secrets//ia_token`. Filtrage IP 192.168.1.* côté API. ### Authentification @@ -24,48 +24,48 @@ Le token est de la forme **base** + **env** (ex. `nicolecoffreiotest`, `nicoleco - **POST** `{NOTARY_AI_AGENT_URL}/enqueue` — mise en file (spooler) - **GET** `{NOTARY_AI_AGENT_URL}/response/:request_uid` — récupération de la réponse (poll) -Implémentation : `lecoffre-back-main/src/services/notary/NotaryFolderAIService/NotaryFolderAIService.ts`. Le header n'est ajouté que si `NOTARY_AI_AGENT_TOKEN` est renseigné. +Implémentation : `lecoffre-back-main/src/services/notary/NotaryFolderAIService/NotaryFolderAIService.ts`. Le header n’est ajouté que si `NOTARY_AI_AGENT_TOKEN` est renseigné. ### Chat IA dossier notaire (endpoints applicatifs) - **POST /api/v1/notary/folders/:uid/ai-question** - Auth : même chaîne que les autres routes dossier notaire. - Body : `{ question: string }` - - **202** : `{ request_uid: string }` (requête en file ; réponse produite par l'agent). + - **202** : `{ request_uid: string }` (requête en file ; réponse produite par l’agent). - **503** : Agent non configuré ou enqueue en échec. - **GET /api/v1/notary/folders/:uid/ai-response/:requestUid** - - Auth : idem ; vérifie que la requête appartient à l'utilisateur/dossier. + - Auth : idem ; vérifie que la requête appartient à l’utilisateur/dossier. - **200** : `{ status: "pending" }` ou corps `{ answer, nextActionsTable, membersInfoSheet, synthesisRecommendation }`. - **404** : requête inconnue ou expirée. **503** : agent indisponible. -Flux : front → backend → ai_working_help (enqueue) ; agent (boucle Cursor) produit la réponse ; front poll GET response jusqu'à `status !== "pending"`. Logs backend : `[NotaryFolderAIService]`, `[FolderNotaryAIController]`. Front : `[FolderNotaryAiChat]`. +Flux : front → backend → ai_working_help (enqueue) ; agent (boucle Cursor) produit la réponse ; front poll GET response jusqu’à `status !== "pending"`. Logs backend : `[NotaryFolderAIService]`, `[FolderNotaryAIController]`. Front : `[FolderNotaryAiChat]`. ### Sécurité et restrictions -L'agent ne doit jamais renvoyer RIB, coordonnées bancaires ou de paiement. Contexte envoyé : métadonnées dossier, type d'acte, types de documents, résumé membres (rôle, nom, email), résumé documents (type, déposant, statut). Pas de contenu de fichier ni donnée de paiement. +L’agent ne doit jamais renvoyer RIB, coordonnées bancaires ou de paiement. Contexte envoyé : métadonnées dossier, type d’acte, types de documents, résumé membres (rôle, nom, email), résumé documents (type, déposant, statut). Pas de contenu de fichier ni donnée de paiement. --- ## API Annuaire V2 – Recherche offices et membres (IdNot PP) -- **Recherche offices** : route `GET .../api/v2/directory/lookup` avec paramètre **nomOffice** uniquement (recherche sur l'office ; pas de mélange notaire). Retour : offices sans liste de collaborateurs. -- **Membres à la sélection** : à la sélection d'un office, le front appelle `GET /api/v1/notary/search/offices/:officeIdNot/members?officeName=...` ; le backend appelle IdNot `GET /api/pp/v2/entites/:officeIdNot/personnes` et retourne les membres avec **roleLabel** (typeLien IdNot : Notaire, Collaborateur, etc.). +- **Recherche offices** : route `GET .../api/v2/directory/lookup` avec paramètre **nomOffice** uniquement (recherche sur l’office ; pas de mélange notaire). Retour : offices sans liste de collaborateurs. +- **Membres à la sélection** : à la sélection d’un office, le front appelle `GET /api/v1/notary/search/offices/:officeIdNot/members?officeName=...` ; le backend appelle IdNot `GET /api/pp/v2/entites/:officeIdNot/personnes` et retourne les membres avec **roleLabel** (typeLien IdNot : Notaire, Collaborateur, etc.). - **Front** : `getOfficeMembers(officeIdNot, officeName)` ; hook `useOfficeMembers(selectedOffice)` ; affichage « Chargement des membres… » puis liste « Prénom Nom (roleLabel) » (ShareFolderModal, SearchConfrereSection). - **Référence** : API Annuaire V2 doc § VII.iii.a (nom, nomOffice, nomNotaire) ; IdNot PP entites/:id/personnes. Conformité : `docs/compliance-annuaire-idnot-specs.md`. ## Autres APIs (référence détaillée) -- **API d'ancrage Bitcoin Signet** : vue d'ensemble, endpoints `/api/anchor/document`, `/api/anchor/verify`, flux synchrone, configuration et déploiement — voir `projects/lecoffreio/docs/API.md`. +- **API d’ancrage Bitcoin Signet** : vue d’ensemble, endpoints `/api/anchor/document`, `/api/anchor/verify`, flux synchrone, configuration et déploiement — voir `projects/lecoffreio/docs/API.md`. - **Intégration Genapi / iNot** : `POST /api/v1/notary/documents/:uid/push-inot`, OAuth, création eDocument, code métier `GENAPI_API_UNAVAILABLE`. -- **Erreurs d'intégrations externes** : mappings `*_API_UNAVAILABLE` (GENAPI, ANNUAIRE, ANCHORAGE, IDNOT, OPENID, IPFS, MAILCHIMP, STRIPE) ; conventions `integration.operation` pour la traçabilité. +- **Erreurs d’intégrations externes** : mappings `*_API_UNAVAILABLE` (GENAPI, ANNUAIRE, ANCHORAGE, IDNOT, OPENID, IPFS, MAILCHIMP, STRIPE) ; conventions `integration.operation` pour la traçabilité. --- -## Sources des messages backend (exposés à l'utilisateur) +## Sources des messages backend (exposés à l’utilisateur) - **PermissionDeniedMessageBuilder.ts** : messages 403 en français (office, dossier, document) ; utilisé par FolderThirdPartiesAccessHelper, DocumentsNotaryAccessHelper. - **errorMessages.ts** : constantes techniques (réponses API, logique métier). -- **errorHandlers.ts** : construction des réponses d'erreur, `handlePermissionDeniedError` (message du builder 403). +- **errorHandlers.ts** : construction des réponses d’erreur, `handlePermissionDeniedError` (message du builder 403). -Règle : tout message destiné à l'utilisateur (ex. corps 403) en français et fonctionnel ; constantes et libellés centralisés dans ces modules (ou un module dédié documenté ici). +Règle : tout message destiné à l’utilisateur (ex. corps 403) en français et fonctionnel ; constantes et libellés centralisés dans ces modules (ou un module dédié documenté ici). diff --git a/projects/lecoffreio/docs/README.md b/projects/lecoffreio/docs/README.md index 022460e..18c90d6 100644 --- a/projects/lecoffreio/docs/README.md +++ b/projects/lecoffreio/docs/README.md @@ -10,11 +10,11 @@ |---------|-----------|-------------| | README.md | Home | Index et correspondance (ce fichier). | | API.md | Api | APIs externes (IdNot, Annuaire, Ancrage, agent IA notaire), contrats et évolution. | -| Operations.md | Operations | Retours prod, parcours, vérifications, scripts d'analyse, modalités d'analyse. | +| Operations.md | Operations | Retours prod, parcours, vérifications, scripts d’analyse, modalités d’analyse. | | Frontend.md | Frontend | Toasters, messages 403, sources de textes front, paramétrage, parcours UI. | | Code-Standards.md | Code-Standards | Lint, refactors, rôles et droits, conventions. | | Deployment.md | Deployment | Env, seeds, site-texts, vérifications boot, déploiement. | -| Architecture.md | Architecture | Vue d'ensemble technique et intégrations. | +| Architecture.md | Architecture | Vue d’ensemble technique et intégrations. | | compliance-annuaire-idnot-specs.md | Compliance-Annuaire-Idnot-Specs | Conformité API Annuaire V2 et ID.NOT (lookup, PP). | Contenu des anciens dossiers `docs/features/` et `docs/fixKnowledge/` : ventilé dans les pages ci-dessus (pas de page dédiée FEATURES ni FIXKNOWLEDGE).