ADR-0019 — Modèle SIRRAT : ajout de la dimension couloir (lane) et stratégie de données¶
Date : 2026-06-17
Catégorie : A (modèle de données plateforme)
Décideur : Lead architecte DYNORS — validé CTO
Statut : Acceptée (cible) — implémentation par paliers
S'appuie sur : [[0017-couloir-lane-unite-execution-explicite]], [[0016-nomenclature-environnements-int-rmoa]], [[0012-helm-packaging-cible-k8s]], [[0009-taxonomie-templates-deploiement]]
Sources : étude §Partie 8 ; SirratProject.java, SirratEnvironmentStack.java, Deployment.java, SirratEnvironment.java ; changesets Liquibase 003, 013
Contexte¶
Le modèle SIRRAT est keyé (projet, environnement) : sirrat_environment_stack a une contrainte unique uk_environment_stack_project_env (project_db_id, env_code) et sirrat_deployments trace (project, environment, version) sans dimension parallèle. Les attributs Centre de Services existent déjà partiellement : SirratProject.client, scenario (managed/on-premise/cloud-client/regie), internal_app. Manque la dimension couloir (ADR-0017) et la modélisation explicite d'un environnement possédé par le client.
Décision¶
- Nouvelle entité légère
SirratLane(sirrat_environment_lane), unique(project_db_id, env_code, lane_code):label,purpose,is_reference(libellé fonctionnel, ne route pas — ADR-0017),active,created_by, et la stratégie de données :data_strategy∈ {shared,schema,database},data_source_ref,dataset_ref,reset_strategy,retention_policy. Hériteoperated_by/hostingdu projet, surchargeables. sirrat_environment_stack: ajoutlane_code(NOT NULL, défautref) ; remplacement de la clé unique par(project_db_id, env_code, lane_code).sirrat_deployments: ajoutlane_code(défautref) etapp_code(un couloir porte plusieurs applications) ; un déploiement =(project, env, lane, app, version).SirratEnvironment: ajoutINT, réservationPREPROD(non émis), aliasfromCodedépréciés →RMOA(ADR-0016).- Centre de Services — attributs maintenant, entités plus tard. Ajouter
operated_by∈ {dynors,client},hosting∈ {dynors,client,cloud-client},acceptance∈ {internal,contractual} etowner_org. Un environnement réellement possédé par le client (hébergé dans son SI, identité/réseau propres, parfois inaccessible directement, déployé via agent/runner/forge autorisé) n'est pas un couloir DYNORS : il est porté par ces attributs et, à terme, par des entitésClient/Contrat/Equipe1ʳᵉ classe. Les codesimoe/r7exne sont pas des environnements : leur nature (client / org / campagne / couloir / infra externe) est explicitement modélisée. - Ne pas modéliser
Cluster/Namespace/Canaldans le domaine : projections calculées (namespace{env}-{app}-{lane}) parEnvironmentManifestService.
Conséquences¶
Positif : versions parallèles possibles ; isolation des données pilotée par couloir ; base Centre de Services posée sans sur-modélisation ; distinction RMOA DYNORS / env client. Coût : 1 changeset Liquibase (additif + swap de contrainte) ; nouvelle entité + repository ; édition Stack/Deployment/enum (à livrer avec la migration) ; backfill lane_code=ref pour l'existant.
Composants impactés : entités/repos SIRRAT, Liquibase, EnvironmentManifestService (génère namespace + route par couloir), Forge.
Alternatives considérées¶
- Couloir = nouveau niveau d'environnement → écarté (explosion de l'enum, ADR-0016).
- Réutiliser
slot/stack→ écarté (ADR-0017). - Entité Client 1ʳᵉ classe immédiate → différée (sur-architecture tant qu'il n'y a pas plusieurs clients externes).
Cluster/Namespacedans le domaine → écarté (couplage infra).
Plan d'exécution¶
- Changeset
018-sirrat-lane-dimension.yaml: créersirrat_environment_lane, ajouterlane_code(stack + deployments, défautref),app_code(deployments), attributs CdS, swap de la contrainte unique. 2. EntitéSirratLane+ repository. 3. ÉditerStack/Deployment/SirratEnvironment(même palier que la migration). 4.EnvironmentManifestServicedérive namespace + route par couloir.
Suivi¶
Succès : (project, env, lane) unique respecté ; rows existants en lane=ref ; déploiements parallèles ref+rc co-existants ; data_strategy renseignée par couloir ; env client distinct d'un couloir DYNORS.