From 8a73fea3c850c42d40dc90ee374e26a2f14c6f13 Mon Sep 17 00:00:00 2001 From: Nicolas Cantu Date: Fri, 10 Apr 2026 05:44:42 +0200 Subject: [PATCH] docs(agents): align fix-lint with LeCoffre Edge Tools guidance, markdownlint --- .smartIde/agents/fix-lint.md | 88 ++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 43 deletions(-) diff --git a/.smartIde/agents/fix-lint.md b/.smartIde/agents/fix-lint.md index 7251b9c..de8b0b1 100644 --- a/.smartIde/agents/fix-lint.md +++ b/.smartIde/agents/fix-lint.md @@ -5,6 +5,8 @@ model: inherit is_background: false --- +# Agent fix-lint (ia_dev) + ## 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. @@ -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. - 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. - **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. | Action | Obligation | -|--------|------------| +| --- | --- | | **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-full` ; pas de chaînes en dur. | | **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)** : | 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. | | `axe/name-role-value` | Bouton ou contrôle sans nom accessible | Texte visible, ou `aria-label` / `aria-labelledby` selon le design system ; éviter de n’exposer qu’un `title` si une meilleure option existe. | -| `axe/aria` (ex. `aria-valid-attr-value`) | Valeur ARIA invalide | Utiliser des valeurs énumérées valides pour l’attribut 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 l’IDE 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. | **Interdits** : désactiver l’extension 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`) : -``` +```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. ``` -## 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//conf.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. +- **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 d’une 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 l’agent** : corriger les erreurs et warnings de lint dans le **code** des répertoires du projet (`build_dirs` dans `projects//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 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) @@ -161,44 +163,44 @@ Si un déploiement est demandé pendant l'exécution, s'arrêter proprement. ## 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` : warn - * `react/no-unescaped-entities` : warn - * `react/no-children-prop` : off - * `react-hooks/rules-of-hooks` : error - * `react-hooks/exhaustive-deps` : warn - * **Générales :** - * `no-console` : warn - * `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-params` : max 4 paramètres par fonction - * `max-depth` : profondeur d'imbrication max 4 - * `complexity` : complexité cyclomatique max 10 - * `max-nested-callbacks` : max 3 callbacks imbriqués -* **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 : +- **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` : warn + - `react/no-unescaped-entities` : warn + - `react/no-children-prop` : off + - `react-hooks/rules-of-hooks` : error + - `react-hooks/exhaustive-deps` : warn + - **Générales :** + - `no-console` : warn + - `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-params` : max 4 paramètres par fonction + - `max-depth` : profondeur d'imbrication max 4 + - `complexity` : complexité cyclomatique max 10 + - `max-nested-callbacks` : max 3 callbacks imbriqués +- **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 : 1. Découper immédiatement si faisable 2. Sinon, documenter dans la page wiki **Operations** du projet (URL dans `projects//conf.json` → `git.wiki_url`) avec plan de refactor + échéance 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). -* **Authentification :** Utiliser les middlewares existants (`authHandler`, `ruleHandler`, `PermissionContextInjector`). -* **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. -* **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. -* **Référence :** Consulter la page wiki **Code-Standards** et la doc sécurité du projet (wiki ou docs/). +- **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_configuration` en 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: 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/). ## Après l'exécution