docs(agents): align fix-lint with LeCoffre Edge Tools guidance, markdownlint

This commit is contained in:
Nicolas Cantu 2026-04-10 05:44:42 +02:00
parent ae4bc14573
commit 8a73fea3c8

View File

@ -5,6 +5,8 @@ model: inherit
is_background: false is_background: false
--- ---
# Agent fix-lint (ia_dev)
## Preparer au maximum à l'aide d'outils et de scripts ## Preparer au maximum à l'aide d'outils et de scripts
En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (importe/install les outils nécessaires si besoin) l'ia est la derniere priorité par rapport à l'outillage, les outils sont lancés dans des scripts dans /home/desk/code/ia_dev/tools et rendus le plus générique possible afin de les réutilisé plus tard dans d'autres contextes, par contre l'ia peut serveur à développer ces scripts. En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (importe/install les outils nécessaires si besoin) l'ia est la derniere priorité par rapport à l'outillage, les outils sont lancés dans des scripts dans /home/desk/code/ia_dev/tools et rendus le plus générique possible afin de les réutilisé plus tard dans d'autres contextes, par contre l'ia peut serveur à développer ces scripts.
@ -16,9 +18,9 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
- Sous-agents : uniquement si nécessaire ; descriptions courtes ; éviter « explore » si grep/read/chemin connu suffit. - Sous-agents : uniquement si nécessaire ; descriptions courtes ; éviter « explore » si grep/read/chemin connu suffit.
- Réponses concises, sans répéter règles ou docs déjà référencées. - Réponses concises, sans répéter règles ou docs déjà référencées.
# Corriger les erreurs de lint (backend, frontend, ressources) ## Corriger les erreurs de lint (backend, frontend, ressources)
## Règle d'exécution intégrale (obligatoire, non négociable) ### Règle d'exécution intégrale (obligatoire, non négociable)
- **Tout dérouler** : exécuter **toutes** les étapes décrites dans cet agent dans l'ordre, sans en omettre aucune. Tout doit se dérouler effectivement. - **Tout dérouler** : exécuter **toutes** les étapes décrites dans cet agent dans l'ordre, sans en omettre aucune. Tout doit se dérouler effectivement.
- **Sans priorisation** : aucune étape n'est optionnelle ou "secondaire" ; chacune est obligatoire. - **Sans priorisation** : aucune étape n'est optionnelle ou "secondaire" ; chacune est obligatoire.
@ -30,7 +32,7 @@ En tant qu'agent, avant de solliciter l'ia, regarde ce que tu peux scripter (imp
Chacune des actions ci-dessous est **obligatoire** et doit être réalisée **de façon significative** (concrète, mesurable, sans contenu factice ou minimal). Aucune ne peut être omise ni réduite à une simple mention. Chacune des actions ci-dessous est **obligatoire** et doit être réalisée **de façon significative** (concrète, mesurable, sans contenu factice ou minimal). Aucune ne peut être omise ni réduite à une simple mention.
| Action | Obligation | | Action | Obligation |
|--------|------------| | --- | --- |
| **Helpers** | Créer ou réutiliser des helpers dès que la logique est réutilisable ; pas de duplication. | | **Helpers** | Créer ou réutiliser des helpers dès que la logique est réutilisable ; pas de duplication. |
| **i18n / env-full** | Textes sous i18n ; variables sensibles et env dans `.secrets/<env>/env-full` ; pas de chaînes en dur. | | **i18n / env-full** | Textes sous i18n ; variables sensibles et env dans `.secrets/<env>/env-full` ; pas de chaînes en dur. |
| **Fallback interdits** | Aucun fallback implicite ; erreurs remontées et journalisées ; chemins alternatifs explicites uniquement. | | **Fallback interdits** | Aucun fallback implicite ; erreurs remontées et journalisées ; chemins alternatifs explicites uniquement. |
@ -72,25 +74,25 @@ Corrige toutes les erreurs et tous les warnings de lint du projet (chaque réper
**Résolution par type de code (référence)** : **Résolution par type de code (référence)** :
| Code / famille | Problème typique | Action | | Code / famille | Problème typique | Action |
|----------------|------------------|--------| | --- | --- | --- |
| `compat-api/css` | Propriété CSS incomplète sur un navigateur cible (ex. Safari) | Ajouter les préfixes vendeurs documentés (ex. `-webkit-user-select` avec `user-select`) dans le SCSS/CSS du module. | | `compat-api/css` | Propriété CSS incomplète sur un navigateur cible (ex. Safari) | Ajouter les préfixes vendeurs documentés (ex. `-webkit-user-select` avec `user-select`) dans le SCSS/CSS du module. |
| `axe/name-role-value` | Bouton ou contrôle sans nom accessible | Texte visible, ou `aria-label` / `aria-labelledby` selon le design system ; éviter de nexposer quun `title` si une meilleure option existe. | | `axe/name-role-value` | Bouton ou contrôle sans nom accessible | Texte visible, ou `aria-label` / `aria-labelledby` selon le design system ; éviter de nexposer quun `title` si une meilleure option existe. |
| `axe/aria` (ex. `aria-valid-attr-value`) | Valeur ARIA invalide | Utiliser des valeurs énumérées valides pour lattribut concerné (ex. `aria-invalid` : `true`, `false`, `grammar`, `spelling`) ; pas de littéral erroné type `"{expression}"`. | | `axe/aria` (ex. `aria-valid-attr-value`) | Valeur ARIA invalide (Edge Tools : `aria-*="{expression}"`) | En **JSX**, utiliser **`condition ? "true" : "false"`** sur les attributs booléens (`aria-expanded`, `aria-selected`, etc.). Éviter les appels de fonction sur ces attributs si lIDE les signale. |
| `no-inline-styles` (webhint) | Styles inline | Déplacer vers CSS/SCSS (modules) ; valeurs dynamiques via **variables CSS** sur un conteneur + règles dans le module, ou classes conditionnelles. | | `no-inline-styles` (webhint) | Styles inline | Déplacer vers CSS/SCSS (modules) ; valeurs dynamiques via **variables CSS** sur un conteneur + règles dans le module, ou classes conditionnelles. |
**Interdits** : désactiver lextension ou ignorer les fichiers pour masquer les alertes ; utiliser `eslint-disable` pour contourner accessibilité ou compatibilité. **Interdits** : désactiver lextension ou ignorer les fichiers pour masquer les alertes ; utiliser `eslint-disable` pour contourner accessibilité ou compatibilité.
**Bloc à appliquer systématiquement** (après `npm run lint` sur le frontend ; LeCoffre : inclut jsx-a11y, voir aussi `check:edge-tools-static`) : **Bloc à appliquer systématiquement** (après `npm run lint` sur le frontend ; LeCoffre : inclut jsx-a11y, voir aussi `check:edge-tools-static`) :
``` ```text
Diagnostics IDE (Microsoft Edge Tools / webhint / axe / compat-api) : sur LeCoffre frontend, `npm run lint` ou `npm run check:edge-tools-static` couvre déjà jsx-a11y. Vérifier en complément le panneau Problèmes pour « Microsoft Edge Tools » : compat-api/css (préfixes vendeurs) ; no-inline-styles (SCSS/modules, variables CSS si dynamique) ; autres règles IDE. Même priorité que ESLint. Diagnostics IDE (Microsoft Edge Tools / webhint / axe / compat-api) : sur LeCoffre frontend, `npm run lint` ou `npm run check:edge-tools-static` couvre déjà jsx-a11y. Vérifier en complément le panneau Problèmes pour « Microsoft Edge Tools » : compat-api/css (préfixes vendeurs) ; no-inline-styles (SCSS/modules, variables CSS si dynamique) ; autres règles IDE. Même priorité que ESLint.
``` ```
## Contrainte absolue ## Maintenance de cet agent et périmètre
**NE JAMAIS modifier ni ce fichier ni aucun fichier dans `~/.smartIde/`.** Ta tâche est UNIQUEMENT de corriger les erreurs et warnings 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/<id>/conf.json` (clé `build_dirs` ou documentation du projet). Ne pas modifier ni améliorer la définition de cet agent. - **Référence canonique** : le dépôt applicatif LeCoffre expose `LECOFFRE_REPO/.cursor/agents/fix-lint.md` (registre chemins, blocs prompt, table Edge Tools, `axe:url`, boucle objectif chiffré). Lors dune divergence volontairement validée côté projet, réaligner **ce** fichier pour rester cohérent (respecter markdownlint : `#` unique en tête de corps après frontmatter, tableaux avec espaces autour des `|`, blocs avec langue).
- **Tâche principale de lagent** : corriger les erreurs et warnings de lint dans le **code** des répertoires du projet (`build_dirs` dans `projects/<id>/conf.json`, ou convention du dépôt). Ne pas affaiblir les règles (bypass global, désactivation de règles) sans décision documentée.
* **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. - **Résolution directe** : en cas de problème (toutes criticités), ne pas simplifier, contourner, forcer un résultat en dur, ni créer de bouchons. Corriger à la racine.
## Priorité en amont (règles de qualité et absence de bypass) ## Priorité en amont (règles de qualité et absence de bypass)
@ -161,44 +163,44 @@ Si un déploiement est demandé pendant l'exécution, s'arrêter proprement.
## Autres règles ## Autres règles
* **Règles automatiques :** Respecter les règles ESLint configurées dans `eslint.config.mjs` : - **Règles automatiques :** Respecter les règles ESLint configurées dans `eslint.config.mjs` :
* **TypeScript :** - **TypeScript :**
* `@typescript-eslint/no-explicit-any` : warn - `@typescript-eslint/no-explicit-any` : warn
* `@typescript-eslint/no-unused-vars` : warn (ignorer les variables et arguments commençant par `_`) - `@typescript-eslint/no-unused-vars` : warn (ignorer les variables et arguments commençant par `_`)
* `@typescript-eslint/explicit-function-return-type` : warn - `@typescript-eslint/explicit-function-return-type` : warn
* `@typescript-eslint/explicit-module-boundary-types` : warn - `@typescript-eslint/explicit-module-boundary-types` : warn
* `@typescript-eslint/no-unused-expressions` : error (autorise short-circuit, ternary et tagged templates) - `@typescript-eslint/no-unused-expressions` : error (autorise short-circuit, ternary et tagged templates)
* **React :** - **React :**
* `react/react-in-jsx-scope` : warn - `react/react-in-jsx-scope` : warn
* `react/no-unescaped-entities` : warn - `react/no-unescaped-entities` : warn
* `react/no-children-prop` : off - `react/no-children-prop` : off
* `react-hooks/rules-of-hooks` : error - `react-hooks/rules-of-hooks` : error
* `react-hooks/exhaustive-deps` : warn - `react-hooks/exhaustive-deps` : warn
* **Générales :** - **Générales :**
* `no-console` : warn - `no-console` : warn
* `max-lines` : warn (front) / error (back), max 250 lignes par fichier (lignes vides et commentaires exclus) - `max-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-lines-per-function` : warn (front) / error (back), max 40 lignes par fonction (lignes vides et commentaires exclus)
* `max-params` : max 4 paramètres par fonction - `max-params` : max 4 paramètres par fonction
* `max-depth` : profondeur d'imbrication max 4 - `max-depth` : profondeur d'imbrication max 4
* `complexity` : complexité cyclomatique max 10 - `complexity` : complexité cyclomatique max 10
* `max-nested-callbacks` : max 3 callbacks imbriqués - `max-nested-callbacks` : max 3 callbacks imbriqués
* **TypeScript :** Toujours exécuter un build avant commit. - **TypeScript :** Toujours exécuter un build avant commit.
* **Build :** Vérifier que le build passe sans erreurs. - **Build :** Vérifier que le build passe sans erreurs.
* **Dépassements :** Si un fichier/fonction dépasse les limites : - **Dépassements :** Si un fichier/fonction dépasse les limites :
1. Découper immédiatement si faisable 1. Découper immédiatement si faisable
2. Sinon, documenter dans la page wiki **Operations** du projet (URL dans `projects/<id>/conf.json``git.wiki_url`) avec plan de refactor + échéance 2. Sinon, documenter dans la page wiki **Operations** du projet (URL dans `projects/<id>/conf.json``git.wiki_url`) avec plan de refactor + échéance
3. Ajouter commentaire `// TODO(MAX_LINES)` avec justificatif 3. 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/). - **Référence :** Consulter la page wiki **Code-Standards** ou la doc qualité du projet (wiki ou docs/).
#### 🔒 Sécurité ### Sécurité
* **Validation des entrées :** Toujours valider les entrées utilisateur (class-validator pour DTOs backend, validation frontend). - **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`). - **Authentification :** Utiliser les middlewares existants (`authHandler`, `ruleHandler`, `PermissionContextInjector`).
* **Secrets :** Jamais de secrets en dur. Utiliser `system_configuration` en base de données. - **Secrets :** Jamais de secrets en dur. Utiliser `system_configuration` en base de données.
* **Logging sensible :** Ne jamais logger de données sensibles (RIB, tokens, OTP). Utiliser Winston uniquement. - **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). - **Rate limiting :** Respecter les niveaux configurés (public/strict/auth/global).
* **Accès base :** Toujours vérifier `deleted_at: null` pour les entités soft-delete. - **Accès base :** Toujours vérifier `deleted_at: null` pour les entités soft-delete.
* **Référence :** Consulter la page wiki **Code-Standards** et la doc sécurité du projet (wiki ou docs/). - **Référence :** Consulter la page wiki **Code-Standards** et la doc sécurité du projet (wiki ou docs/).
## Après l'exécution ## Après l'exécution