create-gef 1.0.0 → 1.1.1
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 +71 -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 +102 -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,22 @@
|
|
|
1
|
+
# ADR-000 — [Titre de la décision]
|
|
2
|
+
|
|
3
|
+
**Statut :** [Proposé | Accepté | Déprécié | Remplacé par ADR-YYY]
|
|
4
|
+
**Date :** YYYY-MM-DD
|
|
5
|
+
|
|
6
|
+
## Contexte
|
|
7
|
+
Quel est le problème, le besoin ou la situation qui nécessite une décision ?
|
|
8
|
+
Inclure le maximum de contexte : contraintes, enjeux métier, contraintes techniques.
|
|
9
|
+
|
|
10
|
+
## Options Considérées
|
|
11
|
+
| Option | Avantages | Inconvénients |
|
|
12
|
+
|--------|-----------|---------------|
|
|
13
|
+
| Option A | ... | ... |
|
|
14
|
+
| Option B | ... | ... |
|
|
15
|
+
|
|
16
|
+
## Décision
|
|
17
|
+
Quelle option est retenue et **pourquoi** ? Être précis et factuel.
|
|
18
|
+
|
|
19
|
+
## Conséquences
|
|
20
|
+
- **Positives :** Quels bénéfices concrets cette décision apporte-t-elle ?
|
|
21
|
+
- **Négatives / Compromis :** Quelles dettes techniques ou limitations sont acceptées ?
|
|
22
|
+
- **Actions requises :** Quelles tâches découlent de cette décision (mise à jour du CI/CD, formation, migration) ?
|
package/hooks/commit-msg
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
#!/bin/bash
|
|
2
2
|
# Hook: commit-msg
|
|
3
|
-
#
|
|
3
|
+
# Hook: commit-msg
|
|
4
|
+
# Réf: ENGINEERING_PLAYBOOK.md §5
|
|
4
5
|
|
|
5
6
|
COMMIT_MSG_FILE=$1
|
|
6
7
|
COMMIT_MSG=$(cat $1)
|
|
@@ -9,7 +10,7 @@ COMMIT_MSG=$(cat $1)
|
|
|
9
10
|
PATTERN="^(feat|fix|docs|chore|refactor|style|perf|test|release)(\([a-zA-Z0-9_.-]+\))?: (.*) \(#[0-9]+\)$"
|
|
10
11
|
|
|
11
12
|
if [[ ! $COMMIT_MSG =~ $PATTERN ]]; then
|
|
12
|
-
echo -e "\033[31mErreur: Message de commit non conforme au Playbook §
|
|
13
|
+
echo -e "\033[31mErreur: Message de commit non conforme au Playbook §5.\033[0m"
|
|
13
14
|
echo "Le message doit suivre le format Conventional Commits ET inclure le numéro de ticket Kanban à la fin."
|
|
14
15
|
echo "Exemple: 'feat: ajout du bouton login (#42)'"
|
|
15
16
|
exit 1
|
|
@@ -20,7 +21,7 @@ DESCRIPTION="${BASH_REMATCH[3]}"
|
|
|
20
21
|
|
|
21
22
|
if [ ${#DESCRIPTION} -lt 10 ]; then
|
|
22
23
|
echo -e "\033[33mAvertissement: La description du commit est très courte (moins de 10 caractères).\033[0m"
|
|
23
|
-
echo "Playbook §
|
|
24
|
+
echo "Playbook §5 recommande des messages détaillés pour faciliter la traçabilité."
|
|
24
25
|
# Non bloquant
|
|
25
26
|
fi
|
|
26
27
|
|
package/hooks/pre-commit
CHANGED
|
@@ -37,8 +37,8 @@ fi
|
|
|
37
37
|
for file in $(git diff --cached --name-only); do
|
|
38
38
|
if [ -f "$file" ]; then
|
|
39
39
|
LINES=$(wc -l < "$file")
|
|
40
|
-
if [ "$LINES" -gt
|
|
41
|
-
echo -e "\033[33mAvertissement: Le fichier $file dépasse
|
|
40
|
+
if [ "$LINES" -gt 400 ]; then
|
|
41
|
+
echo -e "\033[33mAvertissement: Le fichier $file dépasse 400 lignes ($LINES lignes). Envisagez de le découper (Playbook §1).\033[0m"
|
|
42
42
|
fi
|
|
43
43
|
fi
|
|
44
44
|
done
|
package/package.json
CHANGED
package/prompts/adr_writing.md
CHANGED
|
@@ -1,14 +1,50 @@
|
|
|
1
1
|
# Prompt Rédaction ADR — GEF
|
|
2
2
|
|
|
3
|
-
> Ce prompt est à utiliser lorsqu'une décision architecturale majeure doit être prise (changement de base de données, framework, cloud, etc.).
|
|
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
4
|
|
|
5
|
-
Tu dois rédiger un document
|
|
5
|
+
Tu dois rédiger un document **Architecture Decision Record (ADR)** en respectant le `ENGINEERING_PLAYBOOK.md` (§6 — Diátaxis & Docs-as-Code).
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
2. Utilise le format strict suivant :
|
|
9
|
-
- **Contexte** : Quel est le problème ou la situation actuelle ?
|
|
10
|
-
- **Options considérées** : Quelles sont les alternatives techniques évaluées ?
|
|
11
|
-
- **Décision** : Quelle option est retenue et pourquoi ?
|
|
12
|
-
- **Conséquences** : Quels sont les impacts positifs, négatifs et les compromis acceptés suite à cette décision ?
|
|
7
|
+
## Processus de Rédaction d'un ADR
|
|
13
8
|
|
|
14
|
-
|
|
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/`.
|
package/prompts/bugfix.md
CHANGED
|
@@ -2,14 +2,30 @@
|
|
|
2
2
|
|
|
3
3
|
> Ce prompt est à utiliser pour diagnostiquer et corriger un bug.
|
|
4
4
|
|
|
5
|
-
Tu as pour mission de corriger un bug en respectant
|
|
5
|
+
Tu as pour mission de corriger un bug de manière rigoureuse et traçable, en respectant le `ENGINEERING_PLAYBOOK.md`.
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
- Identifie la cause racine, propose une correction et effectue un commit `fix:` approprié (Réf. Playbook §1).
|
|
7
|
+
## Processus de Résolution (Shift-Left Debugging)
|
|
9
8
|
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
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
13
|
|
|
14
|
-
|
|
15
|
-
|
|
14
|
+
### Étape 2 — Correction (Clean Code)
|
|
15
|
+
1. Propose la correction en respectant les **Hard Limits** du Playbook :
|
|
16
|
+
- Fonction de correction : **{{MAX_LINES}} lignes max**, **{{MAX_PARAMS}} 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).
|
package/prompts/code_review.md
CHANGED
|
@@ -2,13 +2,39 @@
|
|
|
2
2
|
|
|
3
3
|
> Ce prompt est à utiliser pour simuler ou assister une revue de code avant un merge.
|
|
4
4
|
|
|
5
|
-
Tu agis en tant que relecteur
|
|
6
|
-
Analyse les modifications proposées selon cette checklist obligatoire :
|
|
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
7
|
|
|
8
|
-
|
|
9
|
-
2. **Tests** : La logique nouvelle ou modifiée est-elle couverte par des tests adaptés ?
|
|
10
|
-
3. **Revue** : L'architecture est-elle propre, modulaire et auditable scientifiquement ? N'y a-t-il aucune donnée hardcodée ?
|
|
11
|
-
4. **Documentation** : Les docstrings sont-elles présentes et à jour ? L'intention du code est-elle claire ?
|
|
12
|
-
5. **Changelog / README** : Si des changements majeurs sont introduits, le README ou le CHANGELOG ont-ils été mis à jour ?
|
|
8
|
+
## Checklist de Revue
|
|
13
9
|
|
|
14
|
-
|
|
10
|
+
### §1 — Clean Code (Hard Limits)
|
|
11
|
+
- [ ] Les fonctions respectent-elles le plafond de **{{MAX_LINES}} lignes** et **{{MAX_PARAMS}} paramètres** max ?
|
|
12
|
+
- [ ] La **Complexité Cyclomatique** de chaque fonction est-elle inférieure à **{{MAX_COMPLEXITY}}** ?
|
|
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.
|
|
@@ -23,7 +23,16 @@ Tu dois implémenter la fonctionnalité demandée en respectant le `ENGINEERING_
|
|
|
23
23
|
5. **Auto-Documentation (Réf. Playbook §15)**
|
|
24
24
|
- Si tu introduis une nouveauté architecturale, écris un ADR dans `docs/adr/`.
|
|
25
25
|
|
|
26
|
-
6. **Validation et Pull Request (Réf. Playbook §
|
|
26
|
+
6. **Validation et Pull Request (Réf. Playbook §8)**
|
|
27
27
|
- Une fois terminé et testé, n'essaie jamais de merger sur `main`.
|
|
28
28
|
- Utilise `gh pr create` pour ouvrir la Pull Request (avec "Closes #XYZ").
|
|
29
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
|
+
- Respecte impérativement les **Hard Limits** :
|
|
33
|
+
- **Fonctions :** {{MAX_LINES}} lignes max, {{MAX_PARAMS}} paramètres max.
|
|
34
|
+
- **Complexité Cyclomatique :** <= {{MAX_COMPLEXITY}}.
|
|
35
|
+
- **Nesting :** 3 niveaux max.
|
|
36
|
+
- **Composants UI :** 200 lignes max (extraire la logique si > 50 lignes dans un Hook).
|
|
37
|
+
- **Règle de 3 :** Si tu dupliques un morceau de code pour la 3ème fois, tu dois le refactoriser (abstraction).
|
|
38
|
+
- **Sécurité :** Ne génère aucune faille. Valide toujours les inputs, limite les payloads JSON à {{MAX_PAYLOAD}}, et respecte l'expiration des tokens (JWT < 15 mins).
|
|
@@ -2,13 +2,40 @@
|
|
|
2
2
|
|
|
3
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
4
|
|
|
5
|
-
Tu aides à démarrer un nouveau projet de manière robuste.
|
|
5
|
+
Tu aides à démarrer un nouveau projet de manière robuste. Respecte scrupuleusement le `ENGINEERING_PLAYBOOK.md`.
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
## Étape 1 — Classification du Projet (obligatoire)
|
|
8
|
+
|
|
9
|
+
Pose-moi explicitement la question suivante :
|
|
8
10
|
**"Ce projet est-il une expérimentation R&D (jetable) ou un projet contractuel/production destiné à être maintenu ?"**
|
|
9
11
|
|
|
10
|
-
En fonction de
|
|
11
|
-
- Si R&D
|
|
12
|
-
- Si Contractuel/Production
|
|
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
|
|
13
37
|
|
|
14
|
-
|
|
38
|
+
Une fois l'architecture posée, effectue un commit initial :
|
|
39
|
+
```
|
|
40
|
+
chore: initialisation du projet via GEF (structure, CI/CD, docs)
|
|
41
|
+
```
|
package/prompts/system_prompt.md
CHANGED
|
@@ -2,23 +2,40 @@
|
|
|
2
2
|
|
|
3
3
|
> Ce prompt est à fournir à l'IA en début de toute session de travail sur ce projet.
|
|
4
4
|
|
|
5
|
-
Tu es une IA d'assistance au développement travaillant sur ce projet. Tu dois impérativement respecter le `ENGINEERING_PLAYBOOK.md` du projet.
|
|
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
6
|
|
|
7
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,
|
|
9
|
-
- **Clause d'Antériorité :** Applique les règles
|
|
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
10
|
|
|
11
|
-
## 2. Traçabilité Git
|
|
11
|
+
## 2. Traçabilité Git (Trunk-Based Development)
|
|
12
|
+
- **Trunk-Based :** Tu travailles sur `main`. Les commits sont fréquents et petits.
|
|
12
13
|
- **Une action = Un commit.** Ne groupe jamais la création d'un fichier et sa modification.
|
|
13
|
-
-
|
|
14
|
-
- Aucun changement sans l'associer immédiatement à un commit précis.
|
|
14
|
+
- **Conventional Commits stricts :** `feat:`, `fix:`, `docs:`, `chore:`, `refactor:`, `style:`, `test:`. Inclure l'ID du ticket Kanban (`#XYZ`) dans chaque commit.
|
|
15
15
|
|
|
16
|
-
## 3.
|
|
17
|
-
|
|
18
|
-
- **
|
|
19
|
-
-
|
|
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 :** {{MAX_LINES}} lignes max, {{MAX_PARAMS}} paramètres max.
|
|
19
|
+
- **Complexité Cyclomatique :** <= {{MAX_COMPLEXITY}}. 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.
|
|
20
24
|
|
|
21
|
-
## 4.
|
|
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 : **{{MAX_PAYLOAD}} 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
|
|
22
39
|
- Ne code jamais de larges blocs d'un seul coup.
|
|
23
|
-
- Propose
|
|
24
|
-
- Si une erreur survient, diagnostique et documente
|
|
40
|
+
- Propose → Explique → Implémente → Commite → Valide, étape par étape.
|
|
41
|
+
- Si une erreur survient, diagnostique et documente avant de continuer.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
# GEF — Site Vitrine
|
|
2
|
+
|
|
3
|
+
Site web officiel du **Gildas Engineering Framework**, construit avec React + TypeScript + Vite.
|
|
4
|
+
|
|
5
|
+
## Lancer en local
|
|
6
|
+
|
|
7
|
+
```bash
|
|
8
|
+
cd website
|
|
9
|
+
npm install
|
|
10
|
+
npm run dev
|
|
11
|
+
```
|
|
12
|
+
|
|
13
|
+
## Contribuer
|
|
14
|
+
|
|
15
|
+
Toute modification doit passer par une Pull Request sur la branche `main` du dépôt GEF.
|
|
16
|
+
Les changements sur le site vitrine sont soumis aux mêmes règles que le reste du framework.
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<!doctype html>
|
|
2
|
+
<html lang="en">
|
|
3
|
+
<head>
|
|
4
|
+
<meta charset="UTF-8" />
|
|
5
|
+
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
|
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
|
7
|
+
<title>website</title>
|
|
8
|
+
</head>
|
|
9
|
+
<body>
|
|
10
|
+
<div id="root"></div>
|
|
11
|
+
<script type="module" src="/src/main.tsx"></script>
|
|
12
|
+
</body>
|
|
13
|
+
</html>
|