Décisions d'architecture (ADR)¶
Les Architecture Decision Records documentent les décisions structurantes
de Forge. Chaque ADR a force décisionnelle : à lire avant toute
proposition qui le concerne. Un nouvel ADR est requis pour toute décision
structurante (docs/adr/<numéro>-<sujet>.md).
| Numéro | Sujet |
|---|---|
| ADR-001 | Stratégie d'authentification |
| ADR-002 | Stockage de session |
| ADR-003 | API publique en anglais |
| ADR-004 | Périmètre du core minimal strict |
| ADR-005 | Packaging hybride monorepo + multi-distributions PyPI |
| ADR-006 | Python 3.12+ minimum |
| ADR-007 | Adoption formelle de la charte v2 |
| ADR-008 | Audit auth : logging fourni, persistance applicative |
| ADR-009 | Politique de stabilité : audits, bêta consolidée, tests terrain |
| ADR-010 | API canonique auth/session |
| ADR-011 | Périmètre du vocabulaire d'audit auth |
| ADR-012 | Politique de dépréciation du format legacy |
| ADR-013 | Politique nullable / required des contrats |
| ADR-014 | Emplacement du contrat RBAC |
| ADR-015 | Handshake TLS par thread (dev-server) |
| ADR-016 | Unification du modèle opt-in : concept unique, cycle install/enable à 4 verbes |
| ADR-017 | Type slug et module URL-slug canonique (core/http/slug.py) |
| ADR-018 | Extraction du traitement d'image hors du core : forge-mvc-images (proposé) |
| ADR-019 | Extraction de l'upload générique hors du core : forge-mvc-files (proposé) |
| ADR-020 | Périmètre de forge-mvc-files : primitives de stockage média génériques (proposé) |
| ADR-021 | Extraction de pivot advanced hors du core : forge-mvc-pivot (accepté) |
| ADR-022 | Extraction de l'email hors du core : forge-mvc-mail (accepté) |
| ADR-023 | forge starter:build comme seule façon de construire un starter ; forge new produit un projet nu (accepté) |
| ADR-024 | Bootstrap par squelette dédié et dépendance core via pip (accepté) |
| ADR-025 | welcome-forge : tutoriel continu manuel au lieu de starters par palier (accepté) |
| ADR-026 | Accesseurs de Request nommés par leur source : query et route (accepté) |
| ADR-027 | Extraction de l'i18n vers forge-mvc-i18n, repli no-op conservé dans le noyau (accepté) |
| ADR-028 | welcome-forge : tutoriel continu manuel sur les trois niveaux, un mini-projet par niveau (accepté) |
| ADR-029 | Convention de route : chemin /contrôleur/méthode (index nu), nom contrôleur-méthode (accepté) |
| ADR-030 | Injection de routes dans mvc/routes.py par commande explicite et portée de la règle 4.3 (accepté) |
| ADR-031 | Découplage complet du mail hors de core.forge ; forge-mvc-mail lit sa config depuis l'environnement (accepté) |
| ADR-032 | Périmètre de la config upload : seul upload_max_size est du core, le reste va aux opt-ins files/images (accepté) |
| ADR-033 | forge db:apply applique les migrations avec DB_ADMIN_* (et non DB_APP_*) : forge_app reste DML strict (accepté) |
| ADR-034 | forge new génère DB_NAME / DB_APP_LOGIN à partir du nom normalisé du projet, sans suffixes _db/_app (accepté) |
| ADR-035 | Modèle pédagogique unique : parcours réalisés à la main depuis la doc, retrait de starter:build/starter:list et de la génération (accepté) |
| ADR-036 | Typage statique du cœur vérifié en CI (Pyright), py.typed, strictness par cliquet en commençant par l'API publique (accepté) |
| ADR-037 | Agrégation par comptage dans forge-mvc-stats (accepté) |
| ADR-038 | Documentation des opt-ins embarquée par paquet (packages/<paquet>/docs/), agrégée dans le site unique ; slug d'URL = nom sans forge-mvc- (accepté, pilote stats validé) |
| ADR-039 | Refonte de l'architecture d'information de docs/ (cœur) : un sujet = un emplacement canonique, tronc « Opt-ins officiels », dédoublonnages (proposé) |
| ADR-040 | Surface de test par paquet opt-in : modèle hybride (transversal à la racine, smoke + unitaire dans le paquet), testpaths = tests packages, importorskip (accepté) |
| ADR-041 | Infrastructure de test partagée (forge-mvc-testing dev-only, plugin pytest + FakeRequest) pour rendre les tests de paquet autonomes (accepté) |
| ADR-042 | Découpler la documentation du cœur et celle des opt-ins (accepté) |
| ADR-043 | Documentation embarquée du cœur et du CLI ; renommage forge_cli → cli (accepté) |
| ADR-044 | Le dépôt Forge ne porte que le framework ; application racine relocalisée (accepté) |
| ADR-045 | Intégrer la publication du site officiel dans Forge (accepté) |
| ADR-046 | Registre de loaders de templates Jinja pour les opt-ins (accepté) |
| ADR-047 | Couche de guidance agent IA dans les applications Forge (accepté) |
| ADR-048 | Parcours d'accueil « welcome-projet » dans le squelette (annulé) |
| ADR-049 | Repositionnement : framework de production auditable (accepté) |
| ADR-050 | Opt-in QR Code forge-mvc-qrcode (accepté) |
| ADR-051 | Insertion d'une méthode dans le contrôleur des pages publiques (make:public-page), explicite, idempotente, fail-safe et ciblée (proposé) |
| ADR-052 | Stratégie et critères des opt-ins : deux filtres d'admission (runtime WSGI, charte), classification des candidats, ordre recommandé (proposé) |
| ADR-053 | Extraction du déploiement (deploy:init/deploy:check + gabarits + doc) dans un opt-in CLI-only forge-mvc-deploy (proposé) |
| ADR-054 | Cœur agnostique BDD : backends (MariaDB, SQLite, PostgreSQL, SQL Server) en opt-ins exclusifs, découverts par entry points (proposé) |
| ADR-055 | Classification des opt-ins par destination : champ category au catalogue, taxonomie unique (CLI + docs), sans renommer les paquets (proposé) |
| ADR-056 | Extraction du contrat (schéma) et de l'outillage RBAC (rbac:validate/rbac:audit) du cœur vers l'opt-in forge-mvc-rbac (proposé) |
| ADR-057 | Découplage du schéma pivot : relations (cœur) cesse de référencer pivot (bloc opaque), pivot.schema.json extrait vers forge-mvc-pivot (proposé) |
| ADR-058 | Source unique des schémas JSON : cli/schemas/ canonique, suppression de la copie racine schemas/, squelette et embeds opt-in = copies dérivées gardées (proposé) |