ADR-021 — Extraction de pivot advanced vers forge-mvc-pivot¶
Statut¶
Acceptée
Amende ADR-004 (périmètre du core minimal) et s'inscrit dans la même logique que ADR-018 / ADR-019.
Contexte¶
Après les extractions d'ADR-004 (MFA, OIDC supprimé, RBAC, workflow, stats) et
d'ADR-018/019 (images, files), un audit du core/ a identifié des briques
encore présentes qui échouent au test de légitimité d'ADR-004 : « si je
retire cette brique du core, une application Forge basique tourne-t-elle
encore ? ».
core/pivot_advanced.py est l'une d'elles :
- C'est une fonctionnalité avancée de données — la persistance
d'associations
many_to_manyenrichies (lignes de jointure portant des attributs), avec son générateurforge make:pivot-crud. - Elle n'est pas une primitive générale du framework : une application basique (HTTP, MVC, CRUD simple) tourne sans elle.
- Elle est autonome : aucun autre module du core ne l'importe ; ses accès
base passent par les helpers injectables
core.database.db(chargés paresseusement), comme les autres opt-ins (stats).
Elle relève donc d'un module opt-in, au même titre que stats ou workflow.
Décision¶
core/pivot_advanced.py et son générateur forge_cli/entities/make_pivot_crud.py
sont extraits vers l'opt-in forge-mvc-pivot.
| Élément avant | Élément après |
|---|---|
core/pivot_advanced.py |
forge_mvc_pivot.service (réexporté par forge_mvc_pivot) |
forge_cli/entities/make_pivot_crud.py |
forge_mvc_pivot.make_pivot_crud |
from core.pivot_advanced import … (code généré) |
from forge_mvc_pivot import … |
- La commande
forge make:pivot-crudreste exposée par la CLI cœur, mais est routée vers le paquet viatry / except ImportError(même mécanisme queiot:*/video:*) : siforge-mvc-pivotn'est pas installé, un message invite à l'installer. - Le code généré par
make:pivot-crudimporte désormaisforge_mvc_pivot; l'application doit donc installer l'opt-in pour utiliser un sous-CRUD pivot.
Pré-1.0 (convention bêta) : extraction sans alias déprécié dans le core
(pas d'utilisateurs externes à protéger). Les anciens chemins
core.pivot_advanced et forge_cli.entities.make_pivot_crud sont supprimés.
Conséquences¶
- Nouveau paquet
packages/forge-mvc-pivot/(distribution PyPI séparée, dépend deforge-mvc). - Les tests pivot importent
forge_mvc_pivotet sont protégés parpytest.importorskip("forge_mvc_pivot")(core reste autonome — garde-fouTESTS-OPTIN-IMPORTORSKIP-001). - Garde-fou d'extraction
PIVOT-EXTRACT-001: le core ne contient pluspivot_advanced, le paquet expose l'API publique. - Aucun starter gelé ni progression welcome n'est impacté (contrairement à une
éventuelle extraction de
mail, qui porte le startersend-emailde la progression welcome-forge — traitée séparément si décidée).
Pistes connexes (non tranchées ici)¶
Le même test de légitimité désigne deux autres candidats, à traiter par des ADR dédiés s'ils sont retenus :
core/mail/— autonome, non vital ; extraction plus lourde car elle déplace la famille CLImail:*et sort le startersend-emailde la progression welcome-forge gelée (réduction du contrat 1.0).core/i18n/— autonome mais de faible volume ; gain marginal.