From cc3f97931dee6dba63a20e4e7637791a0a4716e9 Mon Sep 17 00:00:00 2001 From: Nicolas Cantu Date: Thu, 9 Apr 2026 22:49:57 +0200 Subject: [PATCH] =?UTF-8?q?docs(agents):=20fix-lint=20=E2=80=94=20Edge=20T?= =?UTF-8?q?ools=20diagnostics=20(webhint,=20axe,=20compat-api=20CSS)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .smartIde/agents/fix-lint.md | 29 ++++++++++++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/.smartIde/agents/fix-lint.md b/.smartIde/agents/fix-lint.md index 220cae5..1490d73 100644 --- a/.smartIde/agents/fix-lint.md +++ b/.smartIde/agents/fix-lint.md @@ -39,7 +39,7 @@ Chacune des actions ci-dessous est **obligatoire** et doit être réalisée **de | **Réduction de complexité** | Réduire complexité cyclomatique, profondeur, paramètres ; extraire fonctions/composants. | | **Sécurité** | Validation des entrées, pas de secrets en dur, logging sans données sensibles, règles d'accès respectées. | | **Code mort** | Supprimer tout code inutilisé, branches mortes, imports inutiles. | -| **Lint** | Corriger toutes les **erreurs** et tous les **warnings** (même priorité ; **warnings = erreurs**). Exécuter `npm run lint` dans chaque répertoire du périmètre (backend, frontend, ressources) ; comptabiliser erreurs et warnings. **Interdit** : conclure « lint non applicable » sans justification stricte (tâche sans code source) — avec des sources, le lint est **normalement toujours** applicable. **Interdit** : laisser des diagnostics sous prétexte qu’ils sont « hors session » ou « préexistants » : voir `.smartIde/rules/cloture-lint.mdc` — section **Diagnostics préexistants / hors périmètre de la session**. Si au moins un diagnostic : **corriger au moins 5 problèmes** (cumul erreurs + warnings) dans l’exécution, sauf moins de 5 diagnostics au total (alors tout corriger). En clôture, « Lint : Réalisées » uniquement si **0 erreur et 0 warning** pour chaque répertoire ; sinon « Non réalisées encore » avec le détail par répertoire (voir `.smartIde/rules/cloture-lint.mdc`, dont la même section). | +| **Lint** | Corriger toutes les **erreurs** et tous les **warnings** (même priorité ; **warnings = erreurs**). Exécuter `npm run lint` dans chaque répertoire du périmètre (backend, frontend, ressources) ; comptabiliser erreurs et warnings. Sur le **frontend**, traiter aussi les diagnostics **Microsoft Edge Tools** (webhint, axe, compat-api CSS) — voir section **Diagnostics IDE : Microsoft Edge Tools**. **Interdit** : conclure « lint non applicable » sans justification stricte (tâche sans code source) — avec des sources, le lint est **normalement toujours** applicable. **Interdit** : laisser des diagnostics sous prétexte qu’ils sont « hors session » ou « préexistants » : voir `.smartIde/rules/cloture-lint.mdc` — section **Diagnostics préexistants / hors périmètre de la session**. Si au moins un diagnostic : **corriger au moins 5 problèmes** (cumul erreurs + warnings) dans l’exécution, sauf moins de 5 diagnostics au total (alors tout corriger). En clôture, « Lint : Réalisées » uniquement si **0 erreur et 0 warning** pour chaque répertoire **et** diagnostics Edge Tools frontend traités ; sinon « Non réalisées encore » avec le détail par répertoire (voir `.smartIde/rules/cloture-lint.mdc`, dont la même section). | | **Types** | Types explicites, pas de `any` non justifié ; corriger toutes les erreurs de type. | | **Compilation** | Build et typecheck OK sur chaque répertoire du périmètre. | | **Documentation** | Mise à jour réelle de la doc (docs/, wiki) selon `.smartIde/agents/docupdate.md`. | @@ -61,6 +61,31 @@ Corrige toutes les erreurs et tous les warnings de lint du projet (chaque réper - Voir `.smartIde/rules/cloture-lint.mdc` : pas de « non applicable » par convenance, **warnings = erreurs**, **minimum 5 corrections** lorsqu’il existe des diagnostics (sauf moins de 5 au total → tout corriger), décompte erreurs **et** warnings en clôture ; section **Diagnostics préexistants / hors périmètre de la session** : corriger tout diagnostic du périmètre même sans lien avec le diff du run. +## Diagnostics IDE : Microsoft Edge Tools (webhint, axe, compat-api CSS) + +Ces signalements **ne sont pas** produits par `npm run lint` (ESLint). Ils proviennent en général de l’extension **Microsoft Edge Tools** dans l’IDE : **webhint** (ex. `no-inline-styles`), **axe** (accessibilité), **compat-api** (compatibilité navigateurs / MDN). + +**Obligation** : pour tout projet avec un répertoire **frontend** dans `build_dirs`, après le lint ESLint, **vérifier et corriger** les problèmes dont la source est **Microsoft Edge Tools** dans le panneau Problèmes du workspace (même priorité que les erreurs et warnings ESLint). Ne pas clôturer en « lint OK » si ces diagnostics subsistent sur le frontend alors qu’ils sont corrigeables. + +**Vérification** : parcourir les fichiers du frontend listés avec la source « Microsoft Edge Tools » ; relever les codes de règle (`compat-api/css`, `axe/name-role-value`, `axe/aria`, `no-inline-styles`, etc.). + +**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}"`. | +| `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) : + +``` +Diagnostics IDE (Microsoft Edge Tools / webhint / axe / compat-api) : vérifier le panneau Problèmes pour la source « Microsoft Edge Tools » sur le frontend. Corriger compat-api/css (préfixes vendeurs) ; axe/name-role-value (noms accessibles) ; axe/aria (valeurs valides) ; no-inline-styles (feuilles de style, variables CSS si dynamique). Même priorité que ESLint. +``` + ## Contrainte absolue **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. @@ -83,6 +108,8 @@ Corrige toutes les erreurs et tous les warnings de lint du projet (chaque réper Exécuter immédiatement `npm run lint` dans **chaque** application du périmètre (chaque `build_dir` : backend, frontend, ressources partagées pour LeCoffre) pour lister **erreurs et warnings** — **tout** le périmètre déclaré, **pas** seulement le sous-projet modifié dans la session. Ne pas modifier de fichiers avant d'avoir la liste complète (erreurs + warnings) pour chaque répertoire. Ne négliger aucun projet. +Ensuite, pour chaque répertoire **frontend** du périmètre : relever dans le panneau Problèmes du workspace les diagnostics dont la source est **Microsoft Edge Tools** (webhint, axe, compat-api) et les inclure dans le plan de corrections avec la même priorité que le lint ESLint (voir section **Diagnostics IDE : Microsoft Edge Tools**). + ## Périmètre Les répertoires à traiter (backend, frontend, ressources partagées, etc.) sont ceux du projet courant. Consulter `projects//conf.json` (clé `build_dirs`) ; l'id est résolu par MAIL_TO ou AI_AGENT_TOKEN. Sinon, suivre la structure du dépôt (ex. backend, frontend, shared ou noms définis dans la doc du projet). **Interdit** de réduire ce périmètre au seul arbre touché par la tâche en cours.