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.
Files changed (53) hide show
  1. package/.gef/ENGINEERING_PLAYBOOK.md +141 -0
  2. package/.gef/prompts/adr_writing.md +50 -0
  3. package/.gef/prompts/bugfix.md +31 -0
  4. package/.gef/prompts/code_review.md +40 -0
  5. package/.gef/prompts/feature_development.md +37 -0
  6. package/.gef/prompts/new_project_kickoff.md +41 -0
  7. package/.gef/prompts/system_prompt.md +41 -0
  8. package/.github/workflows/release-please.yml +19 -0
  9. package/CHANGELOG.md +71 -0
  10. package/ENGINEERING_PLAYBOOK.md +88 -341
  11. package/PROJECT_CONFIG.template.md +15 -28
  12. package/README.md +87 -20
  13. package/generator/cli/help.js +65 -0
  14. package/generator/cli/questions.js +98 -0
  15. package/generator/features/scaffold-ci.js +441 -0
  16. package/generator/features/scaffold-docker.js +159 -0
  17. package/generator/features/scaffold-gef.js +158 -0
  18. package/generator/features/scaffold-git.js +138 -0
  19. package/generator/features/scaffold-linter.js +91 -0
  20. package/generator/features/scaffold-stack.js +102 -0
  21. package/generator/features/update.js +61 -0
  22. package/generator/index.js +37 -668
  23. package/generator/templates/adr-template.md +22 -0
  24. package/hooks/commit-msg +4 -3
  25. package/hooks/pre-commit +2 -2
  26. package/package.json +1 -1
  27. package/prompts/adr_writing.md +45 -9
  28. package/prompts/bugfix.md +24 -8
  29. package/prompts/code_review.md +34 -8
  30. package/prompts/feature_development.md +10 -1
  31. package/prompts/new_project_kickoff.md +33 -6
  32. package/prompts/system_prompt.md +30 -13
  33. package/website/.oxlintrc.json +8 -0
  34. package/website/README.md +16 -0
  35. package/website/index.html +13 -0
  36. package/website/package-lock.json +1372 -0
  37. package/website/package.json +25 -0
  38. package/website/public/favicon.svg +1 -0
  39. package/website/public/icons.svg +24 -0
  40. package/website/src/App.css +1 -0
  41. package/website/src/App.tsx +167 -0
  42. package/website/src/assets/hero.png +0 -0
  43. package/website/src/assets/react.svg +1 -0
  44. package/website/src/assets/vite.svg +1 -0
  45. package/website/src/components/FeatureCard.tsx +28 -0
  46. package/website/src/components/TerminalDemo.tsx +84 -0
  47. package/website/src/index.css +152 -0
  48. package/website/src/main.tsx +10 -0
  49. package/website/tsconfig.app.json +26 -0
  50. package/website/tsconfig.json +7 -0
  51. package/website/tsconfig.node.json +23 -0
  52. package/website/vite.config.ts +7 -0
  53. 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
- # Réf: ENGINEERING_PLAYBOOK.md §1
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 §1.\033[0m"
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 §1 recommande des messages détaillés pour faciliter la traçabilité."
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 500 ]; then
41
- echo -e "\033[33mAvertissement: Le fichier $file dépasse 500 lignes ($LINES lignes). Envisagez de le découper (Playbook §4).\033[0m"
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
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "create-gef",
3
- "version": "1.0.0",
3
+ "version": "1.1.1",
4
4
  "description": "Générateur interactif de projets respectant le framework GEF",
5
5
  "type": "module",
6
6
  "bin": {
@@ -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 d'Architecture Decision Record (ADR) en respectant le `ENGINEERING_PLAYBOOK.md` (§6) :
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
- 1. Crée un nouveau fichier dans `docs/adr/` nommé `ADR-XXX-titre_descriptif.md`.
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
- Ne consigne pas ces décisions architecturales dans le RESEARCH_LOG. Fais-en un commit dédié (`docs: création ADR pour ...`).
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 strictement le `ENGINEERING_PLAYBOOK.md` :
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
- 1. **Diagnostic et Fix**
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
- 2. **Règle Fondamentale : RESEARCH_LOG (Réf. Playbook §6)**
11
- - Ne considère **jamais** un bug critique ou une erreur bloquante comme résolue sans ajouter une nouvelle entrée numérotée dans `docs/research/RESEARCH_LOG.md`.
12
- - Explique brièvement la cause de l'erreur et la façon dont elle a été résolue pour garder une trace scientifique.
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
- 3. **Validation**
15
- - Assure-toi d'ajouter ou de mettre à jour un test pour éviter la régression avant de clore la tâche.
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).
@@ -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 technique strict, garant de l'application du `ENGINEERING_PLAYBOOK.md` (§7).
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
- 1. **Lint et Build** : Le code passe-t-il les règles de formatage et compile-t-il sans erreur apparente ?
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
- Si l'un des points échoue, demande les corrections associées et suggère le code pour les appliquer.
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 §14)**
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. Suis les instructions du `ENGINEERING_PLAYBOOK.md` (§10) :
5
+ Tu aides à démarrer un nouveau projet de manière robuste. Respecte scrupuleusement le `ENGINEERING_PLAYBOOK.md`.
6
6
 
7
- Pose-moi explicitement la question suivante :
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 ma réponse :
11
- - Si R&D : rappelle-moi que nous pouvons être souples sur la CI/CD et que le code pourra rester dans le dépôt `prototype`.
12
- - Si Contractuel/Production : rappelle-moi qu'il faut séparer strictement ce code de tout dépôt exploratoire existant, et que les règles de tests, d'auditabilité et de CI/CD sont non-négociables dès le premier jour.
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
- Aide-moi ensuite à remplir le `PROJECT_CONFIG.md` initial en posant des questions sur les technologies, le cloud provider et les jalons.
38
+ Une fois l'architecture posée, effectue un commit initial :
39
+ ```
40
+ chore: initialisation du projet via GEF (structure, CI/CD, docs)
41
+ ```
@@ -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, Cadrage, Architecture, R&D, Développement contractuel, Tests, Release, Maintenance) et adapte ton approche en conséquence.
9
- - **Clause d'Antériorité :** Applique les règles de ce framework sur le **nouveau** code. Ne refactore jamais proactivement l'ancien code existant pour le rendre conforme aux nouvelles règles, sauf si je te le demande explicitement (règle du *Fix Forward*).
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 Extrême
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
- - Utilise la convention **Conventional Commits** (`feat:`, `fix:`, `docs:`, `chore:`, `refactor:`, `style:`, `perf:`, `test:`, `release:`).
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. Documentation
17
- - Assure-toi de commenter ton code pour expliquer l'*intention* et ajoute des docstrings.
18
- - **RESEARCH_LOG.md** : Si tu résous un bug ou une erreur bloquante, documente-le immédiatement dans ce fichier avant de poursuivre.
19
- - Ne mets pas à jour le README pour de simples refactorisations internes.
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. Méthodologie Pas-à-Pas
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, explique, implémente, et valide (via un commit) étape par étape.
24
- - Si une erreur survient, diagnostique et documente-la avant de continuer.
40
+ - Propose Explique Implémente Commite Valide, étape par étape.
41
+ - Si une erreur survient, diagnostique et documente avant de continuer.
@@ -0,0 +1,8 @@
1
+ {
2
+ "$schema": "./node_modules/oxlint/configuration_schema.json",
3
+ "plugins": ["react", "typescript", "oxc"],
4
+ "rules": {
5
+ "react/rules-of-hooks": "error",
6
+ "react/only-export-components": ["warn", { "allowConstantExport": true }]
7
+ }
8
+ }
@@ -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>