mdma-cli 4.3.0 → 4.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/init.js +44 -1
- package/package.json +2 -2
- package/templates/models.md +14 -2
- package/templates/skills/master-plan/SKILL.md +100 -0
- package/templates/skills/review/SKILL.md +76 -0
- package/templates/skills/test/SKILL.md +60 -0
- package/templates/subagents/review-best-practices.md +69 -0
- package/templates/subagents/review-bundle.md +83 -0
- package/templates/subagents/review-lint.md +69 -0
- package/templates/subagents/review-security.md +89 -0
- package/templates/workflow-default.md +8 -19
- package/templates/workflow-jira.md +36 -13
- package/.claude/rules/mdma/best-practices.md +0 -50
- package/.claude/rules/mdma/git-default.md +0 -45
- package/.claude/rules/mdma/models.md +0 -19
- package/.claude/rules/mdma/style.md +0 -42
- package/.claude/rules/mdma/workflow-default.md +0 -65
package/bin/init.js
CHANGED
|
@@ -9,6 +9,10 @@ const __dirname = dirname(fileURLToPath(import.meta.url));
|
|
|
9
9
|
const PKG_ROOT = join(__dirname, '..');
|
|
10
10
|
const TEMPLATES_SRC = join(PKG_ROOT, 'templates');
|
|
11
11
|
const RULES_DEST = join(process.cwd(), '.claude', 'rules', 'mdma');
|
|
12
|
+
const SKILLS_SRC = join(TEMPLATES_SRC, 'skills');
|
|
13
|
+
const SKILLS_DEST = join(process.cwd(), '.claude', 'skills', 'mdma');
|
|
14
|
+
const SUBAGENTS_SRC = join(TEMPLATES_SRC, 'subagents');
|
|
15
|
+
const SUBAGENTS_DEST = join(process.cwd(), '.claude', 'subagents', 'mdma');
|
|
12
16
|
|
|
13
17
|
const CORE_FILES = ['models.md', 'style.md', 'best-practices.md'];
|
|
14
18
|
|
|
@@ -60,6 +64,30 @@ function listOptions() {
|
|
|
60
64
|
console.log('\nUsage: npx mdma-cli add [preset] or npx mdma-cli add --workflow=X --git=Y\n');
|
|
61
65
|
}
|
|
62
66
|
|
|
67
|
+
function copyDirRecursive(src, dest) {
|
|
68
|
+
if (!existsSync(src)) {
|
|
69
|
+
return 0;
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
mkdirSync(dest, { recursive: true });
|
|
73
|
+
let count = 0;
|
|
74
|
+
|
|
75
|
+
const entries = readdirSync(src, { withFileTypes: true });
|
|
76
|
+
for (const entry of entries) {
|
|
77
|
+
const srcPath = join(src, entry.name);
|
|
78
|
+
const destPath = join(dest, entry.name);
|
|
79
|
+
|
|
80
|
+
if (entry.isDirectory()) {
|
|
81
|
+
count += copyDirRecursive(srcPath, destPath);
|
|
82
|
+
} else if (entry.name.endsWith('.md')) {
|
|
83
|
+
copyFileSync(srcPath, destPath);
|
|
84
|
+
count++;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
|
|
88
|
+
return count;
|
|
89
|
+
}
|
|
90
|
+
|
|
63
91
|
function updateGitExclude() {
|
|
64
92
|
const excludePath = join(process.cwd(), '.git', 'info', 'exclude');
|
|
65
93
|
|
|
@@ -187,6 +215,20 @@ function add(args) {
|
|
|
187
215
|
copyFileSync(gitFile, join(RULES_DEST, `git-${git}.md`));
|
|
188
216
|
console.log(` [ok] git-${git}.md`);
|
|
189
217
|
|
|
218
|
+
// Copy skills
|
|
219
|
+
rmSync(SKILLS_DEST, { recursive: true, force: true });
|
|
220
|
+
const skillsCount = copyDirRecursive(SKILLS_SRC, SKILLS_DEST);
|
|
221
|
+
if (skillsCount > 0) {
|
|
222
|
+
console.log(` [ok] skills/ (${skillsCount} files)`);
|
|
223
|
+
}
|
|
224
|
+
|
|
225
|
+
// Copy subagents
|
|
226
|
+
rmSync(SUBAGENTS_DEST, { recursive: true, force: true });
|
|
227
|
+
const subagentsCount = copyDirRecursive(SUBAGENTS_SRC, SUBAGENTS_DEST);
|
|
228
|
+
if (subagentsCount > 0) {
|
|
229
|
+
console.log(` [ok] subagents/ (${subagentsCount} files)`);
|
|
230
|
+
}
|
|
231
|
+
|
|
190
232
|
// Update .git/info/exclude
|
|
191
233
|
const excludeResult = updateGitExclude();
|
|
192
234
|
if (excludeResult === true) {
|
|
@@ -208,7 +250,8 @@ function add(args) {
|
|
|
208
250
|
console.log(` Run manually: claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp`);
|
|
209
251
|
}
|
|
210
252
|
|
|
211
|
-
|
|
253
|
+
const totalFiles = CORE_FILES.length + 2 + skillsCount + subagentsCount; // core + workflow + git + skills + subagents
|
|
254
|
+
console.log(`\n${totalFiles} file(s) installed to .claude/\n`);
|
|
212
255
|
}
|
|
213
256
|
|
|
214
257
|
function main() {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "mdma-cli",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.5.0",
|
|
4
4
|
"description": "Rules opinionated pour agents de code",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"license": "MIT",
|
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
},
|
|
11
11
|
"author": "privaloops",
|
|
12
12
|
"scripts": {
|
|
13
|
-
"test": "node
|
|
13
|
+
"test": "node tests/install.test.js"
|
|
14
14
|
},
|
|
15
15
|
"bin": {
|
|
16
16
|
"mdma-cli": "bin/init.js"
|
package/templates/models.md
CHANGED
|
@@ -10,9 +10,21 @@ Utiliser le modèle approprié selon la complexité de la tâche pour optimiser
|
|
|
10
10
|
| Exploration de code, recherche | `sonnet` | Bon équilibre |
|
|
11
11
|
| Implémentation, review, architecture | `opus` | Raisonnement complexe |
|
|
12
12
|
|
|
13
|
-
##
|
|
13
|
+
## Application automatique
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
Les skills et subagents mdma appliquent cette logique automatiquement :
|
|
16
|
+
|
|
17
|
+
| Skill/Subagent | Modèle | Raison |
|
|
18
|
+
|----------------|--------|--------|
|
|
19
|
+
| `/test` | `haiku` | Exécution de commandes |
|
|
20
|
+
| `review-lint` | `haiku` | Exécution d'outils, pas d'analyse |
|
|
21
|
+
| `review-bundle` | `haiku` | Lecture de métriques |
|
|
22
|
+
| `review-security` | `sonnet` | Analyse des deps, patterns connus |
|
|
23
|
+
| `review-best-practices` | `opus` | Raisonnement sur le code, contexte |
|
|
24
|
+
|
|
25
|
+
## Tâches ad-hoc
|
|
26
|
+
|
|
27
|
+
Pour les tâches hors skills, spécifier le modèle si besoin :
|
|
16
28
|
- "Lance les tests avec haiku"
|
|
17
29
|
- "Explore le code avec sonnet"
|
|
18
30
|
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: master-plan
|
|
3
|
+
description: Crée un plan de projet structuré (MASTER-PLAN.md) via questions itératives
|
|
4
|
+
allowed-tools: Read, Glob, Grep, Bash, Write, AskUserQuestion
|
|
5
|
+
model: opus
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Master Plan
|
|
9
|
+
|
|
10
|
+
Génère un plan de projet complet et structuré via un processus itératif de questions/réponses.
|
|
11
|
+
|
|
12
|
+
## Output
|
|
13
|
+
|
|
14
|
+
Fichier `MASTER-PLAN.md` à la racine du projet.
|
|
15
|
+
|
|
16
|
+
## Process
|
|
17
|
+
|
|
18
|
+
### Phase 1 : Comprendre le projet
|
|
19
|
+
|
|
20
|
+
Pose ces questions à l'utilisateur **une par une** (utilise AskUserQuestion avec réponses ouvertes) :
|
|
21
|
+
|
|
22
|
+
#### Question 1 : Nature et contexte
|
|
23
|
+
> "Décris le projet en quelques phrases : qu'est-ce que c'est, pour qui, dans quel contexte ?"
|
|
24
|
+
|
|
25
|
+
#### Question 2 : Objectif principal
|
|
26
|
+
> "Quel est l'objectif principal de ce projet ? Quel problème résout-il ?"
|
|
27
|
+
|
|
28
|
+
#### Question 3 : Livrables prioritaires
|
|
29
|
+
> "Quels sont les prochains livrables concrets que tu veux atteindre ?"
|
|
30
|
+
|
|
31
|
+
#### Question 4 : Contraintes
|
|
32
|
+
> "Y a-t-il des contraintes particulières ? (deadline, stack imposée, dépendances, etc.)"
|
|
33
|
+
|
|
34
|
+
**Note** : Utilise des questions ouvertes. L'utilisateur répond librement. Si une réponse n'est pas claire, demande des précisions.
|
|
35
|
+
|
|
36
|
+
### Phase 2 : Explorer le codebase (si existant)
|
|
37
|
+
|
|
38
|
+
Si du code existe déjà :
|
|
39
|
+
1. Analyse la structure des dossiers
|
|
40
|
+
2. Identifie les technologies utilisées (package.json, Gemfile, go.mod, etc.)
|
|
41
|
+
3. Compte les fichiers et lignes de code
|
|
42
|
+
4. Identifie les dépendances principales
|
|
43
|
+
5. Résume l'état actuel à l'utilisateur
|
|
44
|
+
|
|
45
|
+
### Phase 3 : Proposer une structure de plan
|
|
46
|
+
|
|
47
|
+
Avant de générer le fichier, propose la structure des phases à l'utilisateur :
|
|
48
|
+
|
|
49
|
+
> "Voici les phases que je propose :
|
|
50
|
+
> - Phase 1 : [nom] - [description courte]
|
|
51
|
+
> - Phase 2 : [nom] - [description courte]
|
|
52
|
+
> - ...
|
|
53
|
+
>
|
|
54
|
+
> Tu valides ? Tu veux ajouter/retirer/modifier des phases ?"
|
|
55
|
+
|
|
56
|
+
Attends validation avant de générer.
|
|
57
|
+
|
|
58
|
+
### Phase 4 : Générer le plan
|
|
59
|
+
|
|
60
|
+
Structure du fichier `MASTER-PLAN.md` :
|
|
61
|
+
|
|
62
|
+
```markdown
|
|
63
|
+
# Plan de Projet - [Nom du projet]
|
|
64
|
+
|
|
65
|
+
> **Projet** : [description courte]
|
|
66
|
+
> **Contexte** : [contexte]
|
|
67
|
+
> **Objectif** : [objectif principal]
|
|
68
|
+
> **Date** : [date de création]
|
|
69
|
+
|
|
70
|
+
---
|
|
71
|
+
|
|
72
|
+
## Table des matières
|
|
73
|
+
|
|
74
|
+
1. [Vue d'ensemble](#1-vue-densemble)
|
|
75
|
+
2. [État actuel](#2-état-actuel)
|
|
76
|
+
3. [Architecture cible](#3-architecture-cible)
|
|
77
|
+
4. [Phases d'implémentation](#4-phases-dimplémentation)
|
|
78
|
+
5. [Stratégie de tests](#5-stratégie-de-tests)
|
|
79
|
+
6. [Critères d'acceptation](#6-critères-dacceptation)
|
|
80
|
+
7. [Risques et mitigations](#7-risques-et-mitigations)
|
|
81
|
+
8. [Conventions](#8-conventions)
|
|
82
|
+
|
|
83
|
+
[... contenu basé sur les réponses de l'utilisateur ...]
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Phase 5 : Créer les issues (optionnel)
|
|
87
|
+
|
|
88
|
+
Demande à l'utilisateur :
|
|
89
|
+
> "Veux-tu que je crée les issues GitHub pour chaque phase ?"
|
|
90
|
+
|
|
91
|
+
Si oui et que le projet utilise GitHub :
|
|
92
|
+
1. Crée une issue pour chaque phase
|
|
93
|
+
2. Ajoute les tâches et critères d'acceptation
|
|
94
|
+
|
|
95
|
+
## Principes
|
|
96
|
+
|
|
97
|
+
- **Questions ouvertes** : laisse l'utilisateur s'exprimer, ne pas imposer des choix
|
|
98
|
+
- **Itératif** : plusieurs allers-retours, valider chaque étape
|
|
99
|
+
- **Pas d'invention** : ne pas ajouter de features/phases non demandées
|
|
100
|
+
- **STOP fréquents** : valider avant de générer, valider avant de créer les issues
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review
|
|
3
|
+
description: Analyse qualité du code avant les tests (best practices, sécurité, lint, bundle)
|
|
4
|
+
allowed-tools: Bash, Read, Grep, Glob, Task
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# Review
|
|
8
|
+
|
|
9
|
+
Analyse qualité du code modifié via 4 subagents parallèles.
|
|
10
|
+
|
|
11
|
+
## Contexte à récupérer
|
|
12
|
+
|
|
13
|
+
```bash
|
|
14
|
+
# Fichiers modifiés
|
|
15
|
+
git diff --name-only HEAD~1 2>/dev/null || git diff --name-only --cached
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## Détection du projet
|
|
19
|
+
|
|
20
|
+
Avant de lancer les subagents, détecte le contexte :
|
|
21
|
+
|
|
22
|
+
| Fichier | Type projet | Outils disponibles |
|
|
23
|
+
|---------|-------------|-------------------|
|
|
24
|
+
| `package.json` | Node.js | npm audit, eslint, prettier |
|
|
25
|
+
| `requirements.txt` / `pyproject.toml` | Python | pip-audit, ruff, black |
|
|
26
|
+
| `go.mod` | Go | govulncheck, golint |
|
|
27
|
+
| `Gemfile` | Ruby | bundle audit, rubocop |
|
|
28
|
+
| `Cargo.toml` | Rust | cargo audit, clippy |
|
|
29
|
+
|
|
30
|
+
## Subagents à lancer
|
|
31
|
+
|
|
32
|
+
Lance les subagents **en parallèle** avec `run_in_background: true` :
|
|
33
|
+
|
|
34
|
+
1. **review-best-practices** (toujours)
|
|
35
|
+
- Modèle : opus
|
|
36
|
+
- Analyse : patterns, DRY, KISS, conventions
|
|
37
|
+
|
|
38
|
+
2. **review-security** (si gestionnaire de deps détecté)
|
|
39
|
+
- Modèle : sonnet
|
|
40
|
+
- Analyse : nouvelles deps, vulnérabilités connues
|
|
41
|
+
|
|
42
|
+
3. **review-lint** (si linter configuré)
|
|
43
|
+
- Modèle : haiku
|
|
44
|
+
- Analyse : erreurs lint, formatting
|
|
45
|
+
|
|
46
|
+
4. **review-bundle** (si bundler détecté : webpack, vite, esbuild)
|
|
47
|
+
- Modèle : haiku
|
|
48
|
+
- Analyse : impact sur le bundle size
|
|
49
|
+
|
|
50
|
+
## Agrégation
|
|
51
|
+
|
|
52
|
+
Une fois tous les subagents terminés :
|
|
53
|
+
|
|
54
|
+
1. Récupère les résultats via `TaskOutput`
|
|
55
|
+
2. Agrège dans un rapport unifié :
|
|
56
|
+
|
|
57
|
+
```markdown
|
|
58
|
+
## Rapport Review
|
|
59
|
+
|
|
60
|
+
### Best Practices
|
|
61
|
+
[résultats review-best-practices]
|
|
62
|
+
|
|
63
|
+
### Sécurité
|
|
64
|
+
[résultats review-security ou "N/A - pas de gestionnaire de deps"]
|
|
65
|
+
|
|
66
|
+
### Lint
|
|
67
|
+
[résultats review-lint ou "N/A - pas de linter configuré"]
|
|
68
|
+
|
|
69
|
+
### Bundle
|
|
70
|
+
[résultats review-bundle ou "N/A - pas de bundler"]
|
|
71
|
+
|
|
72
|
+
### Actions requises
|
|
73
|
+
- [ ] Liste des corrections à faire
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
3. Si problèmes critiques détectés → **STOP** → demande correction avant de continuer
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: test
|
|
3
|
+
description: Exécute les tests du projet (détection automatique du runner)
|
|
4
|
+
allowed-tools: Bash, Read, Glob
|
|
5
|
+
model: haiku
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Test
|
|
9
|
+
|
|
10
|
+
Exécute les tests du projet avec détection automatique du runner.
|
|
11
|
+
|
|
12
|
+
## Détection du runner
|
|
13
|
+
|
|
14
|
+
| Fichier | Runner | Commande |
|
|
15
|
+
|---------|--------|----------|
|
|
16
|
+
| `package.json` | npm/yarn/pnpm | `npm test` ou script défini |
|
|
17
|
+
| `pytest.ini` / `pyproject.toml` (pytest) | pytest | `pytest` |
|
|
18
|
+
| `go.mod` | go test | `go test ./...` |
|
|
19
|
+
| `Gemfile` | rspec/minitest | `bundle exec rspec` ou `bundle exec rake test` |
|
|
20
|
+
| `Cargo.toml` | cargo | `cargo test` |
|
|
21
|
+
| `Makefile` (avec target test) | make | `make test` |
|
|
22
|
+
|
|
23
|
+
### Priorité
|
|
24
|
+
|
|
25
|
+
1. Vérifie d'abord `CLAUDE.md` pour une commande explicite
|
|
26
|
+
2. Sinon, détecte selon le tableau ci-dessus
|
|
27
|
+
3. Si aucune détection → **STOP** → demande la commande à l'utilisateur
|
|
28
|
+
|
|
29
|
+
## Exécution
|
|
30
|
+
|
|
31
|
+
```
|
|
32
|
+
1. Lance la commande de test
|
|
33
|
+
2. Si FAIL :
|
|
34
|
+
- Identifie LE test qui échoue
|
|
35
|
+
- Corrige CE test uniquement
|
|
36
|
+
- Relance la suite complète
|
|
37
|
+
- Max 5 itérations
|
|
38
|
+
3. Si toujours FAIL après 5 itérations → **STOP** → demande quoi faire
|
|
39
|
+
4. Si PASS → rapport de succès
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Rapport
|
|
43
|
+
|
|
44
|
+
```markdown
|
|
45
|
+
## Rapport Tests
|
|
46
|
+
|
|
47
|
+
- **Runner** : [runner détecté]
|
|
48
|
+
- **Commande** : [commande exécutée]
|
|
49
|
+
- **Résultat** : PASS / FAIL
|
|
50
|
+
- **Itérations** : X/5
|
|
51
|
+
|
|
52
|
+
### Détails
|
|
53
|
+
[sortie des tests ou résumé]
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Notes
|
|
57
|
+
|
|
58
|
+
- Ne modifie PAS le code métier pour faire passer les tests
|
|
59
|
+
- Si un test échoue à cause d'un bug dans le code → signale-le, ne le masque pas
|
|
60
|
+
- Les tests de snapshot/baseline sont gérés par `/visual-test`
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-best-practices
|
|
3
|
+
description: Analyse les best practices du code (patterns, DRY, KISS, conventions)
|
|
4
|
+
model: opus
|
|
5
|
+
allowed-tools: Read, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Review Best Practices
|
|
9
|
+
|
|
10
|
+
Analyse le code modifié pour vérifier le respect des best practices.
|
|
11
|
+
|
|
12
|
+
## Fichiers à analyser
|
|
13
|
+
|
|
14
|
+
Reçus en argument : liste des fichiers modifiés.
|
|
15
|
+
|
|
16
|
+
## Critères d'analyse
|
|
17
|
+
|
|
18
|
+
### 1. Patterns et conventions
|
|
19
|
+
- Cohérence avec le style existant du projet
|
|
20
|
+
- Nommage (variables, fonctions, classes)
|
|
21
|
+
- Structure du code
|
|
22
|
+
|
|
23
|
+
### 2. DRY (Don't Repeat Yourself)
|
|
24
|
+
- Duplication de code
|
|
25
|
+
- Logique répétée qui pourrait être factorisée
|
|
26
|
+
- Copier-coller détectable
|
|
27
|
+
|
|
28
|
+
### 3. KISS (Keep It Simple, Stupid)
|
|
29
|
+
- Over-engineering
|
|
30
|
+
- Abstractions prématurées
|
|
31
|
+
- Complexité inutile
|
|
32
|
+
|
|
33
|
+
### 4. YAGNI (You Ain't Gonna Need It)
|
|
34
|
+
- Code mort ou inutilisé
|
|
35
|
+
- Features non demandées
|
|
36
|
+
- Configurations superflues
|
|
37
|
+
|
|
38
|
+
### 5. Lisibilité
|
|
39
|
+
- Fonctions trop longues (> 50 lignes)
|
|
40
|
+
- Nesting excessif (> 3 niveaux)
|
|
41
|
+
- Manque de clarté
|
|
42
|
+
|
|
43
|
+
## Output
|
|
44
|
+
|
|
45
|
+
```markdown
|
|
46
|
+
## Best Practices Review
|
|
47
|
+
|
|
48
|
+
### Score global : X/10
|
|
49
|
+
|
|
50
|
+
### Problèmes détectés
|
|
51
|
+
|
|
52
|
+
#### Critiques (bloquants)
|
|
53
|
+
- [fichier:ligne] Description du problème
|
|
54
|
+
|
|
55
|
+
#### Majeurs (à corriger)
|
|
56
|
+
- [fichier:ligne] Description du problème
|
|
57
|
+
|
|
58
|
+
#### Mineurs (suggestions)
|
|
59
|
+
- [fichier:ligne] Description du problème
|
|
60
|
+
|
|
61
|
+
### Points positifs
|
|
62
|
+
- Liste des bonnes pratiques observées
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Notes
|
|
66
|
+
|
|
67
|
+
- Compare avec les conventions du projet (CLAUDE.md, .editorconfig, etc.)
|
|
68
|
+
- Ne suggère PAS de refactoring massif hors scope
|
|
69
|
+
- Focus sur les fichiers modifiés uniquement
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-bundle
|
|
3
|
+
description: Analyse l'impact sur le bundle size (projets frontend)
|
|
4
|
+
model: haiku
|
|
5
|
+
allowed-tools: Bash, Read, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Review Bundle
|
|
9
|
+
|
|
10
|
+
Analyse l'impact des modifications sur le bundle size.
|
|
11
|
+
|
|
12
|
+
## Détection du bundler
|
|
13
|
+
|
|
14
|
+
| Fichier | Bundler | Outil d'analyse |
|
|
15
|
+
|---------|---------|-----------------|
|
|
16
|
+
| `webpack.config.*` | Webpack | `webpack --profile --json` |
|
|
17
|
+
| `vite.config.*` | Vite | `vite build --report` |
|
|
18
|
+
| `esbuild.*` / script esbuild | esbuild | `esbuild --metafile` |
|
|
19
|
+
| `rollup.config.*` | Rollup | `rollup --plugin visualizer` |
|
|
20
|
+
| `next.config.*` | Next.js | `next build` (affiche les sizes) |
|
|
21
|
+
| `nuxt.config.*` | Nuxt | `nuxt build --analyze` |
|
|
22
|
+
|
|
23
|
+
## Vérifications
|
|
24
|
+
|
|
25
|
+
### 1. Nouvelles dépendances
|
|
26
|
+
|
|
27
|
+
Pour chaque nouvelle dépendance dans package.json :
|
|
28
|
+
- Taille du package (bundlephobia.com)
|
|
29
|
+
- Tree-shaking supporté ?
|
|
30
|
+
- Alternatives plus légères ?
|
|
31
|
+
|
|
32
|
+
### 2. Build analysis
|
|
33
|
+
|
|
34
|
+
Si possible, compare avant/après :
|
|
35
|
+
```bash
|
|
36
|
+
# Avant (main branch)
|
|
37
|
+
git stash && npm run build && ls -la dist/
|
|
38
|
+
|
|
39
|
+
# Après (current)
|
|
40
|
+
git stash pop && npm run build && ls -la dist/
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
### 3. Imports
|
|
44
|
+
|
|
45
|
+
Vérifie les imports problématiques :
|
|
46
|
+
- Import de librairie entière vs named imports
|
|
47
|
+
- Dynamic imports manquants pour le code splitting
|
|
48
|
+
- Dépendances dupliquées
|
|
49
|
+
|
|
50
|
+
## Output
|
|
51
|
+
|
|
52
|
+
```markdown
|
|
53
|
+
## Bundle Review
|
|
54
|
+
|
|
55
|
+
### Bundler détecté
|
|
56
|
+
[bundler] avec config [fichier]
|
|
57
|
+
|
|
58
|
+
### Nouvelles dépendances
|
|
59
|
+
|
|
60
|
+
| Package | Taille (min+gzip) | Tree-shakable | Impact estimé |
|
|
61
|
+
|---------|-------------------|---------------|---------------|
|
|
62
|
+
| lodash | 71kb | Non | CRITIQUE |
|
|
63
|
+
| date-fns | 13kb | Oui | OK |
|
|
64
|
+
|
|
65
|
+
### Analyse des imports
|
|
66
|
+
|
|
67
|
+
#### Problèmes détectés
|
|
68
|
+
- [fichier:ligne] Import complet de [lib] - utiliser named imports
|
|
69
|
+
|
|
70
|
+
#### Suggestions
|
|
71
|
+
- Lazy load [composant] pour réduire le bundle initial
|
|
72
|
+
|
|
73
|
+
### Impact estimé
|
|
74
|
+
- Bundle avant : ~Xkb
|
|
75
|
+
- Bundle après : ~Xkb
|
|
76
|
+
- Différence : +X% / -X%
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
## Notes
|
|
80
|
+
|
|
81
|
+
- Si pas de bundler détecté → "N/A - pas de bundler frontend"
|
|
82
|
+
- Ne bloque que si augmentation > 10% sans justification
|
|
83
|
+
- Suggère des alternatives mais ne les impose pas
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-lint
|
|
3
|
+
description: Vérifie le lint et le formatting du code
|
|
4
|
+
model: haiku
|
|
5
|
+
allowed-tools: Bash, Read, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Review Lint
|
|
9
|
+
|
|
10
|
+
Exécute les linters et formatters configurés sur les fichiers modifiés.
|
|
11
|
+
|
|
12
|
+
## Détection des outils
|
|
13
|
+
|
|
14
|
+
| Fichier config | Outil | Commande |
|
|
15
|
+
|----------------|-------|----------|
|
|
16
|
+
| `.eslintrc*` / `eslint.config.*` | ESLint | `npx eslint [files]` |
|
|
17
|
+
| `.prettierrc*` | Prettier | `npx prettier --check [files]` |
|
|
18
|
+
| `pyproject.toml` (ruff) | Ruff | `ruff check [files]` |
|
|
19
|
+
| `.flake8` / `setup.cfg` | Flake8 | `flake8 [files]` |
|
|
20
|
+
| `.golangci.yml` | golangci-lint | `golangci-lint run [files]` |
|
|
21
|
+
| `.rubocop.yml` | RuboCop | `rubocop [files]` |
|
|
22
|
+
| `rustfmt.toml` | rustfmt | `cargo fmt --check` |
|
|
23
|
+
| `.editorconfig` | editorconfig-checker | `editorconfig-checker [files]` |
|
|
24
|
+
|
|
25
|
+
## Workflow
|
|
26
|
+
|
|
27
|
+
```
|
|
28
|
+
1. Identifie les linters configurés dans le projet
|
|
29
|
+
2. Exécute chaque linter sur les fichiers modifiés
|
|
30
|
+
3. Collecte les erreurs et warnings
|
|
31
|
+
4. Catégorise par sévérité
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Output
|
|
35
|
+
|
|
36
|
+
```markdown
|
|
37
|
+
## Lint Review
|
|
38
|
+
|
|
39
|
+
### Outils détectés
|
|
40
|
+
- ESLint : oui/non
|
|
41
|
+
- Prettier : oui/non
|
|
42
|
+
- [autres]
|
|
43
|
+
|
|
44
|
+
### Résultats
|
|
45
|
+
|
|
46
|
+
#### Erreurs (bloquantes)
|
|
47
|
+
- [fichier:ligne] [règle] Message
|
|
48
|
+
|
|
49
|
+
#### Warnings
|
|
50
|
+
- [fichier:ligne] [règle] Message
|
|
51
|
+
|
|
52
|
+
### Commandes de fix automatique
|
|
53
|
+
```bash
|
|
54
|
+
npx eslint --fix [files]
|
|
55
|
+
npx prettier --write [files]
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
### Résumé
|
|
59
|
+
- Erreurs : X
|
|
60
|
+
- Warnings : X
|
|
61
|
+
- Fichiers analysés : X
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
## Notes
|
|
65
|
+
|
|
66
|
+
- Si aucun linter configuré → signale "Aucun linter détecté"
|
|
67
|
+
- Les erreurs de lint sont bloquantes
|
|
68
|
+
- Les warnings sont informatifs
|
|
69
|
+
- Propose les commandes de fix quand disponibles
|
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: review-security
|
|
3
|
+
description: Audit de sécurité des dépendances et du code
|
|
4
|
+
model: sonnet
|
|
5
|
+
allowed-tools: Bash, Read, Grep, Glob
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Review Security
|
|
9
|
+
|
|
10
|
+
Analyse la sécurité des dépendances nouvellement ajoutées et du code.
|
|
11
|
+
|
|
12
|
+
## 1. Audit des dépendances
|
|
13
|
+
|
|
14
|
+
### Détection des nouvelles deps
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Node.js
|
|
18
|
+
git diff HEAD~1 -- package.json | grep "^\+" | grep -v "^\+\+\+"
|
|
19
|
+
|
|
20
|
+
# Python
|
|
21
|
+
git diff HEAD~1 -- requirements.txt pyproject.toml | grep "^\+"
|
|
22
|
+
|
|
23
|
+
# Go
|
|
24
|
+
git diff HEAD~1 -- go.mod | grep "^\+"
|
|
25
|
+
|
|
26
|
+
# Ruby
|
|
27
|
+
git diff HEAD~1 -- Gemfile | grep "^\+"
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
### Outils d'audit
|
|
31
|
+
|
|
32
|
+
| Écosystème | Commande |
|
|
33
|
+
|------------|----------|
|
|
34
|
+
| Node.js | `npm audit` |
|
|
35
|
+
| Python | `pip-audit` ou `safety check` |
|
|
36
|
+
| Go | `govulncheck ./...` |
|
|
37
|
+
| Ruby | `bundle audit check` |
|
|
38
|
+
| Rust | `cargo audit` |
|
|
39
|
+
|
|
40
|
+
### Vérifications manuelles
|
|
41
|
+
|
|
42
|
+
Pour chaque nouvelle dépendance :
|
|
43
|
+
1. **Popularité** : nombre de téléchargements, stars GitHub
|
|
44
|
+
2. **Maintenance** : dernier commit, issues ouvertes
|
|
45
|
+
3. **Sécurité** : CVE connues, historique de vulnérabilités
|
|
46
|
+
|
|
47
|
+
## 2. Analyse du code
|
|
48
|
+
|
|
49
|
+
### Patterns à détecter
|
|
50
|
+
|
|
51
|
+
- Injection SQL : concaténation de strings dans les requêtes
|
|
52
|
+
- XSS : output non échappé
|
|
53
|
+
- Command injection : exec/spawn avec input utilisateur
|
|
54
|
+
- Path traversal : manipulation de chemins fichiers
|
|
55
|
+
- Secrets hardcodés : API keys, passwords dans le code
|
|
56
|
+
- Permissions trop larges : chmod 777, accès root
|
|
57
|
+
|
|
58
|
+
## Output
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
## Security Review
|
|
62
|
+
|
|
63
|
+
### Dépendances
|
|
64
|
+
|
|
65
|
+
#### Nouvelles dépendances détectées
|
|
66
|
+
| Package | Version | Vulnérabilités | Popularité |
|
|
67
|
+
|---------|---------|----------------|------------|
|
|
68
|
+
| xxx | 1.0.0 | 0 | OK |
|
|
69
|
+
|
|
70
|
+
#### Audit automatique
|
|
71
|
+
[sortie de npm audit / pip-audit / etc.]
|
|
72
|
+
|
|
73
|
+
### Code
|
|
74
|
+
|
|
75
|
+
#### Vulnérabilités potentielles
|
|
76
|
+
- [fichier:ligne] [CRITIQUE/MAJEUR/MINEUR] Description
|
|
77
|
+
|
|
78
|
+
#### Secrets détectés
|
|
79
|
+
- [fichier:ligne] Type de secret potentiel
|
|
80
|
+
|
|
81
|
+
### Recommandations
|
|
82
|
+
- Liste des actions correctives
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
## Notes
|
|
86
|
+
|
|
87
|
+
- Les vulnérabilités critiques sont **bloquantes**
|
|
88
|
+
- Signale les faux positifs possibles
|
|
89
|
+
- Ne bloque pas sur les vulnérabilités low/info des deps transitives
|
|
@@ -24,25 +24,14 @@
|
|
|
24
24
|
- Petits commits logiques (conventions dans `git.md`)
|
|
25
25
|
- **STOP** → montre les modifications, attend validation
|
|
26
26
|
|
|
27
|
-
### 3.
|
|
28
|
-
-
|
|
29
|
-
-
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
- **Vérifie** si `.claude/rules/visual-test.md` existe
|
|
36
|
-
- Si oui → exécute `/screenshot` et compare `current/` vs `baseline/`
|
|
37
|
-
- Différence intentionnelle → mettre à jour `baseline/`
|
|
38
|
-
- Régression détectée → **STOP** → corriger avant de continuer
|
|
39
|
-
|
|
40
|
-
- Si tous les tests passent → **STOP** → attend validation
|
|
41
|
-
|
|
42
|
-
### 4. Review
|
|
43
|
-
- Review ton propre code
|
|
44
|
-
- Vérifie : sécurité, performance, lisibilité
|
|
45
|
-
- Propose des améliorations si pertinent
|
|
27
|
+
### 3. Review
|
|
28
|
+
- Exécute `/review`
|
|
29
|
+
- Corrige les problèmes critiques détectés
|
|
30
|
+
- **STOP** → attend validation avant de passer aux tests
|
|
31
|
+
|
|
32
|
+
### 4. Test
|
|
33
|
+
- Exécute `/test`
|
|
34
|
+
- Si fail persistant après 5 itérations → **STOP** → demande quoi faire
|
|
46
35
|
- **STOP** → attend validation
|
|
47
36
|
|
|
48
37
|
### 5. Compound
|
|
@@ -12,7 +12,8 @@
|
|
|
12
12
|
### Variables globales (`.zshrc` ou `.bashrc`)
|
|
13
13
|
|
|
14
14
|
```bash
|
|
15
|
-
|
|
15
|
+
# IMPORTANT: URL racine SANS /jira/ à la fin, et SANS espace avant le =
|
|
16
|
+
export ARTE_ATLASSIAN_ROOT_URL="https://mycompany.atlassian.net"
|
|
16
17
|
export ARTE_ATLASSIAN_USER_EMAIL="user@email.com"
|
|
17
18
|
export ARTE_ATLASSIAN_API_TOKEN="your-api-token"
|
|
18
19
|
```
|
|
@@ -31,12 +32,37 @@ export ARTE_ATLASSIAN_PROJECT_NAME="PROJ"
|
|
|
31
32
|
|
|
32
33
|
### Utilisation API
|
|
33
34
|
|
|
35
|
+
**IMPORTANT** : Pour éviter les erreurs de caractères invisibles dans le terminal, toujours passer par un script temporaire :
|
|
36
|
+
|
|
34
37
|
```bash
|
|
35
|
-
#
|
|
38
|
+
# Récupérer un ticket
|
|
39
|
+
cat << 'SCRIPT' > /tmp/jira_req.sh
|
|
40
|
+
#!/bin/bash
|
|
36
41
|
curl -s -u "$ARTE_ATLASSIAN_USER_EMAIL:$ARTE_ATLASSIAN_API_TOKEN" \
|
|
37
42
|
"$ARTE_ATLASSIAN_ROOT_URL/rest/api/3/issue/PROJ-123"
|
|
43
|
+
SCRIPT
|
|
44
|
+
chmod +x /tmp/jira_req.sh && /tmp/jira_req.sh
|
|
45
|
+
|
|
46
|
+
# Recherche JQL (endpoint actuel, l'ancien /search est obsolète)
|
|
47
|
+
cat << 'SCRIPT' > /tmp/jira_req.sh
|
|
48
|
+
#!/bin/bash
|
|
49
|
+
curl -s -G -u "$ARTE_ATLASSIAN_USER_EMAIL:$ARTE_ATLASSIAN_API_TOKEN" \
|
|
50
|
+
--data-urlencode 'jql=project=PROJ AND fixVersion="1.0.0"' \
|
|
51
|
+
--data-urlencode 'fields=key,summary,status' \
|
|
52
|
+
"$ARTE_ATLASSIAN_ROOT_URL/rest/api/3/search/jql"
|
|
53
|
+
SCRIPT
|
|
54
|
+
chmod +x /tmp/jira_req.sh && /tmp/jira_req.sh
|
|
38
55
|
```
|
|
39
56
|
|
|
57
|
+
### Troubleshooting
|
|
58
|
+
|
|
59
|
+
| Erreur | Cause | Solution |
|
|
60
|
+
|--------|-------|----------|
|
|
61
|
+
| `not found` au source | Espace avant `=` | `export VAR="value"` sans espace |
|
|
62
|
+
| `API a été supprimée` | Ancien endpoint | Utiliser `/rest/api/3/search/jql` |
|
|
63
|
+
| `401 Unauthorized` | Token invalide | Régénérer sur id.atlassian.com |
|
|
64
|
+
| `blank argument` | Caractères invisibles | Utiliser un script temporaire (voir exemples ci-dessus) |
|
|
65
|
+
|
|
40
66
|
### Fallback
|
|
41
67
|
|
|
42
68
|
Si l'API REST échoue (erreurs réseau, permissions), utiliser le MCP Atlassian :
|
|
@@ -66,17 +92,14 @@ claude mcp add atlassian -- npx -y @anthropic/atlassian-mcp-server
|
|
|
66
92
|
- Petits commits logiques (conventions dans `git.md`)
|
|
67
93
|
- **STOP** → montre les modifications, attend validation
|
|
68
94
|
|
|
69
|
-
### 3.
|
|
70
|
-
-
|
|
71
|
-
-
|
|
72
|
-
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
- Review ton propre code
|
|
78
|
-
- Vérifie : sécurité, performance, lisibilité
|
|
79
|
-
- Propose des améliorations si pertinent
|
|
95
|
+
### 3. Review
|
|
96
|
+
- Exécute `/review`
|
|
97
|
+
- Corrige les problèmes critiques détectés
|
|
98
|
+
- **STOP** → attend validation avant de passer aux tests
|
|
99
|
+
|
|
100
|
+
### 4. Test
|
|
101
|
+
- Exécute `/test`
|
|
102
|
+
- Si fail persistant après 5 itérations → **STOP** → demande quoi faire
|
|
80
103
|
- **STOP** → attend validation
|
|
81
104
|
|
|
82
105
|
### 5. Git
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
# Best Practices
|
|
2
|
-
|
|
3
|
-
## Règle absolue
|
|
4
|
-
|
|
5
|
-
> **Toujours coder selon les best practices reconnues** pour chaque langage, framework ou librairie utilisé.
|
|
6
|
-
|
|
7
|
-
## En cas de doute
|
|
8
|
-
|
|
9
|
-
Si plusieurs approches sont reconnues comme "best practice" :
|
|
10
|
-
|
|
11
|
-
1. **STOP** - ne pas choisir arbitrairement
|
|
12
|
-
2. Lister les options avec leurs avantages/inconvénients
|
|
13
|
-
3. Demander à l'utilisateur quelle approche privilégier
|
|
14
|
-
|
|
15
|
-
## Sources de référence
|
|
16
|
-
|
|
17
|
-
Par ordre de priorité :
|
|
18
|
-
1. Documentation officielle du langage/framework
|
|
19
|
-
2. Style guides officiels (Google, Airbnb, etc.)
|
|
20
|
-
3. Conventions établies dans le projet existant
|
|
21
|
-
|
|
22
|
-
## MCP recommandé
|
|
23
|
-
|
|
24
|
-
Le MCP **context7** permet de récupérer la documentation officielle à jour directement dans le contexte.
|
|
25
|
-
|
|
26
|
-
### Configuration
|
|
27
|
-
|
|
28
|
-
**mdma-cli** configure automatiquement context7 en scope user lors de `npx mdma-cli add`.
|
|
29
|
-
|
|
30
|
-
Configuration manuelle si nécessaire :
|
|
31
|
-
|
|
32
|
-
```bash
|
|
33
|
-
claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp
|
|
34
|
-
```
|
|
35
|
-
|
|
36
|
-
> **Scope user** : context7 est disponible pour tous vos projets, sans polluer les `.mcp.json` individuels.
|
|
37
|
-
|
|
38
|
-
### Usage
|
|
39
|
-
|
|
40
|
-
Inclure `use context7` dans le prompt pour que l'agent récupère la doc à jour :
|
|
41
|
-
- "Implémente l'auth avec NextAuth, use context7"
|
|
42
|
-
- "Ajoute la validation Zod, use context7"
|
|
43
|
-
|
|
44
|
-
### API Key (optionnel)
|
|
45
|
-
|
|
46
|
-
Pour des rate limits plus élevés, obtenir une clé gratuite sur [context7.com/dashboard](https://context7.com/dashboard) :
|
|
47
|
-
|
|
48
|
-
```bash
|
|
49
|
-
claude mcp add context7 --scope user -- npx -y @upstash/context7-mcp --api-key YOUR_API_KEY
|
|
50
|
-
```
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
# Workflow Git
|
|
2
|
-
|
|
3
|
-
## Règles absolues
|
|
4
|
-
|
|
5
|
-
> **Anti-rationalisation** : Ces règles n'ont AUCUNE exception. "JAMAIS" signifie jamais.
|
|
6
|
-
> "C'est juste du gitignore" ou "c'est un petit fix" ne justifie PAS de contourner les règles.
|
|
7
|
-
|
|
8
|
-
1. **JAMAIS push sur main**
|
|
9
|
-
2. **JAMAIS commit sans branche** `feature/` ou `fix/`
|
|
10
|
-
3. **JAMAIS merge sans PR**
|
|
11
|
-
4. **JAMAIS `git add -A`** : commiter uniquement les fichiers modifiés intentionnellement
|
|
12
|
-
|
|
13
|
-
Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisateur.
|
|
14
|
-
|
|
15
|
-
## Process
|
|
16
|
-
|
|
17
|
-
### Avant de coder
|
|
18
|
-
1. Demander à l'utilisateur s'il souhaite se baser sur `main/master` ou `develop/dev`
|
|
19
|
-
2. Synchroniser la branche de base choisie avec le remote
|
|
20
|
-
3. Si le projet utilise GitHub Issues, créer une issue (titre + description)
|
|
21
|
-
4. Créer une branche depuis la base choisie : `feature/xxx` ou `fix/xxx`
|
|
22
|
-
5. Checkout la nouvelle branche
|
|
23
|
-
|
|
24
|
-
### Commits
|
|
25
|
-
- Convention : **conventional commits**
|
|
26
|
-
- `feat:` nouvelle fonctionnalité
|
|
27
|
-
- `fix:` correction de bug
|
|
28
|
-
- `docs:` documentation
|
|
29
|
-
- `refactor:` refactoring
|
|
30
|
-
- `chore:` maintenance
|
|
31
|
-
- `test:` ajout/modification de tests
|
|
32
|
-
- Messages clairs et concis
|
|
33
|
-
- Un commit = un changement logique
|
|
34
|
-
|
|
35
|
-
### Après validation
|
|
36
|
-
1. `git add <fichiers>` (pas -A)
|
|
37
|
-
2. `git commit -m "XXX: description"`. Remplacer XXX par le prefix de conventionnal commits qui correspond le mieux au sujet traité (voir ### Commits)
|
|
38
|
-
3. `git push -u origin <branche>`
|
|
39
|
-
4. `gh pr create --fill`
|
|
40
|
-
5. Attendre validation utilisateur
|
|
41
|
-
6. `gh pr merge --merge --delete-branch`
|
|
42
|
-
7. `git checkout <branche-base> && git pull`
|
|
43
|
-
|
|
44
|
-
### Tests
|
|
45
|
-
Les tests **DOIVENT** passer avant merge.
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
# Sélection des modèles
|
|
2
|
-
|
|
3
|
-
Utiliser le modèle approprié selon la complexité de la tâche pour optimiser coûts et rapidité.
|
|
4
|
-
|
|
5
|
-
## Correspondance tâche/modèle
|
|
6
|
-
|
|
7
|
-
| Tâche | Modèle | Justification |
|
|
8
|
-
|-------|--------|---------------|
|
|
9
|
-
| Tests, build, lint | `haiku` | Exécution simple, pas de raisonnement |
|
|
10
|
-
| Exploration de code, recherche | `sonnet` | Bon équilibre |
|
|
11
|
-
| Implémentation, review, architecture | `opus` | Raisonnement complexe |
|
|
12
|
-
|
|
13
|
-
## Syntaxe
|
|
14
|
-
|
|
15
|
-
Spécifier le modèle dans la demande si besoin :
|
|
16
|
-
- "Lance les tests avec haiku"
|
|
17
|
-
- "Explore le code avec sonnet"
|
|
18
|
-
|
|
19
|
-
Par défaut, l'agent choisit le modèle selon le tableau ci-dessus.
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
# Style de réponse
|
|
2
|
-
|
|
3
|
-
## Profil
|
|
4
|
-
- **Niveau** : Senior
|
|
5
|
-
- **Style** : Détaillé
|
|
6
|
-
|
|
7
|
-
## Comment répondre
|
|
8
|
-
|
|
9
|
-
- Réponses détaillées avec contexte
|
|
10
|
-
- Explique les choix importants
|
|
11
|
-
- Propose des alternatives quand pertinent
|
|
12
|
-
- Va droit au but, pas de fioritures inutiles
|
|
13
|
-
|
|
14
|
-
## Autonomie
|
|
15
|
-
|
|
16
|
-
- **Demande TOUJOURS avant d'agir**
|
|
17
|
-
- Ne fais rien sans validation explicite
|
|
18
|
-
- Expose le plan, attend "ok", puis agis
|
|
19
|
-
|
|
20
|
-
## À éviter
|
|
21
|
-
|
|
22
|
-
- **Obséquiosité** : pas de "Excellent choix!", "Très bonne question!", "C'est une super idée!"
|
|
23
|
-
- Pas de compliments excessifs
|
|
24
|
-
- Pas de formules de politesse superflues
|
|
25
|
-
- Pas d'emojis (sauf si demandé)
|
|
26
|
-
|
|
27
|
-
## Principes de dev
|
|
28
|
-
|
|
29
|
-
- **DRY** : Don't Repeat Yourself
|
|
30
|
-
- **YAGNI** : You Ain't Gonna Need It
|
|
31
|
-
- **KISS** : Keep It Simple, Stupid
|
|
32
|
-
|
|
33
|
-
## Contraintes
|
|
34
|
-
|
|
35
|
-
### Ne jamais faire
|
|
36
|
-
- Commiter sur main directement
|
|
37
|
-
- Over-engineering
|
|
38
|
-
- Ajouter des features non demandées
|
|
39
|
-
|
|
40
|
-
### Toujours faire
|
|
41
|
-
- Respecter le workflow défini dans `workflow.md` et `git.md`
|
|
42
|
-
- Garder les solutions simples
|
|
@@ -1,65 +0,0 @@
|
|
|
1
|
-
# Workflow Agent
|
|
2
|
-
|
|
3
|
-
> **Note** : Ce workflow est agnostique. Pour les commandes spécifiques (test, build, lint), consulte `CLAUDE.md` qui fait référence pour ce projet.
|
|
4
|
-
|
|
5
|
-
> **Règle de conformité** : Les règles définies ici et dans `git.md` sont ABSOLUES.
|
|
6
|
-
> - Ne jamais rationaliser ("c'est juste un petit fix", "c'est mineur")
|
|
7
|
-
> - Ne jamais faire d'exception, quelle que soit la taille ou nature du changement
|
|
8
|
-
> - En cas de doute → STOP → demander à l'utilisateur
|
|
9
|
-
|
|
10
|
-
## Étapes obligatoires
|
|
11
|
-
|
|
12
|
-
### 0. Setup Git
|
|
13
|
-
- Vérifie que tu n'es PAS sur `main` : `git branch --show-current`
|
|
14
|
-
- Si sur `main` → créer une branche AVANT toute modification
|
|
15
|
-
- Ne jamais rationaliser ("c'est juste un petit fix")
|
|
16
|
-
|
|
17
|
-
### 1. Plan
|
|
18
|
-
- Explore le codebase (structure documentée dans `CLAUDE.md`)
|
|
19
|
-
- Propose un plan d'implémentation
|
|
20
|
-
- **STOP** → attend validation avant de coder
|
|
21
|
-
|
|
22
|
-
### 2. Code
|
|
23
|
-
- Implémente selon le plan validé
|
|
24
|
-
- Petits commits logiques (conventions dans `git.md`)
|
|
25
|
-
- **STOP** → montre les modifications, attend validation
|
|
26
|
-
|
|
27
|
-
### 3. Test
|
|
28
|
-
- Lance les tests (commande dans `CLAUDE.md`)
|
|
29
|
-
- Si fail → arrête et fixe CE test uniquement
|
|
30
|
-
- Si le test passe → relance la suite complète
|
|
31
|
-
- Max 5 itérations
|
|
32
|
-
- Si toujours fail → **STOP** → demande quoi faire
|
|
33
|
-
|
|
34
|
-
#### 3.1 Tests visuels (obligatoire si applicable)
|
|
35
|
-
- **Vérifie** si `.claude/rules/visual-test.md` existe
|
|
36
|
-
- Si oui → exécute `/screenshot` et compare `current/` vs `baseline/`
|
|
37
|
-
- Différence intentionnelle → mettre à jour `baseline/`
|
|
38
|
-
- Régression détectée → **STOP** → corriger avant de continuer
|
|
39
|
-
|
|
40
|
-
- Si tous les tests passent → **STOP** → attend validation
|
|
41
|
-
|
|
42
|
-
### 4. Review
|
|
43
|
-
- Review ton propre code
|
|
44
|
-
- Vérifie : sécurité, performance, lisibilité
|
|
45
|
-
- Propose des améliorations si pertinent
|
|
46
|
-
- **STOP** → attend validation
|
|
47
|
-
|
|
48
|
-
### 5. Compound
|
|
49
|
-
- Consulte `CHANGELOG.md`, `DECISIONS.md`, `LEARNINGS.md` pour contexte
|
|
50
|
-
- Apprends des feedbacks de cette session
|
|
51
|
-
- Note les préférences exprimées pour les appliquer ensuite
|
|
52
|
-
|
|
53
|
-
### 6. Document
|
|
54
|
-
- Met à jour `CHANGELOG.md` pour chaque feature/fix (obligatoire)
|
|
55
|
-
- Met à jour `LEARNINGS.md` si apprentissage important
|
|
56
|
-
- Met à jour `DECISIONS.md` si décision structurante
|
|
57
|
-
- Si ces fichiers n'existent pas → les créer avec les formats standards :
|
|
58
|
-
- CHANGELOG.md : [Keep a Changelog](https://keepachangelog.com/)
|
|
59
|
-
- DECISIONS.md : format ADR (Architecture Decision Records)
|
|
60
|
-
- LEARNINGS.md : format session avec contexte, décisions, leçons
|
|
61
|
-
- **STOP** → attend validation
|
|
62
|
-
|
|
63
|
-
### 7. Git
|
|
64
|
-
- Exécute le workflow défini dans `git.md`
|
|
65
|
-
- **STOP** → attend validation avant de commiter
|