docs(agents): align fix-lint with LeCoffre Edge Tools guidance, markdownlint
This commit is contained in:
parent
ae4bc14573
commit
8a73fea3c8
@ -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>/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/<id>/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/<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 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/<id>/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
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user