Profils de projet Forge¶
Principe¶
Un profil Forge décrit le type de projet à créer. Il ne remplace pas les starters : un profil définit une base technique, un starter fournit un exemple ou un démonstrateur.
Chaque profil cible un cas d'usage précis et permet de créer des projets adaptés sans avoir à retirer ou ajouter manuellement des composants.
Le profil ne change pas le fonctionnement de Forge. Il enregistre l'intention de départ du projet.
Commande¶
L'option --profile est disponible avec forge new :
forge new MonProjet
forge new MonProjet --profile minimal
forge new MonProjet --profile standard
forge new MonProjet --profile dynamic
forge new MonProjet --profile multilingual
Compatibilité avec --ref :
Sans --profile, Forge utilise le profil standard.
Profil par défaut¶
Le profil par défaut est standard.
Profils officiels¶
| Profil | Usage | Base |
|---|---|---|
minimal |
Projet le plus simple, pédagogique | — |
standard |
Application classique recommandée | minimal + composants standard |
dynamic |
Application avec interactions front légères | standard + intention HTMX / Alpine.js |
multilingual |
Application prête pour l'internationalisation | standard + intention i18n |
auth-mfa |
Application avec MFA (TOTP) activé | standard + intention forge-mvc-mfa |
Profil minimal¶
Objectif : projet Forge le plus simple possible.
Intention :
- structure MVC de base ;
- Jinja ;
- aucun HTMX ;
- aucun Alpine.js ;
- i18n non forcée ;
- aucun composant avancé ;
- aucun exemple métier.
Usage : pour démarrer un projet très simple ou à des fins pédagogiques.
Profil standard¶
Objectif : projet Forge recommandé pour une application classique.
Intention :
- structure MVC complète ;
- Jinja ;
- Tailwind ;
- layout public / admin ;
- formulaires avec validation ;
- flash messages ;
- pagination ;
- composants de base.
Usage : pour la majorité des projets Forge. C'est le profil utilisé si aucune option --profile n'est fournie.
Profil dynamic¶
Objectif : projet Forge avec interactions front légères.
Intention :
- tout le contenu du profil
standard; - HTMX activé ou préparé ;
- Alpine.js optionnel ou préparé ;
- blocs scripts prêts ;
- conventions de fragments HTMX.
Usage : pour les projets qui veulent du dynamisme sans SPA.
Profil multilingual¶
Objectif : projet Forge prêt pour l'internationalisation.
Intention :
- tout le contenu du profil
standard; forge i18n:initappliqué au démarrage ;translations/fr.jsonprésent ;- helper
trans(...)disponible dans les templates ; - conventions de clés documentées.
Décision : multilingual hérite de standard, pas de dynamic. L'i18n et le dynamisme front sont deux dimensions indépendantes.
Usage : pour les projets qui gèrent plusieurs langues ou préparent une internationalisation.
Profil auth-mfa¶
Objectif : projet Forge avec authentification MFA (TOTP) activée via forge-mvc-mfa.
Intention :
- tout le contenu du profil
standard; forge-mvc-mfainstallé (voir installation-github.md) ;- contrôleurs auth sans stubs ni lazy imports MFA ;
- routes
/login/mfatoujours actives.
Usage :
forge new MonProjet --profile auth-mfa
# forge-mvc-mfa : voir installation-github.md (mode source-only en 1.0.0b5)
forge starter:build auth-mfa
forge starter:build auth-mfa remplace les contrôleurs stub du squelette par les versions complètes (sans try/except ni _MFA_AVAILABLE).
Prérequis : forge-mvc-mfa installé dans le venv. Sans ce module, les routes /login/mfa redirigent vers /login (comportement du squelette stub par défaut).
Hiérarchie des profils¶
minimal
└── standard
├── dynamic (standard + intention HTMX/Alpine)
├── multilingual (standard + intention i18n)
└── auth-mfa (standard + intention forge-mvc-mfa)
minimal est la base la plus sobre. standard est le profil par défaut. dynamic ajoute l'intention front dynamique. multilingual ajoute l'intention i18n. auth-mfa ajoute l'intention MFA.
Fichier forge_profile.txt¶
forge new écrit le profil choisi dans forge_profile.txt à la racine du projet généré :
Ce fichier :
- contient uniquement le nom du profil ;
- est lisible en UTF-8 ;
- pourra servir plus tard à
forge doctor,project:check, des diagnostics ou à Forge Design ; - ne contient pas de configuration complexe.
Ce qui est déjà livré¶
La Phase 9 a livré l'intégralité du contrat des profils :
| Ticket | Livraison |
|---|---|
PROFILE-001 |
Contrat : SUPPORTED_PROJECT_PROFILES, DEFAULT_PROJECT_PROFILE, descriptions |
PROFILE-002 |
Option --profile dans forge new, écriture de forge_profile.txt |
PROFILE-003 |
Tests de génération par profil — les 4 profils validés automatiquement |
PROFILE-DOC-001 |
Documentation finale consolidée |
Profils et starters¶
Un profil cible une base technique ; un starter fournit un exemple d'application. Les deux sont complémentaires : on choisit un profil pour définir la structure du projet, puis on peut s'inspirer d'un starter pour construire dessus.
| Besoin | Profil recommandé | Starter recommandé |
|---|---|---|
| Projet très simple, pédagogique | minimal |
Starter 1 — Contacts |
| Projet classique | standard |
Starter 1 — Contacts ou Starter 3 — Carnet de contacts |
| Projet avec relation many_to_one | standard |
Starter 3 — Carnet de contacts |
| Projet avec authentification (moderne) | standard |
Starter 2 — Utilisateurs/Auth |
| Démonstrateur avancé, pages publiques | standard |
Starter 5 — Communes & Séjours |
| Démonstrateur historique / legacy | — | Starter 4 — Suivi pédagogique (non recommandé pour un nouveau projet) |
Les statuts des starters ont été formalisés dans STARTER-LEGACY-AUDIT-001 et STARTER-LEGACY-DECISION-001. Le ticket STARTER-CS-REPLACE-001 confirme Communes & Séjours comme démonstrateur avancé principal.
Limites actuelles¶
- Les profils sont reconnus, validés et enregistrés dans
forge_profile.txt. - La différenciation complète des squelettes reste volontairement limitée : tous les profils produisent actuellement la même structure de base.
- Les profils ne remplacent pas les starters.
- Les profils personnalisés ne sont pas encore supportés.
- Forge Design n'est pas concerné directement par ce ticket.
À ce stade, les profils sont une base contractuelle et CLI. Ils ne déclenchent pas encore une refonte complète du squelette généré.
Prochaines évolutions¶
La différenciation progressive des squelettes par profil sera introduite dans des tickets ultérieurs.