mdma-cli 2.1.0 → 4.0.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.
@@ -7,21 +7,19 @@
7
7
 
8
8
  1. **JAMAIS push sur main**
9
9
  2. **JAMAIS commit sans branche** `feature/` ou `fix/`
10
- 3. **JAMAIS branche sans issue GitHub**
11
- 4. **JAMAIS merge sans PR**
12
- 5. **JAMAIS `git add -A`** : commiter uniquement les fichiers modifiés intentionnellement
10
+ 3. **JAMAIS merge sans PR**
11
+ 4. **JAMAIS `git add -A`** : commiter uniquement les fichiers modifiés intentionnellement
13
12
 
14
13
  Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisateur.
15
14
 
16
15
  ## Process
17
16
 
18
17
  ### Avant de coder
19
- 1. Synchroniser avec le remote :
20
- - Si sur `main` : `git pull origin main`
21
- - Si sur une feature branch : `git fetch && git rebase origin/main`
22
- 2. Créer une issue GitHub (titre + description)
23
- 3. Créer une branche depuis main : `feature/xxx` ou `fix/xxx`
24
- 4. `git checkout -b feature/ma-feature`
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
25
23
 
26
24
  ### Commits
27
25
  - Convention : **conventional commits**
@@ -36,12 +34,12 @@ Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisa
36
34
 
37
35
  ### Après validation
38
36
  1. `git add <fichiers>` (pas -A)
39
- 2. `git commit -m "feat: description"`
37
+ 2. `git commit -m "type: description"`
40
38
  3. `git push -u origin <branche>`
41
39
  4. `gh pr create --fill`
42
40
  5. Attendre validation utilisateur
43
41
  6. `gh pr merge --merge --delete-branch`
44
- 7. `git checkout main && git pull`
42
+ 7. `git checkout <branche-base> && git pull`
45
43
 
46
44
  ### Tests
47
45
  Les tests **DOIVENT** passer avant merge.
package/README.md CHANGED
@@ -9,14 +9,47 @@ npx mdma-cli add
9
9
  ```
10
10
 
11
11
  Installs rules to `.claude/rules/mdma/`:
12
- - `workflow.md` - agent workflow
13
- - `git.md` - git conventions
14
- - `style.md` - response style
15
12
  - `models.md` - model selection by task complexity
13
+ - `style.md` - response style
14
+ - `workflow-default.md` - agent workflow (7 steps)
15
+ - `git-default.md` - git conventions
16
+
17
+ ## Presets
18
+
19
+ ```bash
20
+ npx mdma-cli add # default: GitHub workflow, merge auto
21
+ npx mdma-cli add jira # JIRA integration, milestone, anonymity
22
+ ```
23
+
24
+ ## Custom mix
25
+
26
+ ```bash
27
+ npx mdma-cli add --workflow=default --git=jira
28
+ npx mdma-cli add --workflow=jira --git=default
29
+ ```
30
+
31
+ ## Commands
32
+
33
+ ```bash
34
+ npx mdma-cli add [preset] # Install rules
35
+ npx mdma-cli add --workflow=X --git=Y # Custom mix
36
+ npx mdma-cli list # List available options
37
+ npx mdma-cli help # Show help
38
+ ```
39
+
40
+ ## Available components
41
+
42
+ **Workflows:**
43
+ - `default` - 7 steps (plan, code, test, review, compound, document, git)
44
+ - `jira` - 5 steps + JIRA REST API integration
45
+
46
+ **Git:**
47
+ - `default` - ask base branch, conditional GitHub issue, merge auto
48
+ - `jira` - ask base branch, milestone, Claude anonymity
16
49
 
17
50
  ## Update
18
51
 
19
- Run `npx mdma-cli add` again. The `mdma/` folder is replaced with the latest rules. Your custom rules outside this folder are preserved.
52
+ Run `npx mdma-cli add` again. The `mdma/` folder is replaced with the latest rules.
20
53
 
21
54
  ## License
22
55
 
package/bin/init.js CHANGED
@@ -1,49 +1,163 @@
1
1
  #!/usr/bin/env node
2
2
 
3
- import { copyFileSync, mkdirSync, rmSync, readdirSync } from 'fs';
3
+ import { copyFileSync, mkdirSync, rmSync, readdirSync, existsSync } from 'fs';
4
4
  import { join, dirname } from 'path';
5
5
  import { fileURLToPath } from 'url';
6
6
 
7
7
  const __dirname = dirname(fileURLToPath(import.meta.url));
8
- const RULES_SRC = join(__dirname, '..', '.claude', 'rules', 'mdma');
8
+ const PKG_ROOT = join(__dirname, '..');
9
+ const TEMPLATES_SRC = join(PKG_ROOT, 'templates');
9
10
  const RULES_DEST = join(process.cwd(), '.claude', 'rules', 'mdma');
10
11
 
12
+ const CORE_FILES = ['models.md', 'style.md'];
13
+
14
+ const PRESETS = {
15
+ default: { workflow: 'default', git: 'default' },
16
+ jira: { workflow: 'jira', git: 'jira' }
17
+ };
18
+
11
19
  function showHelp() {
12
20
  console.log('mdma-cli - Opinionated rules for code agents\n');
13
21
  console.log('Usage:');
14
- console.log(' npx mdma-cli add Install rules to .claude/rules/mdma/');
15
- console.log(' npx mdma-cli help Show this help\n');
22
+ console.log(' npx mdma-cli add [preset] Install rules with preset');
23
+ console.log(' npx mdma-cli add --workflow=X --git=Y Install rules with custom mix');
24
+ console.log(' npx mdma-cli list List available options');
25
+ console.log(' npx mdma-cli help Show this help\n');
26
+ console.log('Presets:');
27
+ console.log(' default workflow-default + git-default (GitHub, merge auto)');
28
+ console.log(' jira workflow-jira + git-jira (JIRA integration, milestone)\n');
29
+ console.log('Examples:');
30
+ console.log(' npx mdma-cli add Install default preset');
31
+ console.log(' npx mdma-cli add jira Install jira preset');
32
+ console.log(' npx mdma-cli add --workflow=default --git=jira\n');
33
+ }
34
+
35
+ function listOptions() {
36
+ console.log('mdma-cli - Available options\n');
37
+
38
+ console.log('Presets:');
39
+ for (const [name, config] of Object.entries(PRESETS)) {
40
+ console.log(` ${name.padEnd(10)} → workflow-${config.workflow} + git-${config.git}`);
41
+ }
42
+
43
+ console.log('\nWorkflows:');
44
+ const workflows = readdirSync(TEMPLATES_SRC)
45
+ .filter(f => f.startsWith('workflow-') && f.endsWith('.md'))
46
+ .map(f => f.replace('workflow-', '').replace('.md', ''));
47
+ for (const w of workflows) {
48
+ console.log(` ${w}`);
49
+ }
50
+
51
+ console.log('\nGit:');
52
+ const gits = readdirSync(TEMPLATES_SRC)
53
+ .filter(f => f.startsWith('git-') && f.endsWith('.md'))
54
+ .map(f => f.replace('git-', '').replace('.md', ''));
55
+ for (const g of gits) {
56
+ console.log(` ${g}`);
57
+ }
58
+
59
+ console.log('\nUsage: npx mdma-cli add [preset] or npx mdma-cli add --workflow=X --git=Y\n');
60
+ }
61
+
62
+ function parseArgs(args) {
63
+ const result = { preset: null, workflow: null, git: null };
64
+
65
+ for (const arg of args) {
66
+ if (arg.startsWith('--workflow=')) {
67
+ result.workflow = arg.split('=')[1];
68
+ } else if (arg.startsWith('--git=')) {
69
+ result.git = arg.split('=')[1];
70
+ } else if (!arg.startsWith('-')) {
71
+ result.preset = arg;
72
+ }
73
+ }
74
+
75
+ return result;
16
76
  }
17
77
 
18
- function add() {
19
- console.log('mdma-cli - Installing rules\n');
78
+ function add(args) {
79
+ const parsed = parseArgs(args);
20
80
 
21
- // Remove existing mdma rules folder
81
+ let workflow, git;
82
+
83
+ if (parsed.workflow || parsed.git) {
84
+ // Custom mix
85
+ workflow = parsed.workflow || 'default';
86
+ git = parsed.git || 'default';
87
+ } else {
88
+ // Preset
89
+ const presetName = parsed.preset || 'default';
90
+ const preset = PRESETS[presetName];
91
+
92
+ if (!preset) {
93
+ console.error(`Error: Unknown preset "${presetName}"\n`);
94
+ listOptions();
95
+ process.exit(1);
96
+ }
97
+
98
+ workflow = preset.workflow;
99
+ git = preset.git;
100
+ }
101
+
102
+ // Validate files exist
103
+ const workflowFile = join(TEMPLATES_SRC, `workflow-${workflow}.md`);
104
+ const gitFile = join(TEMPLATES_SRC, `git-${git}.md`);
105
+
106
+ if (!existsSync(workflowFile)) {
107
+ console.error(`Error: workflow-${workflow}.md not found\n`);
108
+ listOptions();
109
+ process.exit(1);
110
+ }
111
+
112
+ if (!existsSync(gitFile)) {
113
+ console.error(`Error: git-${git}.md not found\n`);
114
+ listOptions();
115
+ process.exit(1);
116
+ }
117
+
118
+ console.log(`mdma-cli - Installing rules\n`);
119
+ console.log(` workflow: ${workflow}`);
120
+ console.log(` git: ${git}\n`);
121
+
122
+ // Remove existing and create fresh
22
123
  rmSync(RULES_DEST, { recursive: true, force: true });
23
124
  mkdirSync(RULES_DEST, { recursive: true });
24
125
 
25
- // Copy all .md files from source
26
- const files = readdirSync(RULES_SRC).filter(f => f.endsWith('.md'));
27
-
28
- for (const file of files) {
29
- copyFileSync(join(RULES_SRC, file), join(RULES_DEST, file));
30
- console.log(` [ok] ${file}`);
126
+ // Copy core files
127
+ for (const file of CORE_FILES) {
128
+ const src = join(TEMPLATES_SRC, file);
129
+ if (existsSync(src)) {
130
+ copyFileSync(src, join(RULES_DEST, file));
131
+ console.log(` [ok] ${file}`);
132
+ }
31
133
  }
32
134
 
33
- console.log(`\n${files.length} file(s) installed to .claude/rules/mdma/`);
34
- console.log('Edit them as needed.\n');
135
+ // Copy workflow
136
+ copyFileSync(workflowFile, join(RULES_DEST, `workflow-${workflow}.md`));
137
+ console.log(` [ok] workflow-${workflow}.md`);
138
+
139
+ // Copy git
140
+ copyFileSync(gitFile, join(RULES_DEST, `git-${git}.md`));
141
+ console.log(` [ok] git-${git}.md`);
142
+
143
+ console.log(`\n4 file(s) installed to .claude/rules/mdma/\n`);
35
144
  }
36
145
 
37
146
  function main() {
38
- const command = process.argv[2];
147
+ const args = process.argv.slice(2);
148
+ const command = args[0];
39
149
 
40
150
  switch (command) {
41
151
  case 'add':
42
- add();
152
+ add(args.slice(1));
153
+ break;
154
+ case 'list':
155
+ listOptions();
43
156
  break;
44
157
  case 'help':
45
158
  case '--help':
46
159
  case '-h':
160
+ case undefined:
47
161
  showHelp();
48
162
  break;
49
163
  default:
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mdma-cli",
3
- "version": "2.1.0",
3
+ "version": "4.0.0",
4
4
  "description": "Rules opinionated pour agents de code",
5
5
  "type": "module",
6
6
  "license": "MIT",
@@ -17,7 +17,8 @@
17
17
  },
18
18
  "files": [
19
19
  "bin",
20
- ".claude/rules"
20
+ ".claude/rules",
21
+ "templates"
21
22
  ],
22
23
  "keywords": [
23
24
  "claude",
@@ -0,0 +1,45 @@
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 "type: description"`
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.
@@ -0,0 +1,44 @@
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
+ 5. **JAMAIS cité** : ni dans les descriptions, titres, ou en tant qu'auteur. Tout est de l'utilisateur.
13
+
14
+ Si tu envisages de transgresser une règle → **STOP** → demande à l'utilisateur.
15
+
16
+ ## Process
17
+
18
+ ### Avant de coder
19
+ 1. Demander à l'utilisateur s'il souhaite se baser sur `main/master` ou `develop/dev`
20
+ 2. Synchroniser la branche de base choisie avec le remote
21
+ 3. Créer une branche depuis la base choisie : `feature/xxx` ou `fix/xxx`
22
+ 4. 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 "type: description"`
38
+ 3. `git push -u origin <branche>`
39
+ 4. `gh pr create --fill` en assignant le milestone correspondant à la version du ticket. Si ce milestone n'existe pas, le créer.
40
+ 5. Attendre validation utilisateur
41
+ 6. `git checkout <branche-base> && git pull`
42
+
43
+ ### Tests
44
+ Les tests **DOIVENT** passer avant merge.
@@ -0,0 +1,19 @@
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.
@@ -0,0 +1,42 @@
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
@@ -0,0 +1,65 @@
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
@@ -0,0 +1,47 @@
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
+ - Cherche dans .zshrc pour le token JIRA afin de l'utiliser en REST API avec CURL. Attention le token peut contenir des caractères spéciaux, en tenir compte dans le CURL.
19
+ - Cherche le contenu du ticket JIRA à traiter avec l'id donné dans le prompt
20
+ - Passe le statut du ticket JIRA à "In progress"
21
+ - Attribue le ticket à l'utilisateur
22
+ - Explore le codebase (structure documentée dans `CLAUDE.md`)
23
+ - Propose un plan d'implémentation
24
+ - **STOP** → attend validation avant de coder
25
+
26
+ ### 2. Code
27
+ - Implémente selon le plan validé
28
+ - Petits commits logiques (conventions dans `git.md`)
29
+ - **STOP** → montre les modifications, attend validation
30
+
31
+ ### 3. Test
32
+ - Lance les tests (commande dans `CLAUDE.md`)
33
+ - Si fail → arrête et fixe CE test uniquement
34
+ - Si le test passe → relance la suite complète
35
+ - Max 5 itérations
36
+ - Si toujours fail → **STOP** → demande quoi faire
37
+
38
+ ### 4. Review
39
+ - Review ton propre code
40
+ - Vérifie : sécurité, performance, lisibilité
41
+ - Propose des améliorations si pertinent
42
+ - **STOP** → attend validation
43
+
44
+ ### 5. Git
45
+ - Exécute le workflow défini dans `git.md`
46
+ - Passe le statut du ticket JIRA à "Testing"
47
+ - **STOP** → attend validation avant de commiter