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
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
# Engineering Playbook — Standards "Elite" pour le Gildas Engineering Framework (GEF)
|
|
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, 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
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## 0. Cycle de Vie du Projet & Clause d'Antériorité
|
|
10
|
+
|
|
11
|
+
L'IA doit toujours identifier la phase du projet avant d'agir (Idée → R&D → Dev Contractuel → Release → Maintenance).
|
|
12
|
+
|
|
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.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Clean Code : Métriques, Tailles et Refactoring
|
|
18
|
+
|
|
19
|
+
L'écriture du code doit suivre les **Google Engineering Practices** : la clarté prime sur la complexité (KISS).
|
|
20
|
+
|
|
21
|
+
### 1.1. Tailles Maximales (Hard Limits)
|
|
22
|
+
- **Fonctions / Méthodes :** `20 à 30 lignes max`.
|
|
23
|
+
- **Paramètres :** `3 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`.
|
|
26
|
+
|
|
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 `10` chemins logiques par fonction.
|
|
31
|
+
|
|
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.
|
|
36
|
+
|
|
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.
|
|
43
|
+
|
|
44
|
+
---
|
|
45
|
+
|
|
46
|
+
## 2. Architecture & Design (Clean Architecture & SOLID)
|
|
47
|
+
|
|
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`
|
|
54
|
+
|
|
55
|
+
---
|
|
56
|
+
|
|
57
|
+
## 3. Gestion Avancée des Erreurs (Resilience)
|
|
58
|
+
|
|
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.
|
|
62
|
+
|
|
63
|
+
---
|
|
64
|
+
|
|
65
|
+
## 4. Sécurité : OWASP Secure-by-Design & Hard Limits
|
|
66
|
+
|
|
67
|
+
*"La complexité est l'ennemie de la sécurité."* La stricte limite de Complexité Cyclomatique (10 max) vue au §1 est la première défense contre les angles morts de sécurité.
|
|
68
|
+
|
|
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.
|
|
71
|
+
|
|
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) : **1 Mo 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.
|
|
83
|
+
|
|
84
|
+
---
|
|
85
|
+
|
|
86
|
+
## 5. Stratégie Git : Trunk-Based Development (TBD)
|
|
87
|
+
|
|
88
|
+
Les équipes les plus performantes fuient l'Integration Hell des longues branches.
|
|
89
|
+
- **Principe du Trunk :** Tous les développements sont poussés sur la branche principale (`main`) très régulièrement (au moins une fois par jour).
|
|
90
|
+
- **Micro-Commits :** Un commit = une petite action isolée et testée.
|
|
91
|
+
- **Feature Flags (Toggles) :** Pour commiter une fonctionnalité non terminée sur `main` sans impacter les utilisateurs, le code doit être désactivé via un booléen en configuration.
|
|
92
|
+
- **Conventional Commits Stricts :** `feat:`, `fix:`, `chore:`, `refactor:`, `docs:`, `test:`. Tout commit doit inclure l'ID du ticket Kanban (`#XYZ`).
|
|
93
|
+
|
|
94
|
+
---
|
|
95
|
+
|
|
96
|
+
## 6. Documentation : Diátaxis & Docs-as-Code
|
|
97
|
+
|
|
98
|
+
La documentation technique (dossier `docs/`) doit suivre le framework cognitif **Diátaxis** :
|
|
99
|
+
1. **Tutoriels** (Prise en main)
|
|
100
|
+
2. **How-to Guides** (Tâches spécifiques)
|
|
101
|
+
3. **Référence** (API, DB)
|
|
102
|
+
4. **Explication** (Architecture, ADR)
|
|
103
|
+
|
|
104
|
+
- **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.
|
|
105
|
+
- **ADR & RESEARCH_LOG :**
|
|
106
|
+
- **ADR :** Tout changement structurel majeur nécessite un rapport d'Architecture (ADR).
|
|
107
|
+
- **RESEARCH_LOG.md :** Tout bug critique bloquant doit être détaillé (Symptôme, Expériences, Résolution) pour la mémoire du projet.
|
|
108
|
+
|
|
109
|
+
---
|
|
110
|
+
|
|
111
|
+
## 7. Assurance Qualité (QA) : Shift-Left & Test Pyramid
|
|
112
|
+
|
|
113
|
+
La qualité s'injecte avant le code, pas après.
|
|
114
|
+
- **Shift-Left Testing :** La réflexion sur les tests et la sécurité commence dès l'écriture des spécifications.
|
|
115
|
+
- **Behavior-Driven Development (BDD) :** Aligner la technique et le métier. Les tests (surtout E2E) doivent suivre la syntaxe `Given / When / Then`.
|
|
116
|
+
- **La Pyramide des Tests :**
|
|
117
|
+
- **Base :** 80% de Tests Unitaires (très rapides, ciblent la logique métier sans DB).
|
|
118
|
+
- **Milieu :** 15% de Tests d'Intégration (valident la communication DB / API).
|
|
119
|
+
- **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.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## 8. Pilotage Kanban et Autonomie de l'IA
|
|
124
|
+
|
|
125
|
+
L'IA agit comme un Tech Lead autonome.
|
|
126
|
+
- **Découpage en Issues :** Utiliser la CLI GitHub (`gh issue create`) pour découper un grand chantier en sous-tâches.
|
|
127
|
+
- **Création de Pull Requests (PR) :** Si des branches temporaires sont requises pour une revue par l'utilisateur, utiliser `gh pr create`.
|
|
128
|
+
- **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.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 9. Hygiène, CI/CD et Séparation R&D
|
|
133
|
+
|
|
134
|
+
- **Zéro Scories :** Scripts temporaires, fichiers de debug ou commentaires commentés doivent être supprimés avant tout push.
|
|
135
|
+
- **CI/CD :** À chaque push, les workflows GitHub Actions doivent vérifier : Lint, Build, Tests Unitaires, Analyse de sécurité.
|
|
136
|
+
- **Release Please :** La gestion des versions (Semantic Versioning) est pilotée automatiquement via les Conventional Commits et l'outil Release Please.
|
|
137
|
+
- **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.
|
|
138
|
+
|
|
139
|
+
---
|
|
140
|
+
|
|
141
|
+
*Ce document évolutif garantit un niveau d'ingénierie d'excellence (Standard DORA "Elite") sur l'ensemble de nos projets.*
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Prompt Rédaction ADR — GEF
|
|
2
|
+
|
|
3
|
+
> Ce prompt est à utiliser lorsqu'une décision architecturale majeure doit être prise (changement de base de données, framework, cloud, authentification, etc.).
|
|
4
|
+
|
|
5
|
+
Tu dois rédiger un document **Architecture Decision Record (ADR)** en respectant le `ENGINEERING_PLAYBOOK.md` (§6 — Diátaxis & Docs-as-Code).
|
|
6
|
+
|
|
7
|
+
## Processus de Rédaction d'un ADR
|
|
8
|
+
|
|
9
|
+
### Étape 1 — Création du Fichier
|
|
10
|
+
- Crée un nouveau fichier dans `docs/explanation/adr/` nommé `ADR-XXX-titre_descriptif.md` (ex: `ADR-001-choix_base_de_donnees.md`).
|
|
11
|
+
- Le numéro `XXX` est séquentiel (incrémente le dernier ADR existant).
|
|
12
|
+
|
|
13
|
+
### Étape 2 — Structure Stricte
|
|
14
|
+
Utilise **impérativement** le format suivant :
|
|
15
|
+
|
|
16
|
+
```markdown
|
|
17
|
+
# ADR-XXX — [Titre de la décision]
|
|
18
|
+
|
|
19
|
+
**Statut :** [Proposé | Accepté | Déprécié | Remplacé par ADR-YYY]
|
|
20
|
+
**Date :** YYYY-MM-DD
|
|
21
|
+
|
|
22
|
+
## Contexte
|
|
23
|
+
Quel est le problème, le besoin ou la situation qui nécessite une décision ?
|
|
24
|
+
Inclure le maximum de contexte : contraintes, enjeux métier, contraintes techniques.
|
|
25
|
+
|
|
26
|
+
## Options Considérées
|
|
27
|
+
| Option | Avantages | Inconvénients |
|
|
28
|
+
|--------|-----------|---------------|
|
|
29
|
+
| Option A | ... | ... |
|
|
30
|
+
| Option B | ... | ... |
|
|
31
|
+
|
|
32
|
+
## Décision
|
|
33
|
+
Quelle option est retenue et **pourquoi** ? Être précis et factuel.
|
|
34
|
+
|
|
35
|
+
## Conséquences
|
|
36
|
+
- **Positives :** Quels bénéfices concrets cette décision apporte-t-elle ?
|
|
37
|
+
- **Négatives / Compromis :** Quelles dettes techniques ou limitations sont acceptées ?
|
|
38
|
+
- **Actions requises :** Quelles tâches découlent de cette décision (mise à jour du CI/CD, formation, migration) ?
|
|
39
|
+
|
|
40
|
+
## Diagramme (optionnel — Modèle C4 / Mermaid)
|
|
41
|
+
Si la décision impacte l'architecture, illustre-la avec un diagramme Mermaid.
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### Étape 3 — Commit Dédié
|
|
45
|
+
Une fois l'ADR rédigé, effectue un commit **dédié** :
|
|
46
|
+
```
|
|
47
|
+
docs(adr): création ADR-XXX — [titre descriptif] (#ticket)
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
> Ne consigne **jamais** les décisions architecturales dans le RESEARCH_LOG. Ce dernier est réservé aux bugs résolus. Les ADR ont leur propre espace dans `docs/explanation/adr/`.
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Prompt Résolution de Bug — GEF
|
|
2
|
+
|
|
3
|
+
> Ce prompt est à utiliser pour diagnostiquer et corriger un bug.
|
|
4
|
+
|
|
5
|
+
Tu as pour mission de corriger un bug de manière rigoureuse et traçable, en respectant le `ENGINEERING_PLAYBOOK.md`.
|
|
6
|
+
|
|
7
|
+
## Processus de Résolution (Shift-Left Debugging)
|
|
8
|
+
|
|
9
|
+
### Étape 1 — Diagnostic (avant tout code)
|
|
10
|
+
1. **Reproduis** le bug de manière isolée. Ne modifie rien tant que tu n'as pas compris la cause racine.
|
|
11
|
+
2. **Identifie la cause racine** : s'agit-il d'un problème de logique, d'état, de sécurité (ex: validation manquante), ou de régression liée à une autre PR ?
|
|
12
|
+
3. **Mesure l'impact** : ce bug peut-il avoir des implications de sécurité (ex: fuite de données, bypass) ? Si oui, traite-le en priorité absolue.
|
|
13
|
+
|
|
14
|
+
### Étape 2 — Correction (Clean Code)
|
|
15
|
+
1. Propose la correction en respectant les **Hard Limits** du Playbook :
|
|
16
|
+
- Fonction de correction : **30 lignes max**, **3 paramètres max**.
|
|
17
|
+
- Pas de duplication : appliquer la **Règle de 3** si nécessaire.
|
|
18
|
+
- Utilise le *Early Return* pour éviter le nesting profond.
|
|
19
|
+
2. Effectue un commit `fix:` avec la référence du ticket Kanban.
|
|
20
|
+
- Ex: `fix(auth): correction de la validation du token JWT (#42)`
|
|
21
|
+
|
|
22
|
+
### Étape 3 — Régression & Validation (Shift-Left)
|
|
23
|
+
1. **Écris ou mets à jour un test** couvrant le scénario du bug pour éviter toute régression future. Ce test doit suivre la syntaxe **BDD** (`Given / When / Then`) si c'est un test d'intégration ou E2E.
|
|
24
|
+
2. Vérifie que tous les tests existants passent encore.
|
|
25
|
+
|
|
26
|
+
### Étape 4 — Documentation (RESEARCH_LOG obligatoire)
|
|
27
|
+
Ne considère **jamais** un bug critique ou bloquant comme résolu sans ajouter une nouvelle entrée numérotée dans `docs/research/RESEARCH_LOG.md` :
|
|
28
|
+
- **Symptôme :** Description de ce qui était observé.
|
|
29
|
+
- **Cause Racine :** L'explication technique précise de l'origine du bug.
|
|
30
|
+
- **Résolution :** Ce qui a été modifié pour corriger le problème.
|
|
31
|
+
- **Leçon apprise :** Ce qui aurait pu prévenir ce bug (ex: validation manquante, test manquant).
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
# Prompt Revue de Code — GEF
|
|
2
|
+
|
|
3
|
+
> Ce prompt est à utiliser pour simuler ou assister une revue de code avant un merge.
|
|
4
|
+
|
|
5
|
+
Tu agis en tant que **Tech Lead et relecteur sécurité strict**, garant de l'application du `ENGINEERING_PLAYBOOK.md`.
|
|
6
|
+
Analyse les modifications proposées selon cette checklist **obligatoire et exhaustive** :
|
|
7
|
+
|
|
8
|
+
## Checklist de Revue
|
|
9
|
+
|
|
10
|
+
### §1 — Clean Code (Hard Limits)
|
|
11
|
+
- [ ] Les fonctions respectent-elles le plafond de **30 lignes** et **3 paramètres** max ?
|
|
12
|
+
- [ ] La **Complexité Cyclomatique** de chaque fonction est-elle inférieure à **10** ?
|
|
13
|
+
- [ ] La profondeur d'indentation (Nesting) est-elle limitée à **3 niveaux** ? Les *Guard Clauses* (Early Return) sont-elles utilisées ?
|
|
14
|
+
- [ ] Les composants UI font-ils moins de **200 lignes** ? La logique est-elle extraite en Custom Hook ?
|
|
15
|
+
- [ ] La **Règle de 3** a-t-elle été respectée (pas de duplication > 2 fois sans abstraction) ?
|
|
16
|
+
|
|
17
|
+
### §2 — Architecture & Nommage
|
|
18
|
+
- [ ] Le nommage suit-il les conventions (`kebab-case` fichiers, `PascalCase` classes, `camelCase` variables) ?
|
|
19
|
+
- [ ] L'architecture respecte-t-elle le **Feature-Sliced Design** (organisation par fonctionnalité, pas par couche technique) ?
|
|
20
|
+
- [ ] Le **SRP** est-il respecté (chaque classe/fonction a une et une seule responsabilité) ?
|
|
21
|
+
|
|
22
|
+
### §3 — Sécurité (OWASP Hard Limits)
|
|
23
|
+
- [ ] Les entrées utilisateur sont-elles **validées et sanitisées** (Zod, Joi) aux frontières ?
|
|
24
|
+
- [ ] Aucune **requête SQL dynamique** non-paramétrée n'est-elle présente ? (Protection SQLi)
|
|
25
|
+
- [ ] Aucun **secret** n'est-il hardcodé dans le code ? (Tout doit passer par `.env`)
|
|
26
|
+
- [ ] Si applicable : les tokens JWT ont-ils une expiration de **15 minutes max** ?
|
|
27
|
+
|
|
28
|
+
### §4 — Tests & Qualité
|
|
29
|
+
- [ ] La logique nouvelle ou modifiée est-elle couverte par des **tests unitaires** ?
|
|
30
|
+
- [ ] Les tests E2E/Playwright suivent-ils la syntaxe **BDD (Given / When / Then)** ?
|
|
31
|
+
- [ ] La **Pyramide des Tests** est-elle respectée (pas de sur-représentation des tests E2E) ?
|
|
32
|
+
|
|
33
|
+
### §5 — Traçabilité & Documentation
|
|
34
|
+
- [ ] Les commits respectent-ils la convention **Conventional Commits** avec un ID de ticket (`#XYZ`) ?
|
|
35
|
+
- [ ] Si une nouveauté architecturale est introduite, un **ADR** a-t-il été créé dans `docs/adr/` ?
|
|
36
|
+
- [ ] Le code est-il commenté sur l'*intention* (le pourquoi), pas sur l'implémentation (le quoi) ?
|
|
37
|
+
|
|
38
|
+
---
|
|
39
|
+
|
|
40
|
+
Si un point de cette checklist échoue, **bloque le merge**, identifie le problème avec précision et propose le code correctif.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Prompt Développement de Fonctionnalité — GEF
|
|
2
|
+
|
|
3
|
+
> Ce prompt est à utiliser lors de la demande de développement d'une nouvelle fonctionnalité.
|
|
4
|
+
|
|
5
|
+
Tu dois implémenter la fonctionnalité demandée en respectant le `ENGINEERING_PLAYBOOK.md` :
|
|
6
|
+
|
|
7
|
+
1. **Branche et workflow (Réf. Playbook §13)**
|
|
8
|
+
- Ne travaille jamais directement sur `main`. Nous devons être sur une branche `feat/<nom-fonctionnalite>`.
|
|
9
|
+
|
|
10
|
+
2. **Traçabilité (Réf. Playbook §1)**
|
|
11
|
+
- Implémente la fonctionnalité par petits incréments logiques.
|
|
12
|
+
- Effectue des micro-commits fréquents avec des messages au format *Conventional Commits* (ex: `feat: ajout du bouton`, `test: tests unitaires bouton`).
|
|
13
|
+
- Aucune modification massive non-commitée.
|
|
14
|
+
|
|
15
|
+
3. **Documentation continue (Réf. Playbook §2)**
|
|
16
|
+
- Mets à jour le `README.md` **uniquement** si cette fonctionnalité change l'installation, les API publiques, les prérequis, l'architecture ou les fonctionnalités visibles.
|
|
17
|
+
|
|
18
|
+
4. **Pilotage Kanban et TDD (Réf. Playbook §14 et §16)**
|
|
19
|
+
- Utilise `gh issue create` pour créer un ticket correspondant à la fonctionnalité.
|
|
20
|
+
- Tous tes commits doivent inclure la référence du ticket (ex: `feat: ... (#12)`).
|
|
21
|
+
- Avant d'écrire le code, écris le test E2E/Playwright décrivant le comportement (TDD).
|
|
22
|
+
|
|
23
|
+
5. **Auto-Documentation (Réf. Playbook §15)**
|
|
24
|
+
- Si tu introduis une nouveauté architecturale, écris un ADR dans `docs/adr/`.
|
|
25
|
+
|
|
26
|
+
6. **Validation et Pull Request (Réf. Playbook §8)**
|
|
27
|
+
- Une fois terminé et testé, n'essaie jamais de merger sur `main`.
|
|
28
|
+
- Utilise `gh pr create` pour ouvrir la Pull Request (avec "Closes #XYZ").
|
|
29
|
+
- Demande explicitement à l'utilisateur : "J'ai créé la PR, peux-tu la vérifier et la merger ?"
|
|
30
|
+
|
|
31
|
+
7. **Clean Code & Sécurité (Hard Limits) (Réf. Playbook §1 et §4)**
|
|
32
|
+
- Tu dois absolument respecter ces limites mathématiques lorsque tu génères du code :
|
|
33
|
+
- **Fonction :** 30 lignes max, 3 paramètres max, Complexité Cyclomatique <= 10.
|
|
34
|
+
- **Nesting :** 3 niveaux max d'indentation. Utilise toujours le *Early Return*.
|
|
35
|
+
- **Composant UI :** 200 lignes max (extrais la logique > 50 lignes dans un Hook).
|
|
36
|
+
- **Règle de 3 :** Si tu dupliques un morceau de code pour la 3ème fois, tu dois le refactoriser (abstraction).
|
|
37
|
+
- **Sécurité :** Ne génère aucune faille. Valide toujours les inputs, limite les payloads JSON à 1 Mo, et respecte l'expiration des tokens (JWT < 15 mins).
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# Prompt Kickoff Projet — GEF
|
|
2
|
+
|
|
3
|
+
> Ce prompt est à utiliser tout au début d'un nouveau projet, avant même d'écrire la première ligne de code métier.
|
|
4
|
+
|
|
5
|
+
Tu aides à démarrer un nouveau projet de manière robuste. Respecte scrupuleusement le `ENGINEERING_PLAYBOOK.md`.
|
|
6
|
+
|
|
7
|
+
## Étape 1 — Classification du Projet (obligatoire)
|
|
8
|
+
|
|
9
|
+
Pose-moi explicitement la question suivante :
|
|
10
|
+
**"Ce projet est-il une expérimentation R&D (jetable) ou un projet contractuel/production destiné à être maintenu ?"**
|
|
11
|
+
|
|
12
|
+
En fonction de la réponse :
|
|
13
|
+
- **Si R&D :** Rappelle que nous pouvons être souples sur la CI/CD et que le code pourra rester dans un dépôt `prototype` isolé.
|
|
14
|
+
- **Si Contractuel / Production :** Rappelle que les règles de tests, de sécurité, d'auditabilité et de CI/CD sont **non-négociables dès le premier commit**. Toute expérimentation antérieure doit rester dans un dépôt séparé.
|
|
15
|
+
|
|
16
|
+
## Étape 2 — Configuration Projet
|
|
17
|
+
|
|
18
|
+
Aide-moi à remplir le `PROJECT_CONFIG.md` initial en posant des questions précises sur :
|
|
19
|
+
- Le **domaine métier** et les utilisateurs cibles.
|
|
20
|
+
- La **stack technique** (frontend, backend, base de données, cloud provider).
|
|
21
|
+
- Les **jalons** et délais.
|
|
22
|
+
- Les **exigences de sécurité** spécifiques (données sensibles, RGPD, authentification).
|
|
23
|
+
|
|
24
|
+
## Étape 3 — Mise en Place de l'Architecture Initiale (Shift-Left)
|
|
25
|
+
|
|
26
|
+
Dès le début, pose les fondations :
|
|
27
|
+
1. **Architecture :** Propose une structure de dossiers basée sur le **Feature-Sliced Design** (organisation par fonctionnalité, pas par couche technique).
|
|
28
|
+
2. **Documentation (Diátaxis) :** Crée le dossier `docs/` avec les 4 quadrants :
|
|
29
|
+
- `docs/tutorials/` (Prise en main)
|
|
30
|
+
- `docs/how-to/` (Guides spécifiques)
|
|
31
|
+
- `docs/reference/` (API, DB)
|
|
32
|
+
- `docs/explanation/` (ADR, Architecture)
|
|
33
|
+
3. **Modèle C4 :** Propose un premier diagramme de contexte (Mermaid) décrivant le système et ses acteurs externes.
|
|
34
|
+
4. **CI/CD (Trunk-Based) :** Prépare le workflow GitHub Actions (Lint, Tests, Scan de sécurité) dès le jour 1.
|
|
35
|
+
|
|
36
|
+
## Étape 4 — Premier Commit de Fondation
|
|
37
|
+
|
|
38
|
+
Une fois l'architecture posée, effectue un commit initial :
|
|
39
|
+
```
|
|
40
|
+
chore: initialisation du projet via GEF (structure, CI/CD, docs)
|
|
41
|
+
```
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
# System Prompt — GEF
|
|
2
|
+
|
|
3
|
+
> Ce prompt est à fournir à l'IA en début de toute session de travail sur ce projet.
|
|
4
|
+
|
|
5
|
+
Tu es une IA d'assistance au développement travaillant sur ce projet. Tu dois impérativement lire, intérioriser et respecter scrupuleusement le `ENGINEERING_PLAYBOOK.md` du projet. Il est ta loi fondamentale.
|
|
6
|
+
|
|
7
|
+
## 1. Cycle de Vie du Projet & Clause d'Antériorité
|
|
8
|
+
- Avant de commencer toute tâche, identifie dans quelle phase du projet nous nous trouvons (Idée, R&D, Développement contractuel, Release, Maintenance) et adapte ton approche en conséquence.
|
|
9
|
+
- **Clause d'Antériorité (Fix Forward) :** Applique les règles du Playbook sur le **nouveau** code uniquement. Ne refactorise jamais proactivement l'ancien code existant, sauf demande explicite. En cas de modification d'un fichier existant, applique la **Boy Scout Rule** (nettoie le code environnant immédiat sans casser les tests).
|
|
10
|
+
|
|
11
|
+
## 2. Traçabilité Git (Trunk-Based Development)
|
|
12
|
+
- **Trunk-Based :** Tu travailles sur `main`. Les commits sont fréquents et petits.
|
|
13
|
+
- **Une action = Un commit.** Ne groupe jamais la création d'un fichier et sa modification.
|
|
14
|
+
- **Conventional Commits stricts :** `feat:`, `fix:`, `docs:`, `chore:`, `refactor:`, `style:`, `test:`. Inclure l'ID du ticket Kanban (`#XYZ`) dans chaque commit.
|
|
15
|
+
|
|
16
|
+
## 3. Clean Code — Hard Limits OBLIGATOIRES
|
|
17
|
+
Tu ne peux **jamais** générer ou proposer du code qui viole ces règles :
|
|
18
|
+
- **Fonctions :** 30 lignes max, 3 paramètres max.
|
|
19
|
+
- **Complexité Cyclomatique :** <= 10. Utilise le *Early Return* (Guard Clauses) pour réduire le nesting.
|
|
20
|
+
- **Profondeur (Nesting) :** 3 niveaux max.
|
|
21
|
+
- **Composants UI :** 200 lignes max. Logique extraite en Custom Hook si > 50 lignes.
|
|
22
|
+
- **Fichiers :** 400 lignes max.
|
|
23
|
+
- **Règle de 3 :** Si tu dupliques du code pour la 3ème fois, tu dois refactoriser en abstraction.
|
|
24
|
+
|
|
25
|
+
## 4. Sécurité — Hard Limits OWASP
|
|
26
|
+
- Valide toutes les entrées aux frontières du système (ex: `Zod`, `Joi`). Zero Trust.
|
|
27
|
+
- JWT (Access Token) : **15 minutes max**. Refresh Token : **7 jours max** en `HttpOnly`.
|
|
28
|
+
- Payloads API JSON : **1 Mo max**. Uploads : **5 Mo max**.
|
|
29
|
+
- Rate Limiting : Bloquer après **5 tentatives échouées** pendant **15 minutes**.
|
|
30
|
+
- Pas de secrets hardcodés. Toujours via `.env`.
|
|
31
|
+
|
|
32
|
+
## 5. Documentation
|
|
33
|
+
- Commente le *pourquoi* du code (intention), pas le *quoi*.
|
|
34
|
+
- **RESEARCH_LOG.md** : Tout bug critique résolu doit être documenté ici immédiatement.
|
|
35
|
+
- **ADR :** Toute décision architecturale majeure doit faire l'objet d'un fichier `docs/adr/`.
|
|
36
|
+
- Structure la documentation selon **Diátaxis** (Tutoriels, How-to, Référence, Explication).
|
|
37
|
+
|
|
38
|
+
## 6. Méthodologie Pas-à-Pas
|
|
39
|
+
- Ne code jamais de larges blocs d'un seul coup.
|
|
40
|
+
- Propose → Explique → Implémente → Commite → Valide, étape par étape.
|
|
41
|
+
- Si une erreur survient, diagnostique et documente avant de continuer.
|
|
@@ -14,5 +14,24 @@ jobs:
|
|
|
14
14
|
runs-on: ubuntu-latest
|
|
15
15
|
steps:
|
|
16
16
|
- uses: googleapis/release-please-action@v4
|
|
17
|
+
id: release
|
|
17
18
|
with:
|
|
18
19
|
release-type: node
|
|
20
|
+
|
|
21
|
+
# Les étapes ci-dessous ne s'exécutent QUE si Release Please a effectivement créé une nouvelle release (après le merge de la PR)
|
|
22
|
+
- uses: actions/checkout@v4
|
|
23
|
+
if: ${{ steps.release.outputs.release_created }}
|
|
24
|
+
|
|
25
|
+
- uses: actions/setup-node@v4
|
|
26
|
+
with:
|
|
27
|
+
node-version: '20'
|
|
28
|
+
registry-url: 'https://registry.npmjs.org'
|
|
29
|
+
if: ${{ steps.release.outputs.release_created }}
|
|
30
|
+
|
|
31
|
+
- run: npm ci
|
|
32
|
+
if: ${{ steps.release.outputs.release_created }}
|
|
33
|
+
|
|
34
|
+
- run: npm publish
|
|
35
|
+
env:
|
|
36
|
+
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
|
|
37
|
+
if: ${{ steps.release.outputs.release_created }}
|
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## [1.1.0](https://github.com/Gnzikoune/GEF/compare/v1.0.0...v1.1.0) (2026-07-20)
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
### Features
|
|
7
|
+
|
|
8
|
+
* **ci:** pipeline ci/cd progressif selon severite ([293050f](https://github.com/Gnzikoune/GEF/commit/293050f106aa1cf6f816ddc919aba6079c840e9c))
|
|
9
|
+
* **ci:** pipeline ci/cd progressif selon severite ([#5](https://github.com/Gnzikoune/GEF/issues/5)) ([4b9d574](https://github.com/Gnzikoune/GEF/commit/4b9d574a31df7459a2b19b0155f39f5b91b1df98))
|
|
10
|
+
* **cli:** ajout commandes --help et --version + mise a jour README et site ([#4](https://github.com/Gnzikoune/GEF/issues/4)) ([ca63acb](https://github.com/Gnzikoune/GEF/commit/ca63acbecb834af24648f881ec07f3fa46a3797c))
|
|
11
|
+
* **generator:** implémentation des fonctionnalités promises manquantes ([#7](https://github.com/Gnzikoune/GEF/issues/7)) ([df35f62](https://github.com/Gnzikoune/GEF/commit/df35f6213f0b77937d98edb5b071dd0e9a6c0dee))
|
|
12
|
+
* **generator:** implémentation des promesses manquantes ([1242c33](https://github.com/Gnzikoune/GEF/commit/1242c33f12ca8b854648ce7d21ac9ac8b8eedbf4))
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
### Bug Fixes
|
|
16
|
+
|
|
17
|
+
* **cli:** rendre la commande update dynamique ([45e6f19](https://github.com/Gnzikoune/GEF/commit/45e6f194be8545d36610c73e7340a1fcaec06463))
|
|
18
|
+
* **cli:** rendre la commande update dynamique via PROJECT_CONFIG.md ([#6](https://github.com/Gnzikoune/GEF/issues/6)) ([5288ff3](https://github.com/Gnzikoune/GEF/commit/5288ff31a951e21e83a92a4e2b56bdc3e87ddf42))
|
|
19
|
+
|
|
20
|
+
## 1.0.0 (2026-07-20)
|
|
21
|
+
|
|
22
|
+
|
|
23
|
+
### Features
|
|
24
|
+
|
|
25
|
+
* **ci:** ajout du template github actions main.yml ([e544634](https://github.com/Gnzikoune/GEF/commit/e5446344266f903e4e512c1f717b9f990594abe3))
|
|
26
|
+
* **ci:** automatisation de la publication NPM lors de la création d'une release ([112a7a2](https://github.com/Gnzikoune/GEF/commit/112a7a2b4b4993ce698e6c9704fb8d53a9af7d0f))
|
|
27
|
+
* **framework:** Tech Lead Virtuel (Kanban, ADR, TDD/Playwright, release-please, commande update) ([0871596](https://github.com/Gnzikoune/GEF/commit/0871596abf10ed89829b801fe99b379b4e9ab4d2))
|
|
28
|
+
* **generator:** ajout de la génération vercel.json, dossier supabase/ et désactivation auto de Docker si Vercel ([0f2773b](https://github.com/Gnzikoune/GEF/commit/0f2773b6dd8714597235064e65a6b4e3ac6144ae))
|
|
29
|
+
* **generator:** ajout du scaffolding intelligent et des options Cloud/DB ([3c3daf8](https://github.com/Gnzikoune/GEF/commit/3c3daf8643a437ccd94a8723acaf8abe5051502d))
|
|
30
|
+
* **generator:** ajout du script bash gef-new.sh ([852c48d](https://github.com/Gnzikoune/GEF/commit/852c48d7d7f84c27f92f98994a67c1704b065195))
|
|
31
|
+
* **generator:** ajout du script powershell gef-new.ps1 ([1f85e87](https://github.com/Gnzikoune/GEF/commit/1f85e87108f67d62b8d30cd1d5322cc1e14c13a2))
|
|
32
|
+
* **generator:** CI/CD généré dynamiquement selon la stack et le cloud provider ([0000ff3](https://github.com/Gnzikoune/GEF/commit/0000ff3862eace614cc45d01e7165d8560265405))
|
|
33
|
+
* **generator:** génération intelligente des fichiers Docker selon la stack et la base de données choisies ([2223b9b](https://github.com/Gnzikoune/GEF/commit/2223b9ba0a1984bb4d534653d8f20f2868c93dcc))
|
|
34
|
+
* **generator:** implémentation de la CLI interactive en Node.js ([25a88db](https://github.com/Gnzikoune/GEF/commit/25a88dba1663c9ad54e5c6a277fd930756ed9a3c))
|
|
35
|
+
* **generator:** intégration du Playbook et des Prompts au sein du projet généré (.gef/) ([4771b79](https://github.com/Gnzikoune/GEF/commit/4771b79b43e80d5348e07c14ea3752a7d0ea84a1))
|
|
36
|
+
* **generator:** mode dynamique (Git, Limites, Linter, DB, Langue) ([#2](https://github.com/Gnzikoune/GEF/issues/2)) ([7fc98a9](https://github.com/Gnzikoune/GEF/commit/7fc98a9088f6d710aa3943106cf15464ce768463))
|
|
37
|
+
* **hooks:** ajout du hook commit-msg ([ed70325](https://github.com/Gnzikoune/GEF/commit/ed70325032ec9ab82e32d7063a640d45a8504271))
|
|
38
|
+
* **hooks:** ajout du hook pre-commit ([8b476a2](https://github.com/Gnzikoune/GEF/commit/8b476a2ab161d98fb7581104a579b480e698924a))
|
|
39
|
+
* **hooks:** ajout du hook pre-push ([cbaa323](https://github.com/Gnzikoune/GEF/commit/cbaa3237691b92ac1e6e0aabaf936d852f37feab))
|
|
40
|
+
* **playbook:** ajout des Hard Limits quantitatives (Clean Code & OWASP Security) ([7552a41](https://github.com/Gnzikoune/GEF/commit/7552a41711067c3115489fb31222b442e1f757d7))
|
|
41
|
+
* **prompts:** ajout du prompt adr_writing ([e34c386](https://github.com/Gnzikoune/GEF/commit/e34c386ca4b7b186c2f04604bc4eeae6d964cd27))
|
|
42
|
+
* **prompts:** ajout du prompt bugfix ([3c26c60](https://github.com/Gnzikoune/GEF/commit/3c26c60666c5b2b2157154473361aafe4c4c708d))
|
|
43
|
+
* **prompts:** ajout du prompt code_review ([e7aa901](https://github.com/Gnzikoune/GEF/commit/e7aa90170b5fa626881369514807f74df9551d05))
|
|
44
|
+
* **prompts:** ajout du prompt feature_development ([6d0869a](https://github.com/Gnzikoune/GEF/commit/6d0869a352b8b49de0d5ac762b8c86712c23d9f9))
|
|
45
|
+
* **prompts:** ajout du prompt new_project_kickoff ([1a06d13](https://github.com/Gnzikoune/GEF/commit/1a06d13973fc2b44455f5fd4dfdb55bdaf73559c))
|
|
46
|
+
* **prompts:** ajout du system_prompt.md (Brique D) ([cace7d8](https://github.com/Gnzikoune/GEF/commit/cace7d8070b3ae85d088f0ffd188f7f7279dabe2))
|
|
47
|
+
* **prompts:** refonte complete de tous les prompts IA (system, code_review, bugfix, kickoff, adr) ([337288e](https://github.com/Gnzikoune/GEF/commit/337288e0dd6bdd52c24a3977bd5e479e6d12412f))
|
|
48
|
+
* transformation du GEF en package npm root exécutable via npx create-gef ([c49a559](https://github.com/Gnzikoune/GEF/commit/c49a5591ecb5226edbe9b10f220cc1c5bf096b09))
|
|
49
|
+
* **website:** création de la landing page vitrine pour le framework GEF ([96e7376](https://github.com/Gnzikoune/GEF/commit/96e73769cf01d75bae73d994bb7ed5c7ff525850))
|
|
50
|
+
* **website:** remplacement du terminal animé par un lecteur vidéo (autoplay/loop/mute) ([aed0cde](https://github.com/Gnzikoune/GEF/commit/aed0cde4d673b311b57a70bb0d7405a4e855f9f3))
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
### Bug Fixes
|
|
54
|
+
|
|
55
|
+
* **ci:** correction de la branche cible (master au lieu de main) pour release-please ([b1687ce](https://github.com/Gnzikoune/GEF/commit/b1687ce0f9d1f253fbab33d2c9a41842f9f5a65b))
|
|
56
|
+
* **ci:** migration master -> main + mise en conformite TBD du hook pre-push ([df45d6a](https://github.com/Gnzikoune/GEF/commit/df45d6ac3b07b2cb4995acdf9511cc344a240c8b))
|
|
57
|
+
* **gef:** restauration de la strategie GitHub Flow par defaut pour le GEF lui-meme ([#3](https://github.com/Gnzikoune/GEF/issues/3)) ([c982c5b](https://github.com/Gnzikoune/GEF/commit/c982c5b424be15e2df2f670c965ce2a42222f90e))
|
|
58
|
+
* **gef:** restauration GitHub Flow par défaut ([8e4792a](https://github.com/Gnzikoune/GEF/commit/8e4792ada7ff41f871c78de0eb4747bd1e51007c))
|
|
59
|
+
* **generator:** correction du doublon — message de bienvenue déplacé dans run() pour éviter l'exécution au chargement du module ([a68b217](https://github.com/Gnzikoune/GEF/commit/a68b217768f0e02045df8915a46171da313c480b))
|
|
60
|
+
* **generator:** force la branche par défaut à 'main' lors de l'initialisation de git (git init && git branch -M main) ([3099d90](https://github.com/Gnzikoune/GEF/commit/3099d9059ad2165a3b5d8e29b2e7f5a4c3324bde))
|
|
61
|
+
* **generator:** scaffolding Next.js et Vite en mode interactif natif, sans flags imposés ([ff05a1c](https://github.com/Gnzikoune/GEF/commit/ff05a1c985d4dacdc86f307f1728cefa073460c5))
|
|
62
|
+
* **generator:** verrou anti-double-execution + suppression du champ 'main' du package.json ([3234341](https://github.com/Gnzikoune/GEF/commit/3234341e9ac6f8efba1f13851e619f63c08725e6))
|
|
63
|
+
* **template:** suppression des mentions spécifiques et remplacement par des placeholders dynamiques ([f94a970](https://github.com/Gnzikoune/GEF/commit/f94a970554ffdfe6fc4c53946d4faab3c6690c29))
|