ADR-0017 — Couloir (lane) : unité d'exécution parallèle, explicite et nommée¶
Date : 2026-06-17
Catégorie : A (convention transverse)
Décideur : Lead architecte DYNORS — validé CTO
Statut : Acceptée (cible) — implémentation par paliers
S'appuie sur : [[0016-nomenclature-environnements-int-rmoa]], [[0018-exposition-hors-prod-sly-edge-chemin]], [[0019-modele-sirrat-dimension-couloir]]
Sources : étude environnements §Partie 6 ; SirratEnvironmentStack.java, SirratEnvironmentSlotValue.java ; dynors-ops/charts/dynors-app/values.yaml
Contexte¶
Dans un même environnement, DYNORS doit exécuter plusieurs ensembles parallèles (combinaisons d'applications, versions, configurations, secrets, données, ressources). Le modèle actuel ne le permet pas : SirratEnvironmentStack et Deployment sont contraints à une instance par (projet, environnement). Les termes pressentis sont déjà pris : socle = fondation plateforme et deployTarget non-K8s (values.yaml) ; slot = variable de configuration (SirratEnvironmentSlotValue) ; stack = agrégat (projet, env).
Décision¶
- Nom de l'unité d'exécution : « couloir » (fonctionnel, UI/doc) /
lane(technique : code, API, DB). Identifiantlane_codevalidant^[a-z][a-z0-9-]{1,15}$. Termessocle,slot,stack,instance,cluster,namespaceinterdits pour ce concept. - Toujours explicite, jamais implicite. Le
lane_codefigure systématiquement dans l'URL hors-prod (cf. [[0018-exposition-hors-prod-sly-edge-chemin]]), y compris le couloir de référenceref:sly-rmoa-ref…est valide,sly-rmoa…(sans couloir) n'existe pas. - Couloir de référence ≠ couloir par défaut. Le champ
is_reference(cf. [[0019-modele-sirrat-dimension-couloir]]) est un libellé fonctionnel (« couloir désigné comme référence dans cet environnement ») pour l'UI/gouvernance. Il ne résout JAMAIS une URL incomplète et ne sélectionne aucun couloir : une requête sanslane_codeest rejetée (validation SLY / Gate 0), jamais redirigée. preprodinterdit commelane_code(réservé au futur environnement, ADR-0016). Un couloir de pré-bascule porte un nom fonctionnel :rc,release-candidate,validation.- Le couloir porte une stratégie de données (cf. 0019) :
shared|schema|database. Isolation des routes/cookies sans isolation des données ≠ isolation complète.
Conséquences¶
Positif : versions multiples en parallèle dans un même environnement ; vocabulaire sans collision ; aucune cible implicite (sécurité, traçabilité) ; isolation par hôte (cookies host-only, ADR-0014). Coût : ajout de la dimension lane au modèle SIRRAT (0019), aux URLs (0018), aux manifestes K8s (namespace {env}-{app}-{lane}) et aux chemins Vault ({env}/{lane}/{app}).
Composants impactés : SIRRAT (modèle, Forge), SLY (routes), Helm (namespace/labels), Vault (chemins), conventions d'URL.
Alternatives considérées¶
socle/slot/stack→ écartées (collisions prouvées dans le code/docs).slotexplicitement proscrit par la demande et par la collisionSirratEnvironmentSlotValue.- Couloir dans le chemin (
/{lane}/{app}/...) → écarté : casse l'isolation des cookies entre couloirs. - Couloir « par défaut » implicite → écarté (contrainte forte : aucune cible invisible).
Plan d'exécution¶
- Figer le vocabulaire (couloir/
lane,ref, règle d'identifiant). 2. Ajouter la dimension au modèle (0019) et aux URLs (0018). 3. Contraintes de validation refusant toute route sanslane_code. 4. Mettre à jour règles Cursor + docs.
Suivi¶
Succès : aucune route SLY sans lane_code ; aucune redirection vers ref ; is_reference jamais utilisé pour résoudre une URL ; 0 réutilisation de socle/slot/stack pour désigner un couloir.