Initial commit
This commit is contained in:
18
.claude-plugin/plugin.json
Normal file
18
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
{
|
||||||
|
"name": "leapmultix-dev-audit",
|
||||||
|
"description": "Audit pack: accessibility, i18n, security, and governance helpers",
|
||||||
|
"version": "1.0.0",
|
||||||
|
"author": {
|
||||||
|
"name": "Julien LE SAUX",
|
||||||
|
"email": "contact@jls42.org"
|
||||||
|
},
|
||||||
|
"skills": [
|
||||||
|
"./skills"
|
||||||
|
],
|
||||||
|
"agents": [
|
||||||
|
"./agents"
|
||||||
|
],
|
||||||
|
"commands": [
|
||||||
|
"./commands"
|
||||||
|
]
|
||||||
|
}
|
||||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
|||||||
|
# leapmultix-dev-audit
|
||||||
|
|
||||||
|
Audit pack: accessibility, i18n, security, and governance helpers
|
||||||
53
agents/accessibility-auditor.md
Normal file
53
agents/accessibility-auditor.md
Normal file
@@ -0,0 +1,53 @@
|
|||||||
|
---
|
||||||
|
name: accessibility-auditor
|
||||||
|
description: Auditeur d'accessibilité expert pour la conformité WCAG 2.1 AA. Utiliser de manière proactive après des modifications de l'interface utilisateur ou pour des audits complets.
|
||||||
|
tools: Read, Grep, Glob, Bash, WebSearch
|
||||||
|
model: inherit
|
||||||
|
color: orange
|
||||||
|
---
|
||||||
|
|
||||||
|
Vous êtes un auditeur d'accessibilité d'élite avec une expertise approfondie de la conformité WCAG 2.1 Niveau AA. Votre mission est d'identifier les obstacles à l'accessibilité et de fournir des stratégies de remédiation exploitables basées sur le code existant du projet `leapmultix`.
|
||||||
|
|
||||||
|
## Contexte du projet : leapmultix
|
||||||
|
|
||||||
|
- **Public cible** : Enfants de 6 à 12 ans.
|
||||||
|
- **Modules Clés** : `js/accessibility.js`, `js/keyboard-navigation.js`, `js/speech.js`.
|
||||||
|
- **Normes** : Conformité WCAG 2.1 Niveau AA obligatoire.
|
||||||
|
|
||||||
|
## Vos Principes d'Audit Fondamentaux
|
||||||
|
|
||||||
|
Au lieu de vous fier à des exemples de code statiques, basez votre audit sur les principes suivants, en utilisant le code vivant du projet comme source de vérité.
|
||||||
|
|
||||||
|
### 1. POUR (Perceptible, Utilisable, Compréhensible, Robuste)
|
||||||
|
|
||||||
|
- **Perceptible** : L'information est-elle présentée via plusieurs modalités (visuelle, textuelle, auditive) ?
|
||||||
|
- **Utilisable** : Tous les composants sont-ils accessibles et contrôlables au clavier ?
|
||||||
|
- **Compréhensible** : Les étiquettes, instructions et messages d'erreur sont-ils clairs et simples ?
|
||||||
|
- **Robuste** : Le code utilise-t-il du HTML sémantique et des attributs ARIA corrects pour assurer la compatibilité avec les technologies d'assistance ?
|
||||||
|
|
||||||
|
### 2. Navigation au Clavier
|
||||||
|
|
||||||
|
- **Ordre de Tabulation** : L'ordre de focus est-il logique et intuitif ?
|
||||||
|
- **Pièges à Clavier** : L'utilisateur peut-il s'échapper de tous les composants (modales, menus) avec la touche `Escape` ?
|
||||||
|
- **Indicateurs de Focus** : Le focus est-il toujours clairement visible ?
|
||||||
|
- **Raccourcis** : Les raccourcis sont-ils documentés et ne rentrent-ils pas en conflit avec les commandes du navigateur/lecteur d'écran ?
|
||||||
|
|
||||||
|
### 3. Compatibilité avec les Lecteurs d'Écran
|
||||||
|
|
||||||
|
- **Étiquettes ARIA** : Les contrôles non-standards ont-ils des `aria-label` descriptifs ? Les icônes sont-elles cachées avec `aria-hidden="true"` ?
|
||||||
|
- **Régions Live** : Les mises à jour dynamiques (scores, minuteurs, erreurs) sont-elles annoncées via des régions `aria-live` ?
|
||||||
|
- **États** : Les changements d'état (ex: `aria-pressed`, `aria-expanded`, `aria-invalid`) sont-ils correctement gérés ?
|
||||||
|
|
||||||
|
## Flux de travail de l'Audit
|
||||||
|
|
||||||
|
1. **Analyse Statique :** Utilisez les outils pour lire et analyser les fichiers pertinents (`html`, `css`, `js`).
|
||||||
|
2. **Exécution de Scripts :** Exécutez les scripts de test d'accessibilité du projet (`npm run audit:accessibility`).
|
||||||
|
3. **Rapport :** Structurez vos conclusions en utilisant le template de rapport défini.
|
||||||
|
|
||||||
|
## Format de Sortie Requis (CRITIQUE)
|
||||||
|
|
||||||
|
Pour générer ton rapport final, tu DOIS :
|
||||||
|
|
||||||
|
1. Lire le fichier `.claude/skills/report-template-accessibility.md`.
|
||||||
|
2. Utiliser son contenu comme template exact pour ta réponse.
|
||||||
|
3. Remplir chaque section du template avec tes conclusions d'audit. Ne dévie pas de ce format.
|
||||||
24
agents/i18n-coordinator.md
Normal file
24
agents/i18n-coordinator.md
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
---
|
||||||
|
name: i18n-coordinator
|
||||||
|
description: Coordinateur expert en internationalisation. À utiliser de manière proactive lors de la modification de traductions ou de l'ajout de texte dans l'interface utilisateur.
|
||||||
|
tools: Read, Write, Bash, Grep, Glob
|
||||||
|
model: inherit
|
||||||
|
---
|
||||||
|
|
||||||
|
Vous êtes un coordinateur d'internationalisation expert.
|
||||||
|
|
||||||
|
## Contexte du projet : Système i18n de leapmultix
|
||||||
|
|
||||||
|
- **Langue de référence :** Français (`i18n/fr.json`).
|
||||||
|
- **Scripts clés :** `npm run i18n:compare`, `npm run i18n:unused`, `scripts/cleanup-i18n-keys.cjs`.
|
||||||
|
|
||||||
|
## Vos Principes de Coordination
|
||||||
|
|
||||||
|
1. **Synchronisation :** La priorité absolue est de maintenir les fichiers `en.json` et `es.json` parfaitement synchronisés avec `fr.json`. Utilisez `npm run i18n:compare` pour détecter les clés manquantes, supplémentaires, ou les valeurs vides.
|
||||||
|
2. **Qualité :** Ne laissez jamais de valeurs vides (`""`, `null`). Assurez la cohérence des types (chaîne vs. tableau) entre les langues.
|
||||||
|
3. **Nettoyage :** Utilisez `npm run i18n:unused` pour identifier et proposer la suppression des clés obsolètes.
|
||||||
|
4. **Bonnes Pratiques :** Appliquez les conventions de nommage (ex: `namespace.page.element`) et utilisez l'interpolation (`{variable}`) pour les chaînes dynamiques.
|
||||||
|
|
||||||
|
## Format de Sortie Requis (CRITIQUE)
|
||||||
|
|
||||||
|
Pour générer votre rapport, tu DOIS lire et utiliser le template du fichier `.claude/skills/report-template-i18n.md`.
|
||||||
25
agents/pwa-expert.md
Normal file
25
agents/pwa-expert.md
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
---
|
||||||
|
name: pwa-expert
|
||||||
|
description: Spécialiste des Progressive Web App pour les service workers, la fonctionnalité hors ligne et la mise en cache. À utiliser pour les modifications de PWA ou les audits avant mise en production.
|
||||||
|
tools: Read, Write, Bash, Grep, Glob, WebSearch
|
||||||
|
model: inherit
|
||||||
|
color: cyan
|
||||||
|
---
|
||||||
|
|
||||||
|
Vous êtes un spécialiste PWA d'élite.
|
||||||
|
|
||||||
|
## Contexte du projet : leapmultix
|
||||||
|
|
||||||
|
- **Fichiers Clés :** `sw.js` (Service Worker), `manifest.json`, `cache-updater.js`.
|
||||||
|
- **Objectifs :** Scores Lighthouse > 90, fonctionnalité hors ligne robuste, stratégie de cache efficace.
|
||||||
|
|
||||||
|
## Vos Principes d'Expertise PWA
|
||||||
|
|
||||||
|
1. **Service Worker & Cache :** La priorité est une stratégie de cache robuste. Vérifiez la gestion des versions du cache, la séparation cache-first (statique) vs network-first (dynamique), et le nettoyage des anciens caches.
|
||||||
|
2. **Fonctionnalité Hors Ligne :** Testez systématiquement le comportement de l'application en mode hors ligne. Assurez-vous que le repli (`offline.html`) fonctionne et que l'expérience utilisateur reste cohérente.
|
||||||
|
3. **Manifeste Web :** Assurez-vous que `manifest.json` est complet et valide, incluant les icônes (notamment masquables), les captures d'écran et les couleurs de thème pour une expérience d'installation optimale.
|
||||||
|
4. **Optimisation Lighthouse :** Auditez l'application avec Lighthouse et concentrez-vous sur les opportunités spécifiques aux PWA pour atteindre les scores cibles.
|
||||||
|
|
||||||
|
## Format de Sortie Requis (CRITIQUE)
|
||||||
|
|
||||||
|
Pour générer votre rapport d'audit, tu DOIS lire et utiliser le template du fichier `.claude/skills/report-template-pwa.md`.
|
||||||
23
agents/web-research-specialist.md
Normal file
23
agents/web-research-specialist.md
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
---
|
||||||
|
name: web-research-specialist
|
||||||
|
description: Utiliser cet agent pour recueillir des informations sur internet via des recherches web, la récupération de contenu, ou l'interrogation de documentation technique.
|
||||||
|
tools: Bash, Glob, Grep, Read, WebFetch, TodoWrite, WebSearch, BashOutput, mcp__context7__resolve-library-id, mcp__context7__get-library-docs, Skill, SlashCommand
|
||||||
|
model: inherit
|
||||||
|
color: pink
|
||||||
|
---
|
||||||
|
|
||||||
|
Vous êtes un spécialiste expert en recherche sur le Web.
|
||||||
|
|
||||||
|
## Votre Méthodologie de Recherche
|
||||||
|
|
||||||
|
1. **Analyse de la Requête :** Comprendre le besoin d'information fondamental.
|
||||||
|
2. **Stratégie de Sélection d'Outils :** Commencez par `WebSearch` pour les requêtes générales, `WebFetch` pour les URLs spécifiques, et `MCP Context7` pour la documentation technique/de code.
|
||||||
|
3. **Synthèse de l'Information :** Organisez les résultats de manière logique, croisez les sources, et mettez en évidence les informations clés.
|
||||||
|
|
||||||
|
## Format de Sortie Requis (CRITIQUE)
|
||||||
|
|
||||||
|
Pour générer votre résumé de recherche, vous DEVEZ :
|
||||||
|
|
||||||
|
1. Lire le fichier `.claude/skills/report-template-web-research.md`.
|
||||||
|
2. Utiliser son contenu comme template exact pour votre réponse.
|
||||||
|
3. Remplir chaque section du template avec vos résultats.
|
||||||
40
commands/audit-config.md
Normal file
40
commands/audit-config.md
Normal file
@@ -0,0 +1,40 @@
|
|||||||
|
---
|
||||||
|
description: Audits Skills, Subagents or Slash Commands for compliance with best practices
|
||||||
|
---
|
||||||
|
|
||||||
|
# Audit de Conformité
|
||||||
|
|
||||||
|
Utilisez l'agent-architecte pour auditer la conformité des composants de configuration.
|
||||||
|
|
||||||
|
## Arguments
|
||||||
|
|
||||||
|
- `skills` - Auditer tous les Skills
|
||||||
|
- `agents` ou `subagents` - Auditer tous les Subagents
|
||||||
|
- `commands` ou `slash` - Auditer tous les Slash Commands
|
||||||
|
- `all` - Auditer tous les composants
|
||||||
|
- `[nom-composant]` - Auditer un composant spécifique
|
||||||
|
|
||||||
|
## Exemples
|
||||||
|
|
||||||
|
```bash
|
||||||
|
/audit-config skills # Audite tous les skills
|
||||||
|
/audit-config agents # Audite tous les agents
|
||||||
|
/audit-config all # Audit complet
|
||||||
|
/audit-config accessibility # Audite le skill accessibility
|
||||||
|
```
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
Je vais maintenant utiliser l'agent-architecte pour auditer : **$ARGUMENTS**
|
||||||
|
|
||||||
|
Utilise l'agent `agent-architecte` avec le workflow Mode 2 (Audit de Composants Existants) pour :
|
||||||
|
|
||||||
|
1. Identifier les composants concernés ($ARGUMENTS)
|
||||||
|
2. Auditer chaque composant avec les checklists de `config-compliance-checker`
|
||||||
|
3. Générer un rapport consolidé avec :
|
||||||
|
- Scores de conformité
|
||||||
|
- Problèmes classés par criticité (🔴🟡🔵)
|
||||||
|
- Top corrections prioritaires
|
||||||
|
- Diffs proposés pour corrections
|
||||||
|
|
||||||
|
Le rapport doit être structuré et exploitable pour améliorer la qualité des configurations.
|
||||||
81
plugin.lock.json
Normal file
81
plugin.lock.json
Normal file
@@ -0,0 +1,81 @@
|
|||||||
|
{
|
||||||
|
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||||
|
"pluginId": "gh:jls42/leapmultix:leapmultix-marketplace/leapmultix-dev-audit",
|
||||||
|
"normalized": {
|
||||||
|
"repo": null,
|
||||||
|
"ref": "refs/tags/v20251128.0",
|
||||||
|
"commit": "7893ad2f3eba7aec37e0ae403496b95dbc3435ca",
|
||||||
|
"treeHash": "34a886dbc59ecb9aadad7d048b3a1ec551e776dfd2d1233875c12f57bf50c76b",
|
||||||
|
"generatedAt": "2025-11-28T10:19:10.158387Z",
|
||||||
|
"toolVersion": "publish_plugins.py@0.2.0"
|
||||||
|
},
|
||||||
|
"origin": {
|
||||||
|
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||||
|
"branch": "master",
|
||||||
|
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||||
|
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||||
|
},
|
||||||
|
"manifest": {
|
||||||
|
"name": "leapmultix-dev-audit",
|
||||||
|
"description": "Audit pack: accessibility, i18n, security, and governance helpers",
|
||||||
|
"version": "1.0.0"
|
||||||
|
},
|
||||||
|
"content": {
|
||||||
|
"files": [
|
||||||
|
{
|
||||||
|
"path": "README.md",
|
||||||
|
"sha256": "1653f949951d62c9df490eba1a36d099eccaa08e84f20467c71cb8efcefa02f1"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "agents/web-research-specialist.md",
|
||||||
|
"sha256": "ee848a442eaa47ae540bac57ce4d8b759fdda5a304689a2fa4d28c7b0c229796"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "agents/accessibility-auditor.md",
|
||||||
|
"sha256": "e1a5ccf3ae2117641d04d158af7c527e9422202cb56500d1fa0dfc9ea911e8e3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "agents/pwa-expert.md",
|
||||||
|
"sha256": "b9d046e78edfe801a64edc5f58f2cd3daf15b43a182f89b8edac3f3a3d3779a6"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "agents/i18n-coordinator.md",
|
||||||
|
"sha256": "c824ef16ddfb007d4ac830e171789ebca91ab4d03e92fb3721798a292fc779c2"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": ".claude-plugin/plugin.json",
|
||||||
|
"sha256": "6bec4612620d2cbc1b130afcf7d16e0794b99c0f5b52487a77bde41e19dcdd47"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "commands/audit-config.md",
|
||||||
|
"sha256": "129beda55e91e48f1680d8af6babe3a6c857de396ad2316606b68a5180972e43"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/i18n-sync/SKILL.md",
|
||||||
|
"sha256": "3f4903c3df10d0daf7d26080864207dc42a2bcfbbc05d82338c1d34933fcffbd"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/auditing-security/SKILL.md",
|
||||||
|
"sha256": "17e064d7336d2e70988cf3ad28133cf2a96fcbd922f1e464519a89df30b997d3"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/pwa-service-worker/SKILL.md",
|
||||||
|
"sha256": "4756ee8cbe4e310653218976ae893c38ecd2357e335c21c32e2f4d2b21a59a3b"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/dependency-management/SKILL.md",
|
||||||
|
"sha256": "04dcd20b3e6679803812fe2e3d505c27481c830c37e5a3367eff6824af7b2435"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"path": "skills/validating-accessibility/SKILL.md",
|
||||||
|
"sha256": "f5d0639750a96fb054d936a3361015464e3bcbca3c29bfa41c76f0a37e5f13cd"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"dirSha256": "34a886dbc59ecb9aadad7d048b3a1ec551e776dfd2d1233875c12f57bf50c76b"
|
||||||
|
},
|
||||||
|
"security": {
|
||||||
|
"scannedAt": null,
|
||||||
|
"scannerVersion": null,
|
||||||
|
"flags": []
|
||||||
|
}
|
||||||
|
}
|
||||||
214
skills/auditing-security/SKILL.md
Normal file
214
skills/auditing-security/SKILL.md
Normal file
@@ -0,0 +1,214 @@
|
|||||||
|
---
|
||||||
|
name: auditing-security
|
||||||
|
description: Audits application security (XSS, CSP, vulnerable dependencies, CORS). Use before releases, after adding dependencies, or modifying security-utils.js
|
||||||
|
allowed-tools: Read, Grep, Glob, Bash, WebSearch
|
||||||
|
---
|
||||||
|
|
||||||
|
# Security Audit
|
||||||
|
|
||||||
|
Audite la sécurité de l'application web selon standards OWASP et best practices.
|
||||||
|
|
||||||
|
## Table des matières
|
||||||
|
|
||||||
|
- [Quand utiliser](#quand-utiliser)
|
||||||
|
- [Domaines de sécurité](#domaines-de-sécurité)
|
||||||
|
- [Checklist sécurité](#checklist-sécurité)
|
||||||
|
- [Outils d'audit](#outils-daudit)
|
||||||
|
- [En cas de doute](#en-cas-de-doute)
|
||||||
|
|
||||||
|
## Quand utiliser
|
||||||
|
|
||||||
|
- Avant chaque release en production
|
||||||
|
- Après ajout/mise à jour dépendances npm
|
||||||
|
- Modifications de `security-utils.js`
|
||||||
|
- Warnings eslint-plugin-security
|
||||||
|
- Avant commit manipulant HTML dynamique
|
||||||
|
- Ajout de scripts externes (CDN, analytics)
|
||||||
|
|
||||||
|
## Domaines de sécurité
|
||||||
|
|
||||||
|
### 1. XSS (Cross-Site Scripting) Prevention
|
||||||
|
|
||||||
|
**Règle absolue : Utiliser security-utils.js**
|
||||||
|
|
||||||
|
Trouve security-utils.js pour voir fonctions disponibles :
|
||||||
|
|
||||||
|
- `appendSanitizedHTML()` - Insérer HTML dynamique
|
||||||
|
- `createSafeElement()` - Créer élément avec contenu sécurisé
|
||||||
|
- `setSafeMessage()` - Définir texte (pas HTML)
|
||||||
|
|
||||||
|
**Dangers :**
|
||||||
|
|
||||||
|
- `innerHTML` avec user input → XSS
|
||||||
|
- Fonctions d'exécution dynamique avec données externes
|
||||||
|
- Event handlers depuis user input
|
||||||
|
|
||||||
|
**Exceptions sécurisées :**
|
||||||
|
|
||||||
|
- `innerHTML = ''` (nettoyage)
|
||||||
|
- `getTranslation()` output (contenu interne)
|
||||||
|
|
||||||
|
### 2. Content Security Policy (CSP)
|
||||||
|
|
||||||
|
**Principe : Meta tag CSP dans index.html**
|
||||||
|
|
||||||
|
Examine index.html pour voir configuration CSP actuelle.
|
||||||
|
|
||||||
|
**Baseline restrictive :**
|
||||||
|
|
||||||
|
- `default-src 'self'`
|
||||||
|
- Pas de `'unsafe-eval'` dans script-src
|
||||||
|
- `'unsafe-inline'` limité au strict nécessaire
|
||||||
|
- `frame-ancestors 'none'` pour prévenir clickjacking
|
||||||
|
|
||||||
|
**Scripts externes :**
|
||||||
|
|
||||||
|
- Toujours `crossorigin="anonymous"`
|
||||||
|
- Integrity hashes pour bibliothèques statiques
|
||||||
|
- PAS d'integrity pour analytics (auto-update)
|
||||||
|
- Documenter exceptions avec commentaires
|
||||||
|
|
||||||
|
### 3. Dependency Vulnerabilities
|
||||||
|
|
||||||
|
**Commandes audit :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm audit # Scan vulnérabilités
|
||||||
|
npm audit --json # Rapport détaillé
|
||||||
|
npm audit fix # Fix auto (patch/minor)
|
||||||
|
npm audit fix --force # Fix breaking (attention!)
|
||||||
|
```
|
||||||
|
|
||||||
|
**Niveaux de sévérité :**
|
||||||
|
|
||||||
|
- **Critical/High** : Fix immédiatement avant release
|
||||||
|
- **Moderate** : Fix dans sprint suivant
|
||||||
|
- **Low** : Monitorer, fix si possible
|
||||||
|
|
||||||
|
**Vérifier :**
|
||||||
|
|
||||||
|
- Pas de dépendances deprecated
|
||||||
|
- Versions à jour (pas trop anciennes)
|
||||||
|
- Licences compatibles
|
||||||
|
|
||||||
|
### 4. HTTPS et Mixed Content
|
||||||
|
|
||||||
|
**Vérifier :**
|
||||||
|
|
||||||
|
- HTTPS obligatoire en production
|
||||||
|
- Pas de resources HTTP (mixed content)
|
||||||
|
- Redirection HTTP → HTTPS
|
||||||
|
- HSTS header
|
||||||
|
|
||||||
|
Examine configuration serveur ou CDN.
|
||||||
|
|
||||||
|
### 5. Secrets et Credentials
|
||||||
|
|
||||||
|
**Règles :**
|
||||||
|
|
||||||
|
- **JAMAIS** committer secrets (API keys, tokens, passwords)
|
||||||
|
- **JAMAIS** stocker passwords en LocalStorage
|
||||||
|
- Utiliser variables d'environnement
|
||||||
|
- .gitignore pour fichiers sensibles (.env, credentials.json)
|
||||||
|
|
||||||
|
**Vérifier :**
|
||||||
|
|
||||||
|
- Pas de secrets hardcodés dans code
|
||||||
|
- .env dans .gitignore
|
||||||
|
- Terraform state pas committé
|
||||||
|
|
||||||
|
### 6. LocalStorage Security
|
||||||
|
|
||||||
|
**Données sensibles :**
|
||||||
|
|
||||||
|
- **JAMAIS** tokens d'authentification
|
||||||
|
- **JAMAIS** passwords ou PII
|
||||||
|
- OK pour préférences utilisateur non sensibles
|
||||||
|
|
||||||
|
**Vérifier :**
|
||||||
|
|
||||||
|
- storage.js utilise localStorage correctement
|
||||||
|
- Pas de données sensibles stockées
|
||||||
|
- Données validées avant lecture
|
||||||
|
|
||||||
|
## Checklist sécurité
|
||||||
|
|
||||||
|
- [ ] Tous `innerHTML` utilisent `appendSanitizedHTML()` ou justifiés
|
||||||
|
- [ ] Pas de fonctions d'exécution dynamique avec données externes
|
||||||
|
- [ ] Meta tag CSP présent dans index.html
|
||||||
|
- [ ] `crossorigin="anonymous"` sur scripts externes
|
||||||
|
- [ ] `npm audit` sans Critical/High
|
||||||
|
- [ ] Pas de secrets hardcodés
|
||||||
|
- [ ] Pas de données sensibles en LocalStorage
|
||||||
|
- [ ] HTTPS en production
|
||||||
|
- [ ] Pas de mixed content
|
||||||
|
- [ ] Tests sécurité passent
|
||||||
|
|
||||||
|
## Outils d'audit
|
||||||
|
|
||||||
|
**ESLint Security :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run lint # Inclut eslint-plugin-security
|
||||||
|
```
|
||||||
|
|
||||||
|
**Dependency Scan :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm audit
|
||||||
|
```
|
||||||
|
|
||||||
|
**Lighthouse Security Audit :**
|
||||||
|
|
||||||
|
- Lance Chrome DevTools → Lighthouse
|
||||||
|
- Vérifie section Security
|
||||||
|
- Score doit être 100
|
||||||
|
|
||||||
|
**OWASP ZAP (optionnel) :**
|
||||||
|
|
||||||
|
- Scan automatisé pour vulnérabilités web
|
||||||
|
- Tests de pénétration
|
||||||
|
|
||||||
|
## En cas de doute
|
||||||
|
|
||||||
|
**Source :** security-utils.js + CLAUDE.md
|
||||||
|
|
||||||
|
**Fichiers clés :**
|
||||||
|
|
||||||
|
1. `js/security-utils.js` - Fonctions sécurité du projet
|
||||||
|
2. `eslint.config.js` - Règles security ESLint
|
||||||
|
3. `index.html` - Configuration CSP
|
||||||
|
4. `CLAUDE.md` - Guidelines sécurité
|
||||||
|
|
||||||
|
**Règles absolues :**
|
||||||
|
|
||||||
|
1. TOUJOURS utiliser security-utils.js pour manipulation DOM
|
||||||
|
2. TOUJOURS audit avant release (`npm audit`)
|
||||||
|
3. JAMAIS `innerHTML` avec user input direct
|
||||||
|
4. JAMAIS stocker données sensibles en LocalStorage
|
||||||
|
5. JAMAIS scripts externes sans `crossorigin="anonymous"`
|
||||||
|
|
||||||
|
**Workflow minimal avant commit :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run lint # ESLint security rules
|
||||||
|
npm audit # Dependency check
|
||||||
|
npm test # Security tests
|
||||||
|
```
|
||||||
|
|
||||||
|
**Workflow complet avant release :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run verify # Full quality gate
|
||||||
|
npm audit --audit-level=moderate # Dependency audit
|
||||||
|
# Lighthouse security audit
|
||||||
|
# Review index.html CSP config
|
||||||
|
```
|
||||||
|
|
||||||
|
**Red flags (arrêter immédiatement) :**
|
||||||
|
|
||||||
|
- Fonctions d'exécution dynamique avec données externes
|
||||||
|
- `innerHTML = userInput`
|
||||||
|
- Tokens/passwords en LocalStorage
|
||||||
|
- npm audit Critical/High
|
||||||
|
- Scripts CDN sans crossorigin
|
||||||
159
skills/dependency-management/SKILL.md
Normal file
159
skills/dependency-management/SKILL.md
Normal file
@@ -0,0 +1,159 @@
|
|||||||
|
---
|
||||||
|
name: managing-dependencies
|
||||||
|
description: Manages npm dependencies (audit, updates, breaking changes, lockfile). Use before releases, after adding packages, or monthly for maintenance
|
||||||
|
allowed-tools: Read, Grep, Glob, Bash
|
||||||
|
---
|
||||||
|
|
||||||
|
# Gestion des Dépendances
|
||||||
|
|
||||||
|
Gère dépendances npm de manière sécurisée (audit, mises à jour, lockfile).
|
||||||
|
|
||||||
|
## Table des matières
|
||||||
|
|
||||||
|
- [Quand utiliser](#quand-utiliser)
|
||||||
|
- [Scripts npm](#scripts-npm)
|
||||||
|
- [Workflows essentiels](#workflows-essentiels)
|
||||||
|
- [Gestion vulnérabilités](#gestion-vulnérabilités)
|
||||||
|
- [Migrations majeures](#migrations-majeures)
|
||||||
|
- [Bonnes pratiques](#bonnes-pratiques)
|
||||||
|
- [Checklist](#checklist)
|
||||||
|
- [En cas de doute](#en-cas-de-doute)
|
||||||
|
|
||||||
|
## Quand utiliser
|
||||||
|
|
||||||
|
- Avant chaque release production
|
||||||
|
- Après ajout nouvelles dépendances
|
||||||
|
- Mensuellement maintenance proactive
|
||||||
|
- Quand vulnérabilités signalées
|
||||||
|
- Migrations versions majeures
|
||||||
|
|
||||||
|
## Scripts npm
|
||||||
|
|
||||||
|
- `npm audit` - Vue d'ensemble sécurité
|
||||||
|
- `npm audit --json` - Rapport détaillé
|
||||||
|
- `npm audit fix` - Fix auto (patch/minor)
|
||||||
|
- `npm outdated` - Packages à mettre à jour
|
||||||
|
- `npm update` - Update patches/minors
|
||||||
|
- `npm ls` / `npm ls --depth=0` - Arbre dépendances
|
||||||
|
|
||||||
|
## Workflows essentiels
|
||||||
|
|
||||||
|
**Audit sécurité :**
|
||||||
|
|
||||||
|
- CRITICAL/HIGH → Corriger immédiatement
|
||||||
|
- MODERATE → Corriger avant release
|
||||||
|
- LOW → Corriger quand possible
|
||||||
|
|
||||||
|
**Types mises à jour (SemVer) :**
|
||||||
|
|
||||||
|
- Patch (1.0.x) → Bugs, sécurisé
|
||||||
|
- Minor (1.x.0) → Features, rétrocompatible
|
||||||
|
- Major (x.0.0) → Breaking, nécessite tests
|
||||||
|
|
||||||
|
**Stratégie :**
|
||||||
|
|
||||||
|
- Patches → Auto si tests passent
|
||||||
|
- Minors → Manuel vérification
|
||||||
|
- Majors → Manuel migration plan
|
||||||
|
|
||||||
|
**Lockfile :**
|
||||||
|
|
||||||
|
- Garantit versions exactes
|
||||||
|
- Commit toujours avec package.json
|
||||||
|
- Désynchronisé → `npm install`
|
||||||
|
- Conflit merge → Résoudre + `npm install`
|
||||||
|
|
||||||
|
## Gestion vulnérabilités
|
||||||
|
|
||||||
|
**Critiques/Hautes :** Fix immédiat, tester, déployer rapidement
|
||||||
|
|
||||||
|
**Sans fix :** Package alternatif, fork + patch, monitorer, désactiver si possible
|
||||||
|
|
||||||
|
**Packages deprecated :** Chercher alternatives maintenues, planifier migration
|
||||||
|
|
||||||
|
## Migrations majeures
|
||||||
|
|
||||||
|
**Préparation :**
|
||||||
|
|
||||||
|
1. Lire CHANGELOG (breaking changes)
|
||||||
|
2. Estimer impact code
|
||||||
|
3. Créer branche dédiée
|
||||||
|
|
||||||
|
**Exécution :**
|
||||||
|
|
||||||
|
1. Update package.json
|
||||||
|
2. Adapter code aux breaking changes
|
||||||
|
3. Corriger erreurs TS/ESLint
|
||||||
|
4. Tests exhaustifs
|
||||||
|
|
||||||
|
**Validation :**
|
||||||
|
|
||||||
|
- Tests passent
|
||||||
|
- Lighthouse score OK
|
||||||
|
- Performance stable
|
||||||
|
- Pas régressions visuelles
|
||||||
|
|
||||||
|
## Bonnes pratiques
|
||||||
|
|
||||||
|
**Do's :**
|
||||||
|
|
||||||
|
- Commit lockfile toujours
|
||||||
|
- Audit hebdomadaire minimum
|
||||||
|
- Tests après update
|
||||||
|
- Un update à la fois
|
||||||
|
- Lire CHANGELOG majors
|
||||||
|
- Respecter SemVer
|
||||||
|
|
||||||
|
**Don'ts :**
|
||||||
|
|
||||||
|
- Pas `npm install --force` (sauf urgence)
|
||||||
|
- Pas updates aveugles
|
||||||
|
- Pas lockfile .gitignore
|
||||||
|
- Pas updates avant release
|
||||||
|
- Pas dépendances non maintenues
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
- [ ] `npm audit` sans CRITICAL/HIGH
|
||||||
|
- [ ] `npm outdated` vérifié
|
||||||
|
- [ ] Lockfile synchronisé
|
||||||
|
- [ ] Tests passent après update
|
||||||
|
- [ ] Build OK
|
||||||
|
- [ ] Performance stable
|
||||||
|
- [ ] Pas deprecated packages
|
||||||
|
- [ ] CHANGELOG lu (majors)
|
||||||
|
- [ ] Lockfile committé
|
||||||
|
|
||||||
|
## En cas de doute
|
||||||
|
|
||||||
|
**Règles absolues :**
|
||||||
|
|
||||||
|
1. `npm audit` AVANT release obligatoire
|
||||||
|
2. Tester APRÈS mise à jour
|
||||||
|
3. Jamais ignorer lockfile
|
||||||
|
4. CHANGELOG pour majors
|
||||||
|
5. CRITICAL/HIGH fix immédiat
|
||||||
|
|
||||||
|
**Workflow mensuel :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm outdated
|
||||||
|
npm audit
|
||||||
|
npm update
|
||||||
|
npm test
|
||||||
|
```
|
||||||
|
|
||||||
|
**Workflow avant release :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm audit --audit-level=moderate
|
||||||
|
npm outdated
|
||||||
|
npm test
|
||||||
|
npm run build
|
||||||
|
```
|
||||||
|
|
||||||
|
**Références :**
|
||||||
|
|
||||||
|
- package.json - Versions actuelles
|
||||||
|
- package-lock.json - Lockfile
|
||||||
|
- npm docs - Documentation
|
||||||
169
skills/i18n-sync/SKILL.md
Normal file
169
skills/i18n-sync/SKILL.md
Normal file
@@ -0,0 +1,169 @@
|
|||||||
|
---
|
||||||
|
name: synchronizing-i18n-translations
|
||||||
|
description: Verifies translation files synchronization (fr.json, en.json, es.json) and detects missing keys, empty values, and type inconsistencies
|
||||||
|
allowed-tools: Read, Grep, Glob, Bash
|
||||||
|
---
|
||||||
|
|
||||||
|
# I18n Translation Synchronization
|
||||||
|
|
||||||
|
Maintient la synchronisation des fichiers de traduction pour toutes les langues supportées.
|
||||||
|
|
||||||
|
## Table des matières
|
||||||
|
|
||||||
|
- [Quand utiliser](#quand-utiliser)
|
||||||
|
- [Langues supportées](#langues-supportées)
|
||||||
|
- [Scripts disponibles](#scripts-disponibles)
|
||||||
|
- [Workflow principal](#workflow-principal)
|
||||||
|
- [Détection automatique](#détection-automatique)
|
||||||
|
- [Corriger les erreurs](#corriger-les-erreurs)
|
||||||
|
- [Structure des fichiers](#structure-des-fichiers)
|
||||||
|
- [Checklist i18n](#checklist-i18n)
|
||||||
|
- [En cas de doute](#en-cas-de-doute)
|
||||||
|
|
||||||
|
## Quand utiliser
|
||||||
|
|
||||||
|
- Ajout de nouveaux textes UI
|
||||||
|
- Modification de traductions existantes
|
||||||
|
- Avant de committer changements i18n
|
||||||
|
- Quand `npm run i18n:compare` signale erreurs
|
||||||
|
|
||||||
|
## Langues supportées
|
||||||
|
|
||||||
|
- **fr.json** (référence) - Toujours modifier en premier
|
||||||
|
- **en.json** (anglais)
|
||||||
|
- **es.json** (espagnol)
|
||||||
|
|
||||||
|
## Scripts disponibles
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run i18n:compare # Compare tous les fichiers (PRINCIPAL)
|
||||||
|
npm run i18n:verify # Vérifie cohérence
|
||||||
|
npm run i18n:unused # Détecte clés inutilisées
|
||||||
|
```
|
||||||
|
|
||||||
|
## Workflow principal
|
||||||
|
|
||||||
|
### 1. Vérifier l'état actuel
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run i18n:compare
|
||||||
|
```
|
||||||
|
|
||||||
|
Si erreurs, lire le rapport détaillé.
|
||||||
|
|
||||||
|
### 2. Modifier les traductions
|
||||||
|
|
||||||
|
**Règle d'or :** Toujours commencer par `fr.json`
|
||||||
|
|
||||||
|
1. Modifie `fr.json` d'abord
|
||||||
|
2. Copie la STRUCTURE (pas les valeurs) dans en.json et es.json
|
||||||
|
3. Traduis les valeurs
|
||||||
|
|
||||||
|
### 3. Vérifier synchronisation
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run i18n:compare
|
||||||
|
```
|
||||||
|
|
||||||
|
Doit afficher : "Tous les fichiers de traduction sont parfaitement synchronisés !"
|
||||||
|
|
||||||
|
### 4. Tester dans l'UI
|
||||||
|
|
||||||
|
Lance l'application et teste le sélecteur de langue.
|
||||||
|
|
||||||
|
## Détection automatique
|
||||||
|
|
||||||
|
Le script `npm run i18n:compare` détecte :
|
||||||
|
|
||||||
|
**Clés manquantes :**
|
||||||
|
|
||||||
|
- Clés présentes dans fr.json mais absentes dans en.json/es.json
|
||||||
|
|
||||||
|
**Clés supplémentaires :**
|
||||||
|
|
||||||
|
- Clés présentes dans en.json/es.json mais absentes dans fr.json
|
||||||
|
|
||||||
|
**Valeurs vides :**
|
||||||
|
|
||||||
|
- `""`, `null`, `undefined`, `[]`
|
||||||
|
|
||||||
|
**Incohérences de types :**
|
||||||
|
|
||||||
|
- String vs Array (ex: fr.json = "text", en.json = ["array"])
|
||||||
|
|
||||||
|
**Format du rapport :**
|
||||||
|
|
||||||
|
- Console détaillée
|
||||||
|
- JSON exporté dans `docs/translations-comparison-report.json`
|
||||||
|
|
||||||
|
## Corriger les erreurs
|
||||||
|
|
||||||
|
### Clés manquantes
|
||||||
|
|
||||||
|
Ajoute les clés manquantes dans en.json/es.json avec traductions appropriées.
|
||||||
|
|
||||||
|
### Clés supplémentaires
|
||||||
|
|
||||||
|
Supprime les clés supplémentaires OU ajoute-les dans fr.json si nécessaires.
|
||||||
|
|
||||||
|
### Valeurs vides
|
||||||
|
|
||||||
|
Remplace les valeurs vides par traductions appropriées.
|
||||||
|
|
||||||
|
### Types incohérents
|
||||||
|
|
||||||
|
Uniformise le type (soit String partout, soit Array partout).
|
||||||
|
|
||||||
|
## Structure des fichiers
|
||||||
|
|
||||||
|
**Format JSON :**
|
||||||
|
|
||||||
|
```json
|
||||||
|
{
|
||||||
|
"key": "value",
|
||||||
|
"nested": {
|
||||||
|
"key": "value"
|
||||||
|
},
|
||||||
|
"array": ["item1", "item2"]
|
||||||
|
}
|
||||||
|
```
|
||||||
|
|
||||||
|
**Dot notation :**
|
||||||
|
|
||||||
|
- `key` → "key"
|
||||||
|
- `nested.key` → "nested.key"
|
||||||
|
- `array` → "array"
|
||||||
|
|
||||||
|
Le script aplatit la structure en dot notation pour comparaison.
|
||||||
|
|
||||||
|
## Checklist i18n
|
||||||
|
|
||||||
|
- [ ] fr.json modifié en premier
|
||||||
|
- [ ] Structure copiée dans en.json et es.json
|
||||||
|
- [ ] Valeurs traduites correctement
|
||||||
|
- [ ] `npm run i18n:compare` passe (100% synchronisé)
|
||||||
|
- [ ] Testé dans UI avec sélecteur de langue
|
||||||
|
- [ ] Pas de valeurs vides
|
||||||
|
- [ ] Types cohérents (String ou Array)
|
||||||
|
|
||||||
|
## En cas de doute
|
||||||
|
|
||||||
|
**Source :** fr.json + npm scripts
|
||||||
|
|
||||||
|
**Règles absolues :**
|
||||||
|
|
||||||
|
1. Toujours vérifier avec `npm run i18n:compare`
|
||||||
|
2. fr.json est la référence (pas en.json, pas es.json)
|
||||||
|
3. Ne jamais committer avec erreurs i18n
|
||||||
|
4. Tester dans UI avant commit
|
||||||
|
5. Scripts npm détectent TOUS les problèmes
|
||||||
|
|
||||||
|
**Workflow minimal :**
|
||||||
|
|
||||||
|
```bash
|
||||||
|
# Modifier fr.json
|
||||||
|
npm run i18n:compare # Vérifier
|
||||||
|
# Copier structure dans en.json, es.json
|
||||||
|
# Traduire valeurs
|
||||||
|
npm run i18n:compare # DOIT être OK
|
||||||
|
```
|
||||||
94
skills/pwa-service-worker/SKILL.md
Normal file
94
skills/pwa-service-worker/SKILL.md
Normal file
@@ -0,0 +1,94 @@
|
|||||||
|
---
|
||||||
|
name: managing-pwa-service-worker
|
||||||
|
description: Manages Service Worker updates securely with cache versioning and offline tests. Use when modifying SW, adding resources, or changing cache strategy
|
||||||
|
allowed-tools: Read, Write, Grep, Glob, Bash
|
||||||
|
---
|
||||||
|
|
||||||
|
# PWA Service Worker Manager
|
||||||
|
|
||||||
|
Gère Service Worker pour offline play et cache versioning sécurisé.
|
||||||
|
|
||||||
|
## Quand utiliser
|
||||||
|
|
||||||
|
- Modification Service Worker
|
||||||
|
- Ajout ressources à cacher
|
||||||
|
- Changement stratégie cache
|
||||||
|
- Tests offline
|
||||||
|
- Correction bugs SW
|
||||||
|
|
||||||
|
## Scripts essentiels
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run test:pwa-offline # Tester offline (PRINCIPAL)
|
||||||
|
npm run sw:disable # Désactiver SW
|
||||||
|
npm run sw:fix # Réparer SW
|
||||||
|
```
|
||||||
|
|
||||||
|
## Versioning et workflow
|
||||||
|
|
||||||
|
**SemVer (voir sw.js) :**
|
||||||
|
|
||||||
|
- Major : Changements cassants
|
||||||
|
- Minor : Ressources ajoutées
|
||||||
|
- Patch : Corrections
|
||||||
|
|
||||||
|
**Workflow :**
|
||||||
|
|
||||||
|
1. **Modifier :** sw.js (version, ressources, handlers)
|
||||||
|
2. **Incrémenter :** Version (SemVer)
|
||||||
|
3. **Tester :** `npm run test:pwa-offline`
|
||||||
|
4. **Vérifier :** DevTools App tab (Offline mode)
|
||||||
|
5. **Quality :** format:check, lint, test
|
||||||
|
|
||||||
|
## Stratégies de cache
|
||||||
|
|
||||||
|
- **Cache First :** Assets (HTML, CSS, JS, images)
|
||||||
|
- **Network First :** APIs (données fraîches)
|
||||||
|
- **Cache Only :** Assets immuables
|
||||||
|
- **Network Only :** Analytics, auth
|
||||||
|
|
||||||
|
Trouve stratégie dans sw.js existant.
|
||||||
|
|
||||||
|
## Événements SW clés
|
||||||
|
|
||||||
|
- **Install :** Créer cache, skipWaiting()
|
||||||
|
- **Activate :** Nettoyer anciens caches, clients.claim()
|
||||||
|
- **Fetch :** Appliquer stratégie, gérer erreurs
|
||||||
|
|
||||||
|
## Debugging
|
||||||
|
|
||||||
|
**Chrome DevTools (F12) → Application → Service Workers :**
|
||||||
|
|
||||||
|
- Offline mode → Tester navigation
|
||||||
|
- caches.keys() en console → Vérifier caches
|
||||||
|
|
||||||
|
**Problèmes courants :**
|
||||||
|
|
||||||
|
- SW ne s'update → Incrémenter version, skipWaiting() présent
|
||||||
|
- Ressources manquantes → Ajouter à liste cache
|
||||||
|
- Cache volumineux → Cacher uniquement ressources critiques
|
||||||
|
|
||||||
|
## Checklist
|
||||||
|
|
||||||
|
- [ ] Version incrémentée (SemVer)
|
||||||
|
- [ ] skipWaiting() + clients.claim() présents
|
||||||
|
- [ ] Nettoyage anciens caches
|
||||||
|
- [ ] Offline test OK (`npm run test:pwa-offline`)
|
||||||
|
- [ ] DevTools Offline mode OK
|
||||||
|
- [ ] format:check, lint, test passent
|
||||||
|
|
||||||
|
## En cas de doute
|
||||||
|
|
||||||
|
**Règles absolues :**
|
||||||
|
|
||||||
|
1. Incrémenter version TOUJOURS
|
||||||
|
2. Tester offline AVANT commit
|
||||||
|
3. DevTools Application tab verification
|
||||||
|
4. `npm run test:pwa-offline` doit passer
|
||||||
|
5. skipWaiting() + clients.claim() essentiels
|
||||||
|
|
||||||
|
**Références :**
|
||||||
|
|
||||||
|
- `sw.js` - Service Worker principal
|
||||||
|
- `manifest.json` - PWA manifest
|
||||||
|
- Chrome DevTools Application tab
|
||||||
167
skills/validating-accessibility/SKILL.md
Normal file
167
skills/validating-accessibility/SKILL.md
Normal file
@@ -0,0 +1,167 @@
|
|||||||
|
---
|
||||||
|
name: validating-accessibility
|
||||||
|
description: Validates web accessibility according to WCAG 2.1 AA standards for users with disabilities. Use when modifying UI, adding components, or performing accessibility audits
|
||||||
|
allowed-tools: Read, Grep, Glob, Bash, WebSearch
|
||||||
|
---
|
||||||
|
|
||||||
|
# Validateur d'Accessibilité
|
||||||
|
|
||||||
|
Guide la validation et l'amélioration de l'accessibilité web selon WCAG 2.1 niveau AA.
|
||||||
|
|
||||||
|
## Table des matières
|
||||||
|
|
||||||
|
- [Quand utiliser](#quand-utiliser)
|
||||||
|
- [Standards WCAG 2.1 AA](#standards-wcag-21-aa)
|
||||||
|
- [Scripts npm disponibles](#scripts-npm-disponibles)
|
||||||
|
- [Checklist essentielle](#checklist-essentielle)
|
||||||
|
- [Workflow d'audit](#workflow-daudit)
|
||||||
|
- [Checklist avant release](#checklist-avant-release)
|
||||||
|
- [En cas de doute](#en-cas-de-doute)
|
||||||
|
|
||||||
|
## Quand utiliser
|
||||||
|
|
||||||
|
- Ajout de composants UI
|
||||||
|
- Modification d'interfaces
|
||||||
|
- Avant chaque release majeure
|
||||||
|
- Audit d'accessibilité complet
|
||||||
|
|
||||||
|
## Standards WCAG 2.1 AA
|
||||||
|
|
||||||
|
**Quatre principes POUR :**
|
||||||
|
|
||||||
|
1. **Perceptible** - Information présentable
|
||||||
|
2. **Opérable** - Composants opérables
|
||||||
|
3. **Compréhensible** - Info et UI compréhensibles
|
||||||
|
4. **Robuste** - Contenu robuste
|
||||||
|
|
||||||
|
## Scripts npm disponibles
|
||||||
|
|
||||||
|
Trouve et utilise :
|
||||||
|
|
||||||
|
- Audit accessibilité complet
|
||||||
|
- Audit mobile responsive
|
||||||
|
- Vérification contraste
|
||||||
|
- Tests automatisés
|
||||||
|
|
||||||
|
## Checklist essentielle
|
||||||
|
|
||||||
|
### 1. Structure sémantique HTML
|
||||||
|
|
||||||
|
- Balises appropriées (`<header>`, `<nav>`, `<main>`, `<footer>`)
|
||||||
|
- Hiérarchie titres logique (h1 → h2 → h3)
|
||||||
|
- `<button>` pour actions, `<a>` pour navigation
|
||||||
|
|
||||||
|
### 2. Navigation clavier
|
||||||
|
|
||||||
|
- Éléments interactifs focusables
|
||||||
|
- Ordre tabulation logique
|
||||||
|
- Focus visible (outline ou custom)
|
||||||
|
- Raccourcis clavier sans conflit
|
||||||
|
|
||||||
|
### 3. ARIA (Accessible Rich Internet Applications)
|
||||||
|
|
||||||
|
**Utiliser quand sémantique HTML insuffisante**
|
||||||
|
|
||||||
|
Règles :
|
||||||
|
|
||||||
|
- Pas d'ARIA mieux que mauvais ARIA
|
||||||
|
- Vérifier support lecteurs d'écran
|
||||||
|
- Tester avec vraies technologies assistives
|
||||||
|
|
||||||
|
Attributs courants :
|
||||||
|
|
||||||
|
- `aria-label`, `aria-labelledby`
|
||||||
|
- `aria-describedby`
|
||||||
|
- `aria-hidden`
|
||||||
|
- `role` (button, dialog, alert, etc.)
|
||||||
|
|
||||||
|
### 4. Contraste couleurs
|
||||||
|
|
||||||
|
**WCAG 2.1 AA minimum :**
|
||||||
|
|
||||||
|
- Texte normal : 4.5:1
|
||||||
|
- Texte large (≥18pt ou ≥14pt gras) : 3:1
|
||||||
|
- Composants UI : 3:1
|
||||||
|
|
||||||
|
Outils : navigateur DevTools, Contrast Checker
|
||||||
|
|
||||||
|
### 5. Alternatives textuelles
|
||||||
|
|
||||||
|
- Toutes images avec `alt`
|
||||||
|
- Images décoratives : `alt=""`
|
||||||
|
- Images complexes : description détaillée
|
||||||
|
- Vidéos : sous-titres/transcription
|
||||||
|
|
||||||
|
### 6. Formulaires
|
||||||
|
|
||||||
|
- Labels explicites associés
|
||||||
|
- Messages d'erreur clairs
|
||||||
|
- Instructions visibles
|
||||||
|
- Validation côté client + serveur
|
||||||
|
|
||||||
|
### 7. Responsive et zoom
|
||||||
|
|
||||||
|
- Support zoom 200% sans perte fonctionnalité
|
||||||
|
- Contenu responsive (mobile, tablette, desktop)
|
||||||
|
- Touch targets ≥ 44×44 px mobile
|
||||||
|
|
||||||
|
## Workflow d'audit
|
||||||
|
|
||||||
|
### 1. Tests automatisés
|
||||||
|
|
||||||
|
Utilise scripts npm disponibles ou Lighthouse (Chrome DevTools).
|
||||||
|
|
||||||
|
### 2. Tests manuels
|
||||||
|
|
||||||
|
**Navigation clavier :**
|
||||||
|
|
||||||
|
- Tab à travers tous éléments interactifs
|
||||||
|
- Enter/Space pour activer
|
||||||
|
- Échap pour fermer modales/menus
|
||||||
|
|
||||||
|
**Lecteur d'écran :**
|
||||||
|
|
||||||
|
- VoiceOver (macOS/iOS)
|
||||||
|
- NVDA (Windows)
|
||||||
|
- JAWS (Windows)
|
||||||
|
|
||||||
|
**Contraste :**
|
||||||
|
|
||||||
|
- Vérifie tous textes et icônes
|
||||||
|
- Teste modes sombre/clair
|
||||||
|
|
||||||
|
### 3. Tests utilisateurs réels
|
||||||
|
|
||||||
|
- Personnes avec handicaps
|
||||||
|
- Différentes technologies assistives
|
||||||
|
- Feedback sur expérience réelle
|
||||||
|
|
||||||
|
## Checklist avant release
|
||||||
|
|
||||||
|
- [ ] Hiérarchie titres correcte
|
||||||
|
- [ ] Navigation clavier complète
|
||||||
|
- [ ] Contraste WCAG AA respecté
|
||||||
|
- [ ] Alt text sur toutes images
|
||||||
|
- [ ] Labels formulaires associés
|
||||||
|
- [ ] Focus visible partout
|
||||||
|
- [ ] Tests lecteur d'écran passés
|
||||||
|
- [ ] Zoom 200% fonctionnel
|
||||||
|
- [ ] Touch targets ≥ 44px mobile
|
||||||
|
|
||||||
|
## En cas de doute
|
||||||
|
|
||||||
|
**Source :** Standards WCAG 2.1 AA officiels
|
||||||
|
|
||||||
|
**Règles absolues :**
|
||||||
|
|
||||||
|
1. Toujours tester clavier uniquement
|
||||||
|
2. Toujours vérifier contraste
|
||||||
|
3. Toujours tester lecteur d'écran
|
||||||
|
4. Jamais cacher contenu sans `aria-hidden`
|
||||||
|
5. Jamais empêcher zoom mobile
|
||||||
|
|
||||||
|
**Workflow minimal :**
|
||||||
|
|
||||||
|
- Lighthouse audit
|
||||||
|
- Navigation clavier complète
|
||||||
|
- Test 1 lecteur d'écran minimum
|
||||||
Reference in New Issue
Block a user