create-gef 1.0.0 → 1.1.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/.gef/ENGINEERING_PLAYBOOK.md +141 -0
- package/.gef/prompts/adr_writing.md +50 -0
- package/.gef/prompts/bugfix.md +31 -0
- package/.gef/prompts/code_review.md +40 -0
- package/.gef/prompts/feature_development.md +37 -0
- package/.gef/prompts/new_project_kickoff.md +41 -0
- package/.gef/prompts/system_prompt.md +41 -0
- package/.github/workflows/release-please.yml +19 -0
- package/CHANGELOG.md +63 -0
- package/ENGINEERING_PLAYBOOK.md +88 -341
- package/PROJECT_CONFIG.template.md +15 -28
- package/README.md +87 -20
- package/generator/cli/help.js +65 -0
- package/generator/cli/questions.js +98 -0
- package/generator/features/scaffold-ci.js +441 -0
- package/generator/features/scaffold-docker.js +159 -0
- package/generator/features/scaffold-gef.js +158 -0
- package/generator/features/scaffold-git.js +138 -0
- package/generator/features/scaffold-linter.js +91 -0
- package/generator/features/scaffold-stack.js +101 -0
- package/generator/features/update.js +61 -0
- package/generator/index.js +37 -668
- package/generator/templates/adr-template.md +22 -0
- package/hooks/commit-msg +4 -3
- package/hooks/pre-commit +2 -2
- package/package.json +1 -1
- package/prompts/adr_writing.md +45 -9
- package/prompts/bugfix.md +24 -8
- package/prompts/code_review.md +34 -8
- package/prompts/feature_development.md +10 -1
- package/prompts/new_project_kickoff.md +33 -6
- package/prompts/system_prompt.md +30 -13
- package/website/.oxlintrc.json +8 -0
- package/website/README.md +16 -0
- package/website/index.html +13 -0
- package/website/package-lock.json +1372 -0
- package/website/package.json +25 -0
- package/website/public/favicon.svg +1 -0
- package/website/public/icons.svg +24 -0
- package/website/src/App.css +1 -0
- package/website/src/App.tsx +167 -0
- package/website/src/assets/hero.png +0 -0
- package/website/src/assets/react.svg +1 -0
- package/website/src/assets/vite.svg +1 -0
- package/website/src/components/FeatureCard.tsx +28 -0
- package/website/src/components/TerminalDemo.tsx +84 -0
- package/website/src/index.css +152 -0
- package/website/src/main.tsx +10 -0
- package/website/tsconfig.app.json +26 -0
- package/website/tsconfig.json +7 -0
- package/website/tsconfig.node.json +23 -0
- package/website/vite.config.ts +7 -0
- package/hooks/pre-push +0 -25
package/ENGINEERING_PLAYBOOK.md
CHANGED
|
@@ -1,395 +1,142 @@
|
|
|
1
|
-
# Engineering Playbook —
|
|
1
|
+
# Engineering Playbook — Standards "Elite" pour le Gildas Engineering Framework (GEF)
|
|
2
2
|
|
|
3
3
|
> **IMPORTANT :** En tant qu'IA, je m'engage à lire, comprendre et respecter scrupuleusement ces règles tout au long du développement du projet. Ce document est la référence absolue de notre façon de travailler ensemble, sur **tous les projets**, quels que soient le langage, la stack ou le domaine (SaaS, IA, jeu vidéo, mobile, backend...).
|
|
4
4
|
>
|
|
5
|
-
> Les spécificités techniques d'un projet donné (services cloud utilisés, base de données,
|
|
5
|
+
> Les spécificités techniques d'un projet donné (services cloud utilisés, base de données, etc.) ne figurent **jamais** ici : elles vivent dans un fichier `PROJECT_CONFIG.md` à la racine de chaque dépôt. Ce Playbook reste universel.
|
|
6
6
|
|
|
7
7
|
---
|
|
8
8
|
|
|
9
|
-
## 0. Cycle de Vie du Projet
|
|
10
|
-
|
|
11
|
-
Avant toute règle technique, l'IA doit savoir situer où en est le projet. Chaque phase a ses propres règles de traçabilité (voir §10 — Séparation R&D / Production).
|
|
12
|
-
|
|
13
|
-
```
|
|
14
|
-
0. Idée
|
|
15
|
-
↓
|
|
16
|
-
1. Étude / cadrage
|
|
17
|
-
↓
|
|
18
|
-
2. Cahier des charges (validé avec le client)
|
|
19
|
-
↓
|
|
20
|
-
3. Architecture
|
|
21
|
-
↓
|
|
22
|
-
4. Prototype (R&D — non contractuel)
|
|
23
|
-
↓
|
|
24
|
-
5. Développement (contractuel)
|
|
25
|
-
↓
|
|
26
|
-
6. Tests
|
|
27
|
-
↓
|
|
28
|
-
7. Release
|
|
29
|
-
↓
|
|
30
|
-
8. Déploiement
|
|
31
|
-
↓
|
|
32
|
-
9. Maintenance
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
L'IA doit systématiquement identifier dans quelle phase se situe la demande en cours avant d'agir, et appliquer les règles correspondantes.
|
|
9
|
+
## 0. Cycle de Vie du Projet & Clause d'Antériorité
|
|
36
10
|
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
## 0.5. Mises à jour du Playbook & Clause d'Antériorité
|
|
40
|
-
|
|
41
|
-
Ce Playbook évolue dans le temps. Pour éviter que l'IA ne détruise un projet stable en essayant d'appliquer agressivement de nouvelles règles sur du code ancien, la règle suivante s'applique de manière stricte :
|
|
42
|
-
|
|
43
|
-
> **Clause d'Antériorité (Fix Forward) :** L'IA doit appliquer les règles du Playbook sur tout le **nouveau** code produit. Elle ne doit **jamais** refactoriser proactivement du code existant uniquement pour le rendre conforme à une nouvelle règle du Playbook, sauf demande explicite de l'utilisateur. Si l'IA modifie un ancien fichier pour une autre raison (bugfix, feature), elle peut le mettre aux normes au passage (règle du Boy Scout) et toujours documenter cela.
|
|
44
|
-
|
|
45
|
-
---
|
|
46
|
-
|
|
47
|
-
## 1. Traçabilité Git Extrême (Hyper-Granularité)
|
|
48
|
-
|
|
49
|
-
- **Une action = Un commit.** Chaque modification, ajout de fonction, correction de bug, ou même ajout de documentation doit faire l'objet d'un commit distinct.
|
|
50
|
-
- **Jamais de commits groupés.** Ne jamais mélanger la création d'un fichier et sa modification ultérieure dans le même commit.
|
|
51
|
-
- **Convention de nommage stricte :** Utiliser les *Conventional Commits* pour chaque message :
|
|
52
|
-
|
|
53
|
-
| Préfixe | Usage |
|
|
54
|
-
|---------|-------|
|
|
55
|
-
| `feat:` | Nouvelle fonctionnalité |
|
|
56
|
-
| `fix:` | Correction de bug |
|
|
57
|
-
| `docs:` | Documentation uniquement |
|
|
58
|
-
| `chore:` | Maintenance (nettoyage, dépendances) |
|
|
59
|
-
| `refactor:` | Réécriture de code sans changement de comportement |
|
|
60
|
-
| `style:` | Mise en forme UI/CSS, pas de logique |
|
|
61
|
-
| `perf:` | Amélioration de performance |
|
|
62
|
-
| `test:` | Ajout ou modification de tests |
|
|
63
|
-
| `release:` | Création d'un tag de version stable |
|
|
11
|
+
L'IA doit toujours identifier la phase du projet avant d'agir (Idée → R&D → Dev Contractuel → Release → Maintenance).
|
|
64
12
|
|
|
65
|
-
|
|
66
|
-
- **Aucune falsification d'historique.** Les dates de commit reflètent toujours la réalité. La chronologie officielle d'un projet contractuel ne commence qu'au dépôt "officiel" (voir §10) — jamais en réécrivant les dates d'un dépôt existant.
|
|
13
|
+
> **Clause d'Antériorité (Fix Forward) :** L'IA applique les règles du Playbook sur tout le **nouveau** code produit. Elle ne doit **jamais** refactoriser proactivement du code existant uniquement pour le rendre conforme à une nouvelle règle, sauf demande explicite. Si un fichier est modifié pour un bugfix/feature, l'IA applique la **Boy Scout Rule** : nettoyer le code environnant sans casser les tests.
|
|
67
14
|
|
|
68
15
|
---
|
|
69
16
|
|
|
70
|
-
##
|
|
71
|
-
|
|
72
|
-
- **Commentaires en ligne :** Chaque bloc de code non-trivial doit expliquer l'*intention*, pas la mécanique.
|
|
73
|
-
- **Docstrings obligatoires :** Toute fonction, classe ou module doit inclure une documentation (paramètres, retour, rôle dans le pipeline), dans le format idiomatique du langage utilisé.
|
|
74
|
-
- **RESEARCH_LOG.md — Règle Fondamentale :** Tout bug critique et toute erreur bloquante **doit** être documentée dans `RESEARCH_LOG.md`. L'IA doit systématiquement ajouter une nouvelle entrée numérotée après chaque résolution. Ne jamais "corriger en silence".
|
|
75
|
-
- **Décisions architecturales → ADR séparés.** Les choix technologiques structurants (changement de base de données, de framework, de service cloud, etc.) ne vont **pas** dans le RESEARCH_LOG mais dans un ADR dédié (voir §6).
|
|
76
|
-
- **Mise à jour du README — Règle Précise (pas systématique) :**
|
|
77
|
-
Le `README.md` est la vitrine publique du projet. Il est mis à jour **uniquement lorsqu'une modification change** :
|
|
78
|
-
- l'installation ;
|
|
79
|
-
- les fonctionnalités visibles ;
|
|
80
|
-
- l'architecture ;
|
|
81
|
-
- les API publiques ;
|
|
82
|
-
- les prérequis ;
|
|
83
|
-
- les commandes d'utilisation.
|
|
84
|
-
|
|
85
|
-
Une modification interne sans impact utilisateur/développeur (ex : renommage de variable interne) ne déclenche pas de mise à jour du README.
|
|
86
|
-
**Ne jamais laisser le README en retard de plus d'une session de travail** lorsqu'une mise à jour est due.
|
|
87
|
-
|
|
88
|
-
---
|
|
89
|
-
|
|
90
|
-
## 3. Méthodologie Pas-à-Pas
|
|
91
|
-
|
|
92
|
-
- Ne jamais coder de larges blocs en une seule fois sans validation intermédiaire.
|
|
93
|
-
- Proposer la modification, l'expliquer, l'implémenter, puis la commiter immédiatement.
|
|
94
|
-
- Si une modification entraîne une régression ou un bug, la diagnostiquer et documenter la résolution avant de poursuivre.
|
|
95
|
-
|
|
96
|
-
---
|
|
17
|
+
## 1. Clean Code : Métriques, Tailles et Refactoring
|
|
97
18
|
|
|
98
|
-
|
|
19
|
+
L'écriture du code doit suivre les **Google Engineering Practices** : la clarté prime sur la complexité (KISS).
|
|
99
20
|
|
|
100
|
-
|
|
101
|
-
- **
|
|
102
|
-
-
|
|
21
|
+
### 1.1. Tailles Maximales (Hard Limits)
|
|
22
|
+
- **Fonctions / Méthodes :** `{{MAX_LINES}} lignes max`.
|
|
23
|
+
- **Paramètres :** `{{MAX_PARAMS}} arguments max` (au-delà, utiliser un objet de configuration).
|
|
24
|
+
- **Composants UI :** `150 à 200 lignes max`. (La logique > 50 lignes doit être extraite en *Custom Hook*).
|
|
25
|
+
- **Fichiers :** `300 à 400 lignes max`.
|
|
103
26
|
|
|
104
|
-
###
|
|
27
|
+
### 1.2. Complexité et Nesting
|
|
28
|
+
- **Profondeur (Nesting) :** `3 niveaux max`.
|
|
29
|
+
- **Guard Clauses (Early Return) :** Obligatoire. Éviter les `if/else` imbriqués.
|
|
30
|
+
- **Complexité Cyclomatique :** Maximum `{{MAX_COMPLEXITY}}` chemins logiques par fonction.
|
|
105
31
|
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
| Fichier | Max ~500 lignes |
|
|
32
|
+
### 1.3. Règles de Refactoring (The Rule of Three)
|
|
33
|
+
- **1ère fois :** Écrire pour résoudre.
|
|
34
|
+
- **2ème fois :** Tolérer la duplication.
|
|
35
|
+
- **3ème fois :** Refactorisation obligatoire en abstraction réutilisable.
|
|
111
36
|
|
|
112
|
-
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
37
|
+
### 1.4. Conventions de Nommage
|
|
38
|
+
- **Fichiers / Dossiers :** `kebab-case` (ex: `user-profile.tsx`).
|
|
39
|
+
- **Classes / Composants :** `PascalCase` (ex: `UserProfile`).
|
|
40
|
+
- **Variables / Fonctions :** `camelCase` (ex: `getUserData`).
|
|
41
|
+
- **Constantes Globales :** `UPPER_SNAKE_CASE` (ex: `MAX_RETRY_COUNT`).
|
|
42
|
+
- **Rigueur :** Lint obligatoire, typage strict (TypeScript/mypy), zéro warning ignoré sans commentaire explicite.
|
|
117
43
|
|
|
118
44
|
---
|
|
119
45
|
|
|
120
|
-
##
|
|
46
|
+
## 2. Architecture & Design (Clean Architecture & SOLID)
|
|
121
47
|
|
|
122
|
-
|
|
123
|
-
- **
|
|
124
|
-
- **
|
|
125
|
-
- **
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
- Secret scanning activé.
|
|
130
|
-
- Dependabot activé.
|
|
131
|
-
- CodeQL (ou équivalent d'analyse statique) activé.
|
|
132
|
-
- Branch protection sur `main`.
|
|
133
|
-
- Commits signés recommandés.
|
|
134
|
-
- 2FA obligatoire sur le compte.
|
|
48
|
+
Le code doit séparer le "métier" (règles de l'application) de "l'infrastructure" (frameworks, DB, UI).
|
|
49
|
+
- **Principe de Responsabilité Unique (SRP) :** Une classe/fonction ne fait qu'une seule chose.
|
|
50
|
+
- **Dependency Inversion (DIP) :** Le domaine dépend d'interfaces, pas d'implémentations.
|
|
51
|
+
- **Architecture par Fonctionnalité (Feature-Sliced Design) :** L'organisation des dossiers reflète le métier, pas la technique.
|
|
52
|
+
- *Mauvais :* `/controllers`, `/models`, `/views`
|
|
53
|
+
- *Bon :* `/features/auth/api.ts`, `/features/auth/components/`, `/features/billing/model.ts`
|
|
135
54
|
|
|
136
55
|
---
|
|
137
56
|
|
|
138
|
-
##
|
|
139
|
-
|
|
140
|
-
- **ADR (Architecture Decision Records) :** Tout changement d'architecture significatif doit faire l'objet d'un fichier dédié dans `docs/adr/`, au format :
|
|
141
|
-
|
|
142
|
-
```
|
|
143
|
-
docs/adr/
|
|
144
|
-
ADR-001-titre-de-la-decision.md
|
|
145
|
-
ADR-002-...
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
Chaque ADR contient : contexte, options envisagées, décision retenue, conséquences.
|
|
57
|
+
## 3. Gestion Avancée des Erreurs (Resilience)
|
|
149
58
|
|
|
150
|
-
- **
|
|
151
|
-
- **
|
|
59
|
+
- **Information Hiding :** Ne **JAMAIS** exposer de stack traces ou de détails techniques au client final. Renvoyer une erreur générique ("Erreur interne") avec un ID de log.
|
|
60
|
+
- **Typage des Erreurs :** Créer des classes d'exceptions (ex: `DomainError`, `InfraError`, `ValidationError`).
|
|
61
|
+
- **Result Pattern :** Remplacer les blocs `try/catch` massifs par des retours prévisibles de type `Result<Success, Failure>` pour obliger la gestion explicite de l'échec.
|
|
152
62
|
|
|
153
63
|
---
|
|
154
64
|
|
|
155
|
-
##
|
|
156
|
-
|
|
157
|
-
Avant chaque merge vers `main` :
|
|
158
|
-
|
|
159
|
-
- ✅ Lint
|
|
160
|
-
- ✅ Build
|
|
161
|
-
- ✅ Tests
|
|
162
|
-
- ✅ Revue (auto-revue minimum si travail solo)
|
|
163
|
-
- ✅ Documentation à jour
|
|
164
|
-
- ✅ Changelog mis à jour si applicable
|
|
165
|
-
|
|
166
|
-
---
|
|
65
|
+
## 4. Sécurité : OWASP Secure-by-Design & Hard Limits
|
|
167
66
|
|
|
168
|
-
|
|
67
|
+
*"La complexité est l'ennemie de la sécurité."* La stricte limite de Complexité Cyclomatique (`{{MAX_COMPLEXITY}}` max) vue au §1 est la première défense contre les angles morts de sécurité.
|
|
169
68
|
|
|
170
|
-
|
|
69
|
+
- **Defense in Depth & Sanitisation :** Ne jamais faire confiance aux entrées. Validation stricte (ex: `Zod`, `Joi`). Requêtes paramétrées obligatoires contre SQLi et encodage contre XSS.
|
|
70
|
+
- **Fail-Safe Defaults :** Tout accès est refusé par défaut.
|
|
171
71
|
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
72
|
+
### 4.1. Hard Limits de Sécurité (Standard OWASP)
|
|
73
|
+
- **Authentification & Sessions :**
|
|
74
|
+
- Durée de vie d'un **Access Token (JWT) : 15 minutes max**.
|
|
75
|
+
- Durée de vie d'un **Refresh Token : 7 jours max** (en `HttpOnly`).
|
|
76
|
+
- **Limites de Charge (Payload Limits) :**
|
|
77
|
+
- Corps de requête API (JSON) : **{{MAX_PAYLOAD}} max** (Protection DoS).
|
|
78
|
+
- Upload d'image : **5 Mo max**.
|
|
79
|
+
- **Anti-Brute Force (Rate Limiting) :**
|
|
80
|
+
- Bloquer un compte/IP pendant 15 minutes après **5 tentatives de connexion échouées**.
|
|
81
|
+
- Limite globale par IP : **100 requêtes API / minute**.
|
|
82
|
+
- **Gestion des secrets :** Toujours via variables d'environnement (`.env`). Jamais hardcodés.
|
|
183
83
|
|
|
184
84
|
---
|
|
185
85
|
|
|
186
|
-
##
|
|
86
|
+
## 5. Stratégie Git : GitHub Flow (Pull Requests)
|
|
187
87
|
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
↓
|
|
195
|
-
Lint
|
|
196
|
-
↓
|
|
197
|
-
Tests
|
|
198
|
-
↓
|
|
199
|
-
Analyse de sécurité
|
|
200
|
-
↓
|
|
201
|
-
Coverage
|
|
202
|
-
↓
|
|
203
|
-
Release automatique (si applicable, sur main uniquement)
|
|
204
|
-
```
|
|
205
|
-
|
|
206
|
-
Les workflows précis (GitHub Actions, etc.) sont définis par projet, mais la séquence de contrôle ci-dessus est non-négociable.
|
|
88
|
+
La stabilité de la branche principale est primordiale. Nous utilisons le **GitHub Flow** :
|
|
89
|
+
- **Branche `main` verrouillée :** Les pushes directs sur `main` sont **strictement interdits**.
|
|
90
|
+
- **Branches Courtes :** Créez des branches par fonctionnalité (`feat/xxx`, `fix/xxx`). Les branches ne doivent pas durer plus de quelques jours.
|
|
91
|
+
- **Pull Requests (PR) Obligatoires :** Tout code doit passer par une PR. L'intégration Continue (CI) s'exécute sur la PR pour valider les tests et le linting.
|
|
92
|
+
- **Revue de Code (Code Review) :** Une approbation est requise avant le merge. Le respect du Playbook y est vérifié.
|
|
93
|
+
- **Conventional Commits :** `feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`. Tout commit doit inclure l'ID du ticket Kanban (`#XYZ`).
|
|
207
94
|
|
|
208
95
|
---
|
|
209
96
|
|
|
210
|
-
##
|
|
211
|
-
|
|
212
|
-
Ceci répond à un problème récurrent : commencer à développer avant la validation officielle du cahier des charges avec le client, ce qui peut donner l'impression trompeuse d'un historique Git antérieur à l'accord.
|
|
213
|
-
|
|
214
|
-
**Principe : ne jamais falsifier l'historique Git. Séparer les dépôts ou les branches à la place.**
|
|
215
|
-
|
|
216
|
-
### Option recommandée — deux dépôts
|
|
217
|
-
|
|
218
|
-
```
|
|
219
|
-
Prototype interne (privé, R&D)
|
|
220
|
-
│
|
|
221
|
-
▼
|
|
222
|
-
Validation du cahier des charges
|
|
223
|
-
│
|
|
224
|
-
▼
|
|
225
|
-
Nouveau dépôt officiel (contractuel)
|
|
226
|
-
```
|
|
227
|
-
|
|
228
|
-
Pendant les discussions et l'exploration technique, tout se passe dans le dépôt R&D : autant de commits que nécessaire, aucune contrainte de présentation. Une fois le projet validé, un nouveau dépôt officiel est créé et l'état du code y est importé (copie, squash, ou réinitialisation d'historique). Le premier commit de ce dépôt correspond au lancement officiel du projet. Le client n'a accès qu'à ce dépôt.
|
|
229
|
-
|
|
230
|
-
### Alternative — branches dans le même dépôt
|
|
231
|
-
|
|
232
|
-
```
|
|
233
|
-
research / prototype → squash merge → main
|
|
234
|
-
```
|
|
235
|
-
|
|
236
|
-
Le client ne regarde que `main`.
|
|
237
|
-
|
|
238
|
-
### Le dépôt R&D n'est pas un fourre-tout
|
|
239
|
-
|
|
240
|
-
Même en phase de recherche, le même niveau d'exigence s'applique. Le dépôt R&D est un **journal de recherche**, pas un bac à sable :
|
|
241
|
-
|
|
242
|
-
```
|
|
243
|
-
feat(auth): evaluate provider X with custom claims
|
|
244
|
-
experiment(realtime): benchmark WebSocket vs managed realtime
|
|
245
|
-
perf(database): compare ORM A and ORM B latency
|
|
246
|
-
research(ai): evaluate pipeline for use case Y
|
|
247
|
-
prototype(ui): implement adaptive navigation
|
|
248
|
-
refactor(core): isolate domain layer for future modularization
|
|
249
|
-
```
|
|
250
|
-
|
|
251
|
-
**Règle :** aucun commit ne doit nécessiter d'explication orale. En lisant uniquement le titre, la description et les fichiers modifiés, on doit comprendre le problème traité, la solution retenue, et la raison du changement.
|
|
252
|
-
|
|
253
|
-
### Alternative — assumer une phase de prototype dans le planning
|
|
254
|
-
|
|
255
|
-
```
|
|
256
|
-
Phase 0 — Prototype interne (non facturée)
|
|
257
|
-
Phase 1 — Conception
|
|
258
|
-
Phase 2 — Développement
|
|
259
|
-
```
|
|
260
|
-
|
|
261
|
-
Cette option peut être communiquée directement au client si la transparence totale est préférable à la séparation des dépôts.
|
|
262
|
-
|
|
263
|
-
---
|
|
264
|
-
|
|
265
|
-
## 11. Gestion des Versions (Releases GitHub)
|
|
266
|
-
|
|
267
|
-
- **Principe :** Une Release GitHub est une "photo officielle et immuable" du projet à une étape clé. Elle permet de revenir à un état stable à tout moment, et aux parties prenantes de suivre l'avancement formel du projet.
|
|
268
|
-
- **Quand créer une Release ?** À chaque jalon majeur défini dans `PROJECT_CONFIG.md` (ex : MVP, première fonctionnalité majeure, version publique).
|
|
269
|
-
- **Comment créer une Release ?**
|
|
270
|
-
|
|
271
|
-
```bash
|
|
272
|
-
# 1. Créer un tag Git annoté
|
|
273
|
-
git tag -a v0.1.0 -m "Description du jalon"
|
|
274
|
-
|
|
275
|
-
# 2. Pousser le tag
|
|
276
|
-
git push origin v0.1.0
|
|
277
|
-
|
|
278
|
-
# 3. Créer la Release sur GitHub avec des notes de version claires
|
|
279
|
-
```
|
|
280
|
-
|
|
281
|
-
- **Notes de version (Changelog) :** Chaque Release doit inclure :
|
|
282
|
-
- ✅ Ce qui a été ajouté
|
|
283
|
-
- 🐛 Ce qui a été corrigé
|
|
284
|
-
- ⚠️ Les changements potentiellement cassants (breaking changes)
|
|
285
|
-
|
|
286
|
-
---
|
|
287
|
-
|
|
288
|
-
## 12. Hygiène du Dépôt
|
|
289
|
-
|
|
290
|
-
- **`.gitignore` strict :** Les fichiers d'environnement virtuel, données brutes locales, caches de build, secrets, et dépendances installées ne doivent jamais être commités.
|
|
291
|
-
- **Nettoyage régulier :** Les fichiers de test, de debug, ou les scripts temporaires doivent être supprimés dès qu'ils ne sont plus utiles. Un dépôt propre = un projet professionnel.
|
|
292
|
-
|
|
293
|
-
### Structure standard d'un projet
|
|
294
|
-
|
|
295
|
-
```
|
|
296
|
-
docs/
|
|
297
|
-
adr/
|
|
298
|
-
research/
|
|
299
|
-
src/
|
|
300
|
-
tests/
|
|
301
|
-
scripts/
|
|
302
|
-
.github/
|
|
303
|
-
assets/
|
|
304
|
-
infra/
|
|
305
|
-
docker/
|
|
306
|
-
database/
|
|
307
|
-
README.md
|
|
308
|
-
CHANGELOG.md
|
|
309
|
-
PROJECT_CONFIG.md
|
|
310
|
-
LICENSE
|
|
311
|
-
```
|
|
312
|
-
|
|
313
|
-
---
|
|
314
|
-
|
|
315
|
-
## 13. Stratégie de Branches Git (Feature Branch Workflow)
|
|
316
|
-
|
|
317
|
-
> **Règle fondamentale :** Chaque fonctionnalité, correction, ou amélioration = une branche dédiée. On ne travaille jamais directement sur `main`.
|
|
318
|
-
|
|
319
|
-
### Convention de nommage des branches
|
|
320
|
-
|
|
321
|
-
| Préfixe | Usage | Exemple |
|
|
322
|
-
|---------|-------|---------|
|
|
323
|
-
| `feat/` | Nouvelle fonctionnalité | `feat/export-csv` |
|
|
324
|
-
| `fix/` | Correction de bug | `fix/parsing-error` |
|
|
325
|
-
| `refactor/` | Réécriture sans changement fonctionnel | `refactor/service-layer` |
|
|
326
|
-
| `docs/` | Documentation uniquement | `docs/api-reference` |
|
|
327
|
-
| `chore/` | Maintenance, dépendances | `chore/update-deps` |
|
|
328
|
-
| `release/` | Préparation d'une release | `release/v0.2.0` |
|
|
329
|
-
|
|
330
|
-
### Cycle de vie d'une branche
|
|
331
|
-
|
|
332
|
-
```
|
|
333
|
-
main
|
|
334
|
-
└── feat/ma-fonctionnalite ← créer la branche
|
|
335
|
-
│── commit 1 (feat: ...) ← travailler en micro-commits
|
|
336
|
-
│── commit 2 (fix: ...)
|
|
337
|
-
└── PR / merge → main ← fusionner quand terminé et testé
|
|
338
|
-
└── supprimer la branche après merge
|
|
339
|
-
```
|
|
340
|
-
|
|
341
|
-
### Commandes de référence
|
|
342
|
-
|
|
343
|
-
```bash
|
|
344
|
-
# Créer et basculer sur une nouvelle branche
|
|
345
|
-
git checkout -b feat/nom-de-la-fonctionnalite
|
|
346
|
-
|
|
347
|
-
# Pousser la branche sur GitHub
|
|
348
|
-
git push origin feat/nom-de-la-fonctionnalite
|
|
349
|
-
|
|
350
|
-
# Fusionner dans main (après validation)
|
|
351
|
-
git checkout main
|
|
352
|
-
git merge --no-ff feat/nom-de-la-fonctionnalite
|
|
353
|
-
git push origin main
|
|
354
|
-
|
|
355
|
-
# Supprimer la branche locale et distante après merge
|
|
356
|
-
git branch -d feat/nom-de-la-fonctionnalite
|
|
357
|
-
git push origin --delete feat/nom-de-la-fonctionnalite
|
|
358
|
-
```
|
|
97
|
+
## 6. Documentation : Diátaxis & Docs-as-Code
|
|
359
98
|
|
|
360
|
-
|
|
99
|
+
La documentation technique (dossier `docs/`) doit suivre le framework cognitif **Diátaxis** :
|
|
100
|
+
1. **Tutoriels** (Prise en main)
|
|
101
|
+
2. **How-to Guides** (Tâches spécifiques)
|
|
102
|
+
3. **Référence** (API, DB)
|
|
103
|
+
4. **Explication** (Architecture, ADR)
|
|
361
104
|
|
|
362
|
-
- `
|
|
363
|
-
-
|
|
364
|
-
-
|
|
365
|
-
-
|
|
105
|
+
- **Docs-as-Code & Modèle C4 :** L'architecture doit être visuelle et versionnée. Utiliser le format **Modèle C4** (Contexte, Conteneurs, Composants) généré via code (ex: `Mermaid.js`) pour garantir que les schémas ne deviennent jamais obsolètes.
|
|
106
|
+
- **ADR & RESEARCH_LOG :**
|
|
107
|
+
- **ADR :** Tout changement structurel majeur nécessite un rapport d'Architecture (ADR).
|
|
108
|
+
- **RESEARCH_LOG.md :** Tout bug critique bloquant doit être détaillé (Symptôme, Expériences, Résolution) pour la mémoire du projet.
|
|
366
109
|
|
|
367
110
|
---
|
|
368
111
|
|
|
369
|
-
##
|
|
112
|
+
## 7. Assurance Qualité (QA) : Shift-Left & Test Pyramid
|
|
370
113
|
|
|
371
|
-
|
|
372
|
-
- **
|
|
373
|
-
- **
|
|
374
|
-
- **
|
|
375
|
-
- **
|
|
114
|
+
La qualité s'injecte avant le code, pas après.
|
|
115
|
+
- **Shift-Left Testing :** La réflexion sur les tests et la sécurité commence dès l'écriture des spécifications.
|
|
116
|
+
- **Behavior-Driven Development (BDD) :** Aligner la technique et le métier. Les tests (surtout E2E) doivent suivre la syntaxe `Given / When / Then`.
|
|
117
|
+
- **La Pyramide des Tests :**
|
|
118
|
+
- **Base :** 80% de Tests Unitaires (très rapides, ciblent la logique métier sans DB).
|
|
119
|
+
- **Milieu :** 15% de Tests d'Intégration (valident la communication DB / API).
|
|
120
|
+
- **Sommet :** 5% de Tests End-to-End (E2E type Playwright). Ils sont lents et fragiles, l'IA ne doit pas s'appuyer uniquement sur eux.
|
|
376
121
|
|
|
377
122
|
---
|
|
378
123
|
|
|
379
|
-
##
|
|
124
|
+
## 8. Pilotage Kanban et Autonomie de l'IA
|
|
380
125
|
|
|
381
|
-
|
|
382
|
-
- **
|
|
383
|
-
-
|
|
126
|
+
L'IA agit comme un Tech Lead autonome.
|
|
127
|
+
- **Découpage en Issues :** Utiliser la CLI GitHub (`gh issue create`) pour découper un grand chantier en sous-tâches.
|
|
128
|
+
- **Création de Pull Requests (PR) :** Si des branches temporaires sont requises pour une revue par l'utilisateur, utiliser `gh pr create`.
|
|
129
|
+
- **Validation Humaine Obligatoire :** L'IA ne merge **JAMAIS** de Pull Request elle-même. Elle prépare tout et demande à l'utilisateur de cliquer sur le bouton de Merge.
|
|
384
130
|
|
|
385
131
|
---
|
|
386
132
|
|
|
387
|
-
##
|
|
133
|
+
## 9. Hygiène, CI/CD et Séparation R&D
|
|
388
134
|
|
|
389
|
-
|
|
390
|
-
- **
|
|
391
|
-
-
|
|
135
|
+
- **Zéro Scories :** Scripts temporaires, fichiers de debug ou commentaires commentés doivent être supprimés avant tout push.
|
|
136
|
+
- **CI/CD :** À chaque push, les workflows GitHub Actions doivent vérifier : Lint, Build, Tests Unitaires, Analyse de sécurité.
|
|
137
|
+
- **Release Please :** La gestion des versions (Semantic Versioning) est pilotée automatiquement via les Conventional Commits et l'outil Release Please.
|
|
138
|
+
- **Séparation R&D :** Les expérimentations sans cahier des charges validé se font sur un dépôt privé séparé. L'historique Git officiel du produit final doit rester propre et professionnel.
|
|
392
139
|
|
|
393
140
|
---
|
|
394
141
|
|
|
395
|
-
*Ce
|
|
142
|
+
*Ce document évolutif garantit un niveau d'ingénierie d'excellence (Standard DORA "Elite") sur l'ensemble de nos projets.*
|
|
@@ -1,34 +1,21 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Configuration Projet — GEF
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Ce fichier sert de point de vérité technique pour le projet, ainsi que de contexte pour l'IA.
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
5
|
+
- **Nom du projet :** {{PROJECT_NAME}}
|
|
6
|
+
- **Date de création :** {{DATE}}
|
|
7
|
+
- **Phase :** {{PHASE}}
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
- **
|
|
11
|
-
- **Phase du projet :** {{PHASE}}
|
|
12
|
-
- **Dernière mise à jour :** {{DATE}}
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## Architecture Cloud-Native
|
|
17
|
-
|
|
18
|
-
- **Stack Technologique :** {{STACK}}
|
|
19
|
-
- **Cloud Provider :** {{CLOUD}}
|
|
9
|
+
## Choix Techniques (Générés par GEF)
|
|
10
|
+
- **Stack / Langage :** {{STACK}}
|
|
20
11
|
- **Base de données :** {{DATABASE}}
|
|
12
|
+
- **Cloud Provider :** {{CLOUD}}
|
|
21
13
|
|
|
22
|
-
##
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
| Version | Jalon correspondant |
|
|
29
|
-
|---------|---------------------|
|
|
30
|
-
| `v0.1.0-mvp` | MVP fonctionnel |
|
|
31
|
-
|
|
32
|
-
## Couverture de tests minimale
|
|
14
|
+
## Workflows & Qualité
|
|
15
|
+
- **Workflow Git :** {{GIT_WORKFLOW}}
|
|
16
|
+
- **Sévérité (Hard Limits) :** {{STRICTNESS}}
|
|
17
|
+
- **Linter / Formatter :** {{LINTER}}
|
|
18
|
+
- **Langue par défaut :** {{LANGUAGE}}
|
|
33
19
|
|
|
34
|
-
|
|
20
|
+
---
|
|
21
|
+
*Fichier généré automatiquement. Ne supprimez pas les clés principales, l'IA s'en sert pour adapter ses réponses.*
|