ADR-085 : Câblage de routes canonique, fichier plus affichage¶
Statut¶
Acceptée.
Décision d'architecture ; relève du mainteneur.
Révise l'ADR-030 (injection de routes par commande explicite).
Date¶
2026-07-14
Contexte¶
Quand un générateur produit un contrôleur, ses routes doivent être branchées dans
l'application. Trois mécanismes coexistaient, hérités de chantiers successifs :
make:crud,make:auth,make:pivot-crudgénèrent un fichier
mvc/routes/<contrôleur>_routes.py(ADR-068) et affichent les deux lignes
de branchement à ajouter dansmvc/routes/__init__.py. Ils n'écrivent jamais
dans un fichier de l'utilisateur.make:public-page/list/show/form/contactinjectent directement imports et
blocs de routes dansmvc/routes/__init__.py, par analyse AST (ADR-030).opt-in:enableinjecte l'appelregister_optins(router)par ancrage.
Trois façons de faire un même geste contredisent le principe 11 (une seule façon
officielle de faire chaque chose). Surtout, l'injection réécrit un fichier
possédé par l'utilisateur (mvc/routes/__init__.py), ce qui est en tension avec
la charte principe 9 (« pas d'écriture invisible dans le code utilisateur ») et
la règle §7 (Forge génère, affiche, lit ; ne réécrit jamais silencieusement).
L'ADR-030 avait autorisé l'injection sous conditions ; le retour d'expérience
montre qu'elle complique l'audit d'un projet généré (deux vitesses selon la
commande) sans bénéfice décisif : le branchement est deux lignes à copier.
Décision¶
Le câblage de routes suit une seule convention, celle de l'ADR-068 :
générer un fichier de routes dédié, puis afficher le branchement. Aucun
générateur n'écrit dans mvc/routes/__init__.py.
make:public-*génèrent leurs routes dans un fichier
mvc/routes/<nom>_routes.py(fonctionregister_<nom>_routes(router)) et
affichent les deux lignes de branchement, commemake:crud.opt-in:enablecesse d'injecterregister_optins(router): il affiche le
branchement à ajouter (import et appel), l'utilisateur le colle.make:crud,make:auth,make:pivot-crudsont déjà conformes.
Le mode affichage devient donc l'unique geste de branchement. Forge reste
dans ses trois modes (génère, affiche, lit) sans jamais réécrire un fichier
utilisateur.
Conséquences¶
- Révise l'ADR-030 : l'injection de routes par commande explicite n'est plus la
voie retenue ; l'ADR-030 est conservé comme trace historique, sa décision est
remplacée par celle-ci. - Tickets dérivés : bascule de
make:public-*(5 commandes) et d'opt-in:enable
du mode injection au mode fichier + affichage. - L'utilisateur a un geste manuel de plus (copier deux lignes) pour les pages
publiques et l'activation d'opt-ins ; en contrepartie,mvc/routes/__init__.py
n'est jamais modifié par Forge et reste entièrement sous son contrôle. - L'analyse AST de détection de point d'injection (ADR-030) devient inutile pour
ces commandes et peut être retirée avec la bascule.
Limites¶
- Cet ADR ne change pas le format du fichier de routes par contrôleur (ADR-068)
ni la convention de nommage des routes (ADR-029). - Il ne couvre pas un éventuel outil futur d'aide au branchement (par exemple une
commande qui vérifierait que tous les fichiers de routes sont bien branchés) :
ce serait un ADR distinct.