Aller au contenu

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

  1. 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érite operated_by/hosting du projet, surchargeables.
  2. sirrat_environment_stack : ajout lane_code (NOT NULL, défaut ref) ; remplacement de la clé unique par (project_db_id, env_code, lane_code).
  3. sirrat_deployments : ajout lane_code (défaut ref) et app_code (un couloir porte plusieurs applications) ; un déploiement = (project, env, lane, app, version).
  4. SirratEnvironment : ajout INT, réservation PREPROD (non émis), alias fromCode dépréciés → RMOA (ADR-0016).
  5. Centre de Services — attributs maintenant, entités plus tard. Ajouter operated_by ∈ {dynors,client}, hosting ∈ {dynors,client,cloud-client}, acceptance ∈ {internal,contractual} et owner_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és Client/Contrat/Equipe 1ʳᵉ classe. Les codes imoe/r7ex ne sont pas des environnements : leur nature (client / org / campagne / couloir / infra externe) est explicitement modélisée.
  6. Ne pas modéliser Cluster/Namespace/Canal dans le domaine : projections calculées (namespace {env}-{app}-{lane}) par EnvironmentManifestService.

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/Namespace dans le domaine → écarté (couplage infra).

Plan d'exécution

  1. Changeset 018-sirrat-lane-dimension.yaml : créer sirrat_environment_lane, ajouter lane_code (stack + deployments, défaut ref), app_code (deployments), attributs CdS, swap de la contrainte unique. 2. Entité SirratLane + repository. 3. Éditer Stack/Deployment/SirratEnvironment (même palier que la migration). 4. EnvironmentManifestService dé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.