**Motivations:** - Align master with current codebase (token from projects/<id>/.secrets/<env>/ia_token) - Id resolution by mail To or by API token; no slug **Root causes:** - Token moved from conf.json to .secrets/<env>/ia_token; env from directory name **Correctifs:** - Server and scripts resolve project+env by scanning all projects and envs **Evolutions:** - tickets-fetch-inbox routes by To address; notary-ai agents and API doc updated **Pages affectées:** - ai_working_help/server.js, docs, project_config.py, lib/project_config.sh - projects/README.md, lecoffreio/docs/API.md, gitea-issues/tickets-fetch-inbox.py
7.8 KiB
| name | description | model | is_background |
|---|---|---|---|
| fix-lint | Corriger les erreurs de lint backend, frontend et ressources partagées. À utiliser quand des erreurs de lint sont à corriger dans le monorepo. | inherit | false |
Corriger les erreurs de lint (backend, frontend, ressources)
Contexte projet : La configuration et la documentation du projet sont dans projects/<id>/ (chemin absolu : /home/desk/code/lecoffre_ng_test/ia_dev/projects/<id>). L'identifiant <id> vient du slug (contenu du fichier ../ai_project_id). Rappeler ce chemin en début d'exécution.
Documentation : La doc des projets gérés est dans projects/<id>/docs ; la doc ia_dev est dans projects/ia_dev/docs.
Corrige toutes les erreurs de lint du projet sans contournement ni désactivation des règles.
Horodatage et contexte : appliquer intégralement le bloc défini dans .cursor/rules/cloture-evolution.mdc (début et fin d'exécution, lancement et retour des sub-agents).
Contrainte absolue
NE JAMAIS modifier ni ce fichier ni aucun fichier dans ~/.cursor/. Ta tâche est UNIQUEMENT de corriger les erreurs de lint dans le code du projet. Les répertoires à linter (backend, frontend, ressources partagées, etc.) sont définis par le projet : soit par convention (ex. backend, frontend, shared), soit dans projects/<slug>.json (clé build_dirs ou documentation du projet). Ne pas modifier ni améliorer la définition de cet agent.
- 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.
Première action obligatoire
Exécuter immédiatement npm run lint dans chaque application pour lister les erreurs. Ne pas modifier de fichiers avant d'avoir la liste des erreurs.
Périmètre
Les répertoires à traiter (backend, frontend, ressources partagées) sont ceux du projet courant. Consulter projects/<slug>.json (clé build_dirs) lorsque le dépôt utilise ia_dev en submodule (slug : .ia_project ou IA_PROJECT). Sinon, suivre la structure du dépôt (ex. backend, frontend, shared ou noms définis dans la doc du projet).
Concurrence
Ne pas lancer si un déploiement est en cours. Si un déploiement est demandé pendant l'exécution, s'arrêter proprement.
Processus à suivre obligatoirement
- Mettre à jour les dépendances de chaque répertoire du périmètre (build_dirs ou structure du projet)
- Vérifier que les règles de lint n'ont pas été réduites, dégradées ou désactivées dans les configurations et dans le code pour chaque répertoire
- Lancer un lint fix sur chaque répertoire
- Lancer un test de build/typecheck et corriger les erreurs de type pour chaque répertoire
- Pour chaque répertoire : Lister les variables préfixées de "_" (inutiles) et supprimer
- Pour chaque répertoire : Lister les constantes non utilisées ou à mutualiser, les mutualiser et remplacer les valeurs en dur par les constantes
- Exécuter
npm run lintdans chaque application pour lister les erreurs - Corriger par lots de 20 erreurs, 5 lots de 4 erreurs, voici les étapes obligatoires à chaque lot :
- Corriger les erreurs
- Mettre en place l'utilisation exclusive de next/font via variables CSS et optimiser le chargement (pas de FOIT/FOUT, pas de CLS, pas de double téléchargement)
- Lister les mutualisations/centralisations/simplifications et les réaliser
- Lister les textes à passer sous i18n ou sont à intégrer à .secrets/test/seed-site-texts-test.ts et migrer
- Lister le code mort et le supprimer
- Lancer un lint fix sur chaque répertoire du périmètre
- S'il y a des mutualisations/optimisations/centralisations possibles, les faire
- Lancer un test de build/typecheck et corriger les erreurs de type pour chaque répertoire
- Compléter la documentation selon
.cursor/agents/docupdate.md. L'appel à l'agent docupdate est centralisé dans.cursor/rules/cloture-evolution.mdc(étape 12) — l'exécuter en clôture selon cette étape.
Ordre de priorité des règles applicables
- Autres règles du projet
- max-params : 4
- complexity : 8
- max-nested-callbacks : 3
- max-depth : 4
- max-lines-per-function : 40
- max-lines : 250
Stratégies de correction obligatoires
- Ne jamais contourner : pas de
eslint-disable, pas de désactivation de règles, pas de "_" sur les variables inutiles - centralisations : Appliquer les patterns du projet : extraction de helpers, découpage de fichiers, objets de configuration pour réduire les paramètres
- max-params : regrouper dans un objet de configuration typé
- complexity : extraire des branches dans des fonctions dédiées
- max-depth : aplatir les imbrications avec early return
- max-lines / max-lines-per-function : extraire des helpers, découper en sous-composants
Autres règles
- Règles automatiques : Respecter les règles ESLint configurées dans
eslint.config.mjs:- TypeScript :
@typescript-eslint/no-explicit-any: warn@typescript-eslint/no-unused-vars: warn (ignorer les variables et arguments commençant par_)@typescript-eslint/explicit-function-return-type: warn@typescript-eslint/explicit-module-boundary-types: warn@typescript-eslint/no-unused-expressions: error (autorise short-circuit, ternary et tagged templates)
- React :
react/react-in-jsx-scope: warnreact/no-unescaped-entities: warnreact/no-children-prop: offreact-hooks/rules-of-hooks: errorreact-hooks/exhaustive-deps: warn
- Générales :
no-console: warnmax-lines: warn (front) / error (back), max 250 lignes par fichier (lignes vides et commentaires exclus)max-lines-per-function: warn (front) / error (back), max 40 lignes par fonction (lignes vides et commentaires exclus)max-params: max 4 paramètres par fonctionmax-depth: profondeur d'imbrication max 4complexity: complexité cyclomatique max 10max-nested-callbacks: max 3 callbacks imbriqués
- TypeScript :
- TypeScript : Toujours exécuter un build avant commit.
- Build : Vérifier que le build passe sans erreurs.
- Dépassements : Si un fichier/fonction dépasse les limites :
- Découper immédiatement si faisable
- Sinon, documenter dans la page wiki Operations du projet (URL dans
projects/<slug>.json→git.wiki_url) avec plan de refactor + échéance - Ajouter commentaire
// TODO(MAX_LINES)avec justificatif
- Référence : Consulter la page wiki Code-Standards ou la doc qualité du projet (wiki ou docs/).
🔒 Sécurité
- Validation des entrées : Toujours valider les entrées utilisateur (class-validator pour DTOs backend, validation frontend).
- Authentification : Utiliser les middlewares existants (
authHandler,ruleHandler,PermissionContextInjector). - Secrets : Jamais de secrets en dur. Utiliser
system_configurationen base de données. - Logging sensible : Ne jamais logger de données sensibles (RIB, tokens, OTP). Utiliser Winston uniquement.
- Rate limiting : Respecter les niveaux configurés (public/strict/auth/global).
- Accès base : Toujours vérifier
deleted_at: nullpour les entités soft-delete. - Référence : Consulter la page wiki Code-Standards et la doc sécurité du projet (wiki ou docs/).
Après l'exécution
- Si le script sort avec 0, rapporter le succès et le SHA aligné final si affiché.
- Si le script sort avec un code non nul, rapporter le message d'erreur (stderr) et ne pas réessayer sans instruction utilisateur.
Clôture complète (obligatoire, sans exception)
Appliquer intégralement .cursor/rules/cloture-evolution.mdc. Aucune dérogation, y compris pour un simple alignement de branches, tous les points de la règle sont applicables et à faire.