ADR 0045 – Connexion de publication des packs
Statut : Décidée. Date : 04/10/2026. Prolonge l’ADR 0044 et reprend le principe de l’ADR 0015 (rôle distinct pour les tâches de fond).
Contexte
Section intitulée « Contexte »Un pack publié est figé et partagé par toutes les organisations. Jusqu’ici, il se publiait par la ligne de commande (packs:publier) avec le rôle des migrations ; l’API (biotrace_app, soumis à la RLS) n’a aucun droit d’écriture sur les tables de packs, volontairement. Le cockpit doit permettre à l’équipe de l’éditeur de publier sans accès à la base.
Décision
Section intitulée « Décision »L’API ouvre une seconde connexion, lue dans PUBLICATION_DATABASE_URL, utilisée par le seul service PublicationPacksService et seulement pour écrire. Sans cette variable, le cockpit contrôle les packs mais la publication répond 503 publication_indisponible. Elle n’a jamais de valeur par défaut, et ne retombe jamais sur la connexion de l’API.
- Une seule règle, deux entrées : le cockpit appelle les fonctions de
apps/api/src/packs/publication.ts, comme la ligne de commande. Le contrôle à blanc (controlerPack) fait les mêmes vérifications sans écrire, avec la connexion de lecture de l’API. - Rôles : lire et contrôler, tout rôle de l’éditeur ; publier,
editeur_parametrageouediteur_admin(EC-099 : packs, catalogues, publication). Pas d’étape de revue : EC-099 écarte toute séparation des tâches dans l’équipe. - Traçabilité :
app.pack_version.publie_pargarde le sujet Keycloak de l’auteur. - En production, un rôle PostgreSQL dédié suffit :
SELECTsur le catalogue global (facteurs, unités, activités, modules, dictionnaire de variables, packs) etINSERTsurpack,pack_version,facteur_valeur,regle_decision,point_controleetreferentiel(plusUPDATEsurreferentiel, pour le rattachement au pack). En développement, c’est le rôle des migrations, comme la ligne de commande.
Alternatives écartées
Section intitulée « Alternatives écartées »- Donner à
biotrace_apple droit d’écrire les packs : toute faille de l’API client permettrait d’altérer le contenu partagé par tous les clients. - Un second service pour la publication : double déploiement et double contrat sans besoin avéré (même raisonnement que l’ADR 0044).
Conséquences
Section intitulée « Conséquences »Une variable d’environnement et un rôle à provisionner par l’infrastructure. Aucune dépendance nouvelle. La ligne de commande reste valable pour le pipeline.
Stratégie de sortie
Section intitulée « Stratégie de sortie »Le service ne connaît que deux fonctions (controlerPack, publierPack) et une connexion injectée. Rendre la publication au pipeline seul revient à retirer les deux routes /v1/editeur/packs.