create-gef 1.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.
- package/.github/workflows/release-please.yml +18 -0
- package/ENGINEERING_PLAYBOOK.md +395 -0
- package/PROJECT_CONFIG.template.md +34 -0
- package/README.md +229 -0
- package/ci-templates/main.yml +76 -0
- package/generator/index.js +700 -0
- package/hooks/commit-msg +27 -0
- package/hooks/pre-commit +46 -0
- package/hooks/pre-push +25 -0
- package/package.json +18 -0
- package/prompts/adr_writing.md +14 -0
- package/prompts/bugfix.md +15 -0
- package/prompts/code_review.md +14 -0
- package/prompts/feature_development.md +29 -0
- package/prompts/new_project_kickoff.md +14 -0
- package/prompts/system_prompt.md +24 -0
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
on:
|
|
2
|
+
push:
|
|
3
|
+
branches:
|
|
4
|
+
- main
|
|
5
|
+
|
|
6
|
+
permissions:
|
|
7
|
+
contents: write
|
|
8
|
+
pull-requests: write
|
|
9
|
+
|
|
10
|
+
name: release-please
|
|
11
|
+
|
|
12
|
+
jobs:
|
|
13
|
+
release-please:
|
|
14
|
+
runs-on: ubuntu-latest
|
|
15
|
+
steps:
|
|
16
|
+
- uses: googleapis/release-please-action@v4
|
|
17
|
+
with:
|
|
18
|
+
release-type: node
|
|
@@ -0,0 +1,395 @@
|
|
|
1
|
+
# Engineering Playbook — Règles de Travail et de Traçabilité pour l'IA
|
|
2
|
+
|
|
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
|
+
>
|
|
5
|
+
> Les spécificités techniques d'un projet donné (services cloud utilisés, base de données, conventions propres au client) ne figurent **jamais** ici : elles vivent dans un fichier `PROJECT_CONFIG.md` à la racine de chaque dépôt. Ce Playbook reste universel.
|
|
6
|
+
|
|
7
|
+
---
|
|
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.
|
|
36
|
+
|
|
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 |
|
|
64
|
+
|
|
65
|
+
- **Messages détaillés :** Pour les commits complexes, inclure un "body" expliquant *pourquoi*, pas seulement *quoi*.
|
|
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.
|
|
67
|
+
|
|
68
|
+
---
|
|
69
|
+
|
|
70
|
+
## 2. Documentation Exhaustive & Continue
|
|
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
|
+
---
|
|
97
|
+
|
|
98
|
+
## 4. Architecture & Code
|
|
99
|
+
|
|
100
|
+
- Maintenir le code propre, modulaire et auditable scientifiquement.
|
|
101
|
+
- **Aucune donnée hardcodée.** Les listes extensibles (configuration métier, valeurs susceptibles d'évoluer) doivent être stockées en base de données ou en configuration, jamais en constante codée en dur.
|
|
102
|
+
- Les choix d'infrastructure spécifiques (cloud provider, base de données, services tiers) sont documentés dans `PROJECT_CONFIG.md`, pas ici.
|
|
103
|
+
|
|
104
|
+
### Standards de code
|
|
105
|
+
|
|
106
|
+
| Élément | Limite indicative |
|
|
107
|
+
|---|---|
|
|
108
|
+
| Fonction | Max ~40 lignes |
|
|
109
|
+
| Composant UI | Max ~250 lignes |
|
|
110
|
+
| Fichier | Max ~500 lignes |
|
|
111
|
+
|
|
112
|
+
- Lint obligatoire avant tout commit.
|
|
113
|
+
- Formatteur automatique obligatoire (config partagée dans le dépôt).
|
|
114
|
+
- Zéro erreur de typage (TypeScript, mypy, etc. selon le langage).
|
|
115
|
+
- Zéro warning ignoré sans justification écrite.
|
|
116
|
+
- Couverture de tests minimale à définir par projet dans `PROJECT_CONFIG.md`.
|
|
117
|
+
|
|
118
|
+
---
|
|
119
|
+
|
|
120
|
+
## 5. Sécurité Maximale (Best Practices)
|
|
121
|
+
|
|
122
|
+
- **Gestion des Secrets :** Ne jamais coder en dur de clés API, mots de passe, ou tokens. Toujours utiliser les variables d'environnement via `.env` (voir `.env.example`).
|
|
123
|
+
- **Sanitisation :** Valider et nettoyer toutes les entrées utilisateur.
|
|
124
|
+
- **Principe du Moindre Privilège :** Toute route ou fonctionnalité sensible doit vérifier explicitement les droits d'accès requis.
|
|
125
|
+
- **Tokens/Sessions :** Durée de vie limitée, jamais stockés en clair côté serveur.
|
|
126
|
+
|
|
127
|
+
### Sécurité GitHub
|
|
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.
|
|
135
|
+
|
|
136
|
+
---
|
|
137
|
+
|
|
138
|
+
## 6. Historique des Décisions (ADR) et Gestion des Erreurs
|
|
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.
|
|
149
|
+
|
|
150
|
+
- **Bugs :** Chaque bug résolu = une nouvelle entrée dans `RESEARCH_LOG.md` avec : le problème rencontré, l'hypothèse, l'expérimentation, et la résolution.
|
|
151
|
+
- **Zéro fichier de test en production :** Les scripts de débogage temporaires (`debug_*`, `test_*` hors suite de tests officielle) doivent être supprimés dès que leur usage est terminé. Ils ne doivent jamais être commités sur la branche principale.
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 7. Revue de Code
|
|
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
|
+
---
|
|
167
|
+
|
|
168
|
+
## 8. Gestion des Dépendances
|
|
169
|
+
|
|
170
|
+
Toute dépendance ajoutée doit être justifiée :
|
|
171
|
+
|
|
172
|
+
```
|
|
173
|
+
Dépendance ajoutée
|
|
174
|
+
↓
|
|
175
|
+
Justification (pourquoi celle-ci)
|
|
176
|
+
↓
|
|
177
|
+
Licence vérifiée (compatible avec le projet)
|
|
178
|
+
↓
|
|
179
|
+
Maintenance (projet actif ? dernière mise à jour récente ?)
|
|
180
|
+
↓
|
|
181
|
+
Alternatives étudiées (au moins une)
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
---
|
|
185
|
+
|
|
186
|
+
## 9. CI/CD
|
|
187
|
+
|
|
188
|
+
À chaque push sur une branche de fonctionnalité, puis à chaque merge sur `main` :
|
|
189
|
+
|
|
190
|
+
```
|
|
191
|
+
Push
|
|
192
|
+
↓
|
|
193
|
+
Build
|
|
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.
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 10. Séparation R&D / Production
|
|
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
|
+
```
|
|
359
|
+
|
|
360
|
+
### Règles de protection de `main`
|
|
361
|
+
|
|
362
|
+
- `main` = code stable, **toujours déployable**.
|
|
363
|
+
- Jamais de `git push --force` sur `main`.
|
|
364
|
+
- Tout merge sur `main` doit passer par un commit de merge explicite (`--no-ff`).
|
|
365
|
+
- Si une modification urgente est nécessaire directement : créer une branche `fix/nom-du-bug` et merger rapidement.
|
|
366
|
+
|
|
367
|
+
---
|
|
368
|
+
|
|
369
|
+
## 14. Pilotage Kanban et Pull Requests Autonomes
|
|
370
|
+
|
|
371
|
+
L'IA agit comme un Tech Lead complet. Elle gère son propre tableau de bord.
|
|
372
|
+
- **Création d'Issues :** Avant de démarrer un grand chantier, l'IA utilise la CLI GitHub (`gh issue create`) pour créer les tickets correspondant aux sous-tâches.
|
|
373
|
+
- **Règle de Commit Strict :** TOUS les commits sans exception doivent inclure la référence du ticket à la fin de la première ligne (ex: `feat: ajout du bouton de login (#42)`). Le hook Git `commit-msg` bloquera les commits non conformes.
|
|
374
|
+
- **Création de Pull Request :** Une fois une branche terminée, l'IA utilise `gh pr create` pour ouvrir la Pull Request (avec un résumé des changements et la mention "Closes #XYZ").
|
|
375
|
+
- **Validation Humaine Obligatoire :** L'IA s'arrête ici. Elle **demande explicitement à l'utilisateur de valider** et de merger la PR lui-même. L'IA ne merge JAMAIS d'elle-même.
|
|
376
|
+
|
|
377
|
+
---
|
|
378
|
+
|
|
379
|
+
## 15. Auto-Documentation et ADRs (Architecture Decision Records)
|
|
380
|
+
|
|
381
|
+
La mémoire technique du projet est sacrée.
|
|
382
|
+
- **Règle ADR :** Chaque fois que l'IA choisit d'intégrer une nouvelle dépendance majeure, de changer un modèle de base de données, ou de structurer un nouveau micro-service, elle **DOIT** rédiger un rapport dans `docs/adr/` (en copiant le `0000-template.md`).
|
|
383
|
+
- Ce rapport doit être écrit et commité **avant** que la première ligne de code de cette architecture ne soit écrite.
|
|
384
|
+
|
|
385
|
+
---
|
|
386
|
+
|
|
387
|
+
## 16. TDD (Test-Driven Development) Piloté par l'IA
|
|
388
|
+
|
|
389
|
+
La qualité logicielle s'assure avant le code de production, pas après.
|
|
390
|
+
- **Règle Playwright / Tests E2E :** Avant d'implémenter la logique visuelle ou backend d'une fonctionnalité complexe, l'IA doit rédiger le test de bout-en-bout (E2E) correspondant (généralement via Playwright, s'il est installé).
|
|
391
|
+
- Le test doit modéliser le comportement attendu. Le code applicatif est ensuite écrit pour faire passer ce test au vert.
|
|
392
|
+
|
|
393
|
+
---
|
|
394
|
+
|
|
395
|
+
*Ce Playbook est un standard personnel, applicable à tous les projets. Les spécificités de chaque projet vivent dans son propre `PROJECT_CONFIG.md`.*
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# PROJECT_CONFIG.md
|
|
2
|
+
|
|
3
|
+
> Ce fichier contient tout ce qui est **spécifique à ce projet**. Il complète le `ENGINEERING_PLAYBOOK.md` universel, qui ne doit lui jamais contenir ces informations.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Identification
|
|
8
|
+
|
|
9
|
+
- **Projet :** {{PROJECT_NAME}}
|
|
10
|
+
- **Porteurs :** Gildas (Pôle Technique & Innovation)
|
|
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}}
|
|
20
|
+
- **Base de données :** {{DATABASE}}
|
|
21
|
+
|
|
22
|
+
## Rôles et Permissions
|
|
23
|
+
|
|
24
|
+
<À COMPLÉTER avec vos règles d'accès et sécurité>
|
|
25
|
+
|
|
26
|
+
## Jalons de Release
|
|
27
|
+
|
|
28
|
+
| Version | Jalon correspondant |
|
|
29
|
+
|---------|---------------------|
|
|
30
|
+
| `v0.1.0-mvp` | MVP fonctionnel |
|
|
31
|
+
|
|
32
|
+
## Couverture de tests minimale
|
|
33
|
+
|
|
34
|
+
<À COMPLÉTER>
|
package/README.md
ADDED
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
# Gildas Engineering Framework (GEF)
|
|
2
|
+
|
|
3
|
+
> Un framework d'ingénierie logicielle qui transforme des règles de travail en outils automatisés. Il garantit traçabilité, sécurité et qualité sur chaque projet, dès le premier commit.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Sommaire
|
|
8
|
+
|
|
9
|
+
1. [Philosophie](#1-philosophie)
|
|
10
|
+
2. [Structure du dépôt](#2-structure-du-dépôt)
|
|
11
|
+
3. [Installation et Utilisation](#3-installation-et-utilisation)
|
|
12
|
+
4. [Le Générateur de Projet (Brique A)](#4-le-générateur-de-projet-brique-a)
|
|
13
|
+
5. [Les Hooks Git (Brique B)](#5-les-hooks-git-brique-b)
|
|
14
|
+
6. [Le Pipeline CI/CD (Brique C)](#6-le-pipeline-cicd-brique-c)
|
|
15
|
+
7. [Les Prompts IA (Brique D)](#7-les-prompts-ia-brique-d)
|
|
16
|
+
8. [Le Tech Lead Virtuel (Brique E)](#8-le-tech-lead-virtuel-brique-e)
|
|
17
|
+
9. [La Source de Vérité](#9-la-source-de-vérité)
|
|
18
|
+
|
|
19
|
+
---
|
|
20
|
+
|
|
21
|
+
## 1. Philosophie
|
|
22
|
+
|
|
23
|
+
Le GEF repose sur un principe unique : **les règles d'ingénierie ne doivent pas être relues — elles doivent être imposées mécaniquement.**
|
|
24
|
+
|
|
25
|
+
- Le [`ENGINEERING_PLAYBOOK.md`](./ENGINEERING_PLAYBOOK.md) est la source de vérité absolue. Il définit les règles universelles (traçabilité Git, documentation, architecture, sécurité, TDD, ADR, Kanban). Il ne contient jamais d'informations propres à un projet.
|
|
26
|
+
- Le [`PROJECT_CONFIG.template.md`](./PROJECT_CONFIG.template.md) est le complément spécifique à chaque projet (cloud, base de données, jalons). Il est généré automatiquement par le générateur et doit être complété par le porteur.
|
|
27
|
+
- **Rien dans ce dépôt n'est spécifique à un projet.** Le GEF est universel et agnostique.
|
|
28
|
+
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## 2. Structure du dépôt
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
GEF/
|
|
35
|
+
│
|
|
36
|
+
├── ENGINEERING_PLAYBOOK.md ← Source de vérité (règles universelles)
|
|
37
|
+
├── PROJECT_CONFIG.template.md ← Template de configuration projet
|
|
38
|
+
├── README.md ← Ce fichier
|
|
39
|
+
├── package.json ← Package NPM (rend le GEF exécutable via npx)
|
|
40
|
+
│
|
|
41
|
+
├── generator/ ← Brique A : CLI de génération de projet
|
|
42
|
+
│ └── index.js ← Point d'entrée (interface interactive + commande update)
|
|
43
|
+
│
|
|
44
|
+
├── hooks/ ← Brique B : Hooks Git de sécurité
|
|
45
|
+
│ ├── commit-msg ← Conventional Commits + référence Kanban obligatoire (#XYZ)
|
|
46
|
+
│ ├── pre-commit ← Détection secrets, lint
|
|
47
|
+
│ └── pre-push ← Blocage push direct sur main
|
|
48
|
+
│
|
|
49
|
+
├── ci-templates/ ← Brique C : Template de base CI/CD
|
|
50
|
+
│ └── main.yml ← (le générateur produit un CI adapté à la stack)
|
|
51
|
+
│
|
|
52
|
+
├── .github/workflows/
|
|
53
|
+
│ └── release-please.yml ← Automatisation des releases du GEF lui-même
|
|
54
|
+
│
|
|
55
|
+
└── prompts/ ← Brique D : Prompts pour assistants IA
|
|
56
|
+
├── system_prompt.md ← Prompt de base (à charger en début de session)
|
|
57
|
+
├── feature_development.md ← Pour le développement d'une fonctionnalité
|
|
58
|
+
├── code_review.md ← Pour une revue de code
|
|
59
|
+
├── bugfix.md ← Pour une correction de bug
|
|
60
|
+
├── adr_writing.md ← Pour la rédaction d'un ADR
|
|
61
|
+
└── new_project_kickoff.md ← Pour le démarrage d'un nouveau projet
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
---
|
|
65
|
+
|
|
66
|
+
## 3. Installation et Utilisation
|
|
67
|
+
|
|
68
|
+
Le GEF est conçu pour être utilisé directement sans avoir besoin de cloner le dépôt, exactement comme `create-next-app` ou `create-vite`.
|
|
69
|
+
|
|
70
|
+
**Prérequis :** Node.js (v18+), Git, GitHub CLI (`gh`) pour les fonctionnalités Kanban.
|
|
71
|
+
|
|
72
|
+
### Créer un nouveau projet
|
|
73
|
+
|
|
74
|
+
```bash
|
|
75
|
+
npx create-gef
|
|
76
|
+
```
|
|
77
|
+
|
|
78
|
+
### Mettre à jour un projet existant
|
|
79
|
+
|
|
80
|
+
Depuis la racine d'un projet existant généré par GEF, mettez à jour le Playbook, les prompts et les hooks Git vers la dernière version du framework :
|
|
81
|
+
|
|
82
|
+
```bash
|
|
83
|
+
npx create-gef update
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
### Développement local du framework
|
|
87
|
+
|
|
88
|
+
Si vous modifiez le framework GEF lui-même et souhaitez tester la CLI localement :
|
|
89
|
+
|
|
90
|
+
```bash
|
|
91
|
+
# 1. Cloner le dépôt
|
|
92
|
+
git clone https://github.com/Gnzikoune/GEF.git GEF
|
|
93
|
+
cd GEF
|
|
94
|
+
|
|
95
|
+
# 2. Installer les dépendances
|
|
96
|
+
npm install
|
|
97
|
+
|
|
98
|
+
# 3. Rendre la commande locale accessible globalement
|
|
99
|
+
npm link
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
---
|
|
103
|
+
|
|
104
|
+
## 4. Le Générateur de Projet (Brique A)
|
|
105
|
+
|
|
106
|
+
### Ce que le générateur fait
|
|
107
|
+
|
|
108
|
+
L'assistant pose 7 questions, puis exécute automatiquement :
|
|
109
|
+
|
|
110
|
+
| Étape | Action |
|
|
111
|
+
|---|---|
|
|
112
|
+
| **1. Scaffolding** | Installe le framework choisi (`npx create-next-app`, `npm create vite`, etc.) en mode **entièrement interactif** |
|
|
113
|
+
| **2. Arborescence GEF** | Crée `docs/adr/`, `docs/research/`, `tests/`, `scripts/`, `infra/`, `database/` |
|
|
114
|
+
| **3. Template ADR** | Crée `docs/adr/0000-template.md` prêt à l'emploi |
|
|
115
|
+
| **4. Playwright** | Installe Playwright (tests E2E) nativement pour les stacks React et Next.js |
|
|
116
|
+
| **5. Configuration** | Génère `PROJECT_CONFIG.md` pré-rempli avec vos choix (stack, cloud, DB, phase) |
|
|
117
|
+
| **6. Documentation** | Génère `README.md` et `docs/research/RESEARCH_LOG.md` |
|
|
118
|
+
| **7. Docker** | Génère `docker/Dockerfile` et `docker/docker-compose.yml` adaptés à votre stack *(ignoré si Cloud = Vercel)* |
|
|
119
|
+
| **8. Vercel** | Génère `vercel.json` si Vercel est choisi comme Cloud Provider |
|
|
120
|
+
| **9. Supabase** | Génère `supabase/config.toml` et `supabase/migrations/` si Supabase est choisi |
|
|
121
|
+
| **10. Git & Hooks** | Initialise Git et installe les 3 hooks de sécurité GEF |
|
|
122
|
+
| **11. CI/CD** | Génère `.github/workflows/main.yml` adapté à la stack et au cloud provider |
|
|
123
|
+
| **12. Release Please** | Génère `.github/workflows/release-please.yml` pour automatiser les tags et releases |
|
|
124
|
+
|
|
125
|
+
### Stacks supportées
|
|
126
|
+
|
|
127
|
+
| Framework | Scaffolding | Docker | CI |
|
|
128
|
+
|---|---|---|---|
|
|
129
|
+
| Next.js (React) | `npx create-next-app@latest` | Multi-stage → Node | Setup Node 20 + lint + tests |
|
|
130
|
+
| React (Vite) | `npm create vite@latest` | Multi-stage → Nginx | Setup Node 20 + lint + tests |
|
|
131
|
+
| API Node.js (Express) | `npm init` + `express` | Node Alpine + DB service | Setup Node 20 + lint + tests |
|
|
132
|
+
| API Python (FastAPI) | `venv` + `requirements.txt` | Python 3.12-slim + DB service | Setup Python 3.12 + flake8 + pytest |
|
|
133
|
+
| Projet vide | — | Alpine générique | Générique |
|
|
134
|
+
|
|
135
|
+
### Cloud Providers supportés
|
|
136
|
+
|
|
137
|
+
| Cloud | Effet |
|
|
138
|
+
|---|---|
|
|
139
|
+
| **Vercel** | Génère `vercel.json`, supprime la question Docker, déploiement auto dans le CI sur push `main` |
|
|
140
|
+
| **AWS** | Job de déploiement AWS dans le CI sur tag `v*.*.*` |
|
|
141
|
+
| **GCP / Azure** | Release GitHub automatique sur tag `v*.*.*` |
|
|
142
|
+
| **Aucun** | Release GitHub automatique sur tag `v*.*.*` |
|
|
143
|
+
|
|
144
|
+
### Bases de données supportées
|
|
145
|
+
|
|
146
|
+
| DB | Effet |
|
|
147
|
+
|---|---|
|
|
148
|
+
| **PostgreSQL** | Service `db` PostgreSQL dans `docker-compose.yml` |
|
|
149
|
+
| **MongoDB** | Service `db` MongoDB dans `docker-compose.yml` |
|
|
150
|
+
| **Supabase** | Génère `supabase/config.toml` + `supabase/migrations/` + `supabase/seed.sql` |
|
|
151
|
+
| **Aucune** | Aucune configuration DB |
|
|
152
|
+
|
|
153
|
+
---
|
|
154
|
+
|
|
155
|
+
## 5. Les Hooks Git (Brique B)
|
|
156
|
+
|
|
157
|
+
Installés automatiquement par le générateur dans `.git/hooks/` de chaque projet.
|
|
158
|
+
|
|
159
|
+
| Hook | Règle appliquée |
|
|
160
|
+
|---|---|
|
|
161
|
+
| **`commit-msg`** | Bloque tout commit dont le message ne respecte pas le format `Conventional Commits + référence Kanban`. Format : `feat: description (#42)`. |
|
|
162
|
+
| **`pre-commit`** | Détecte les secrets en clair (clés API, tokens). Bloquant. |
|
|
163
|
+
| **`pre-push`** | Bloque tout push direct sur la branche `main`. |
|
|
164
|
+
|
|
165
|
+
Pour mettre à jour les hooks dans un projet existant :
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
npx create-gef update
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
---
|
|
172
|
+
|
|
173
|
+
## 6. Le Pipeline CI/CD (Brique C)
|
|
174
|
+
|
|
175
|
+
Le générateur crée deux fichiers dans `.github/workflows/` :
|
|
176
|
+
|
|
177
|
+
**`main.yml` — Contrôle Qualité & Déploiement**
|
|
178
|
+
- Adapté à votre stack et cloud. Déclenché sur push `main`, `feat/**`, `fix/**`, tags `v*.*.*`, et pull requests.
|
|
179
|
+
- **Jobs :** setup runtime → install → lint → tests → analyse sécurité → déploiement (Vercel/AWS) ou release GitHub.
|
|
180
|
+
|
|
181
|
+
**`release-please.yml` — Automatisation des Releases**
|
|
182
|
+
- À chaque push sur `main`, génère automatiquement une Pull Request de Release avec le bon numéro de version (calculé depuis vos commits `feat:` et `fix:`) et le `CHANGELOG.md`.
|
|
183
|
+
- Quand vous mergez cette PR : le tag Git et la Release GitHub sont créés automatiquement.
|
|
184
|
+
|
|
185
|
+
---
|
|
186
|
+
|
|
187
|
+
## 7. Les Prompts IA (Brique D)
|
|
188
|
+
|
|
189
|
+
Des directives à charger dans votre assistant IA selon le contexte de travail. Ils sont copiés dans `.gef/prompts/` de chaque projet généré.
|
|
190
|
+
|
|
191
|
+
| Fichier | Quand l'utiliser |
|
|
192
|
+
|---|---|
|
|
193
|
+
| [`system_prompt.md`](./prompts/system_prompt.md) | **Toujours** — à charger en début de chaque session de travail |
|
|
194
|
+
| [`feature_development.md`](./prompts/feature_development.md) | Lors du développement d'une nouvelle fonctionnalité |
|
|
195
|
+
| [`code_review.md`](./prompts/code_review.md) | Lors d'une revue de code |
|
|
196
|
+
| [`bugfix.md`](./prompts/bugfix.md) | Lors de la correction d'un bug |
|
|
197
|
+
| [`adr_writing.md`](./prompts/adr_writing.md) | Lors d'une décision architecturale importante |
|
|
198
|
+
| [`new_project_kickoff.md`](./prompts/new_project_kickoff.md) | Au tout démarrage d'un nouveau projet |
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## 8. Le Tech Lead Virtuel (Brique E)
|
|
203
|
+
|
|
204
|
+
Au-delà de la génération, le GEF transforme l'IA en **Tech Lead autonome** grâce à trois règles inscrites dans le Playbook :
|
|
205
|
+
|
|
206
|
+
### Pilotage Kanban & Pull Requests (§14)
|
|
207
|
+
L'IA crée ses propres tickets (`gh issue create`), lie chaque commit à un ticket (`feat: ... (#42)`), ouvre les Pull Requests (`gh pr create`) et **demande votre validation avant de merger**.
|
|
208
|
+
|
|
209
|
+
### Auto-Documentation ADR (§15)
|
|
210
|
+
Avant tout choix architectural majeur (nouvelle dépendance, nouveau service), l'IA **doit** rédiger un rapport dans `docs/adr/` en utilisant le template fourni. Elle ne peut pas coder sans avoir d'abord documenté sa décision.
|
|
211
|
+
|
|
212
|
+
### TDD Piloté par l'IA (§16)
|
|
213
|
+
Avant d'écrire le code applicatif, l'IA rédige le test E2E (Playwright) qui décrit le comportement attendu. Le code est ensuite écrit pour faire passer ce test au vert.
|
|
214
|
+
|
|
215
|
+
> **Clause d'Antériorité (§0.5) :** Ces règles s'appliquent au nouveau code. L'IA ne refactorise jamais proactivement l'ancien code pour le rendre conforme, sauf demande explicite.
|
|
216
|
+
|
|
217
|
+
---
|
|
218
|
+
|
|
219
|
+
## 9. La Source de Vérité
|
|
220
|
+
|
|
221
|
+
Toutes les règles appliquées par ce framework sont définies dans un seul document :
|
|
222
|
+
|
|
223
|
+
**[→ Lire l'Engineering Playbook](./ENGINEERING_PLAYBOOK.md)**
|
|
224
|
+
|
|
225
|
+
En cas de contradiction entre un outil du framework et le Playbook, le Playbook a toujours raison.
|
|
226
|
+
|
|
227
|
+
---
|
|
228
|
+
|
|
229
|
+
> Projet open source par [Gildas](https://github.com/Gnzikoune) — Contributions bienvenues via Pull Request.
|