Aller au contenu principal

Diagrammes UML — structure, états, composants et déploiement

  • DocumentStrategielancement/01-produit/13-diagrammes-uml-structure.md
  • Version1.0
  • Date2026-08-17
  • StatutLivré
  • Publicinterne
  • MarqueKySpectra (par Kyrieva)

Strategielancement/01-produit/13-diagrammes-uml-structure.mdFichier source

#Sommaire

§ Famille Nombre de diagrammes
0 Conventions de lecture
1 Diagrammes de classes — 8 domaines 8
2 Diagrammes d'états — 10 cycles de vie réels 10
3 Diagramme de composants 2
4 Diagrammes de déploiement — topologie des 3 environnements 3
5 Invariants structurels vérifiés

Total : 23 diagrammes.


#0. Conventions de lecture

#0.1 Diagrammes de classes

Les classes reprennent le nom de table réel du dépôt lorsque celui-ci existe. Le préfixe de table est app_ par convention de projet. Les attributs listés sont ceux qui portent une règle métier ; les colonnes purement techniques d'horodatage sont omises pour la lisibilité, sauf lorsqu'elles sont contraintes.

Symbole Signification
+ Attribut porteur d'une règle métier
A "1" --> "0..*" B Association avec cardinalité
A *-- B Composition : la suppression du parent supprime l'enfant
`A < -- B`

#0.2 Diagrammes d'états

Les états sont les valeurs réelles contrôlées en base par des contraintes de vérification ou par des vocabulaires figés côté service. Les libellés de transition nomment l'action, jamais un souhait.

#0.3 Une base par service

La persistance ne partage pas de schéma entre services : chaque service possède sa base, nommée ks_<slug>_<environnement>. Les références inter-services sont des valeurs nues, sans clé étrangère. Les clés étrangères n'existent qu'à l'intérieur d'un service.

#0.4 Sécurité au niveau des lignes

La quasi-totalité des tables métier portent une sécurité au niveau des lignes forcée, adossée à un paramètre de session portant l'identifiant de locataire. La couche de correspondance objet-relationnel ne filtre jamais elle-même par locataire : c'est la base qui garantit l'étanchéité.


#1. Diagrammes de classes

#1.1 Cœur — projet et spécification exécutable

Aucun diagramme à afficher

Diagramme 1 — classDiagram

Classe Règle métier réelle Statut
SpecItem.status Sept valeurs contrôlées : draft, clarified, planned, in_dev, implemented, verified, deprecated 🟢 Livré
SpecRelationship.rel_type Vocabulaire contrôlé de plus de vingt valeurs, dont contains, refines, derives, satisfies, verifies, validates, implements, depends_on, conflicts_with, traces_to, governs, justifies, resolves 🟢 Livré
Couverture Seules verifies et traces_to comptent comme vérification d'une exigence 🟢 Livré
Scénario Les types d'objet SCEN et TEST représentent un scénario exécutable 🟢 Livré
SpecItem.provenance Trace l'origine : saisie directe, ingested:<source>, reverse:<mode>, ou copilote 🟢 Livré
Metamodele Impose les types et les liens autorisés par projet 🟢 Livré

#1.2 Artefacts et documentation projetée

Aucun diagramme à afficher

Diagramme 2 — classDiagram

Contrainte réelle Valeur
Artifact.kind Sept familles : prd, uml, bpmn, togaf, security, erd, archimate
Artifact.status Cinq valeurs : draft, generated, reviewed, published, deprecated
Artifact.spec_refs Au moins une référence obligatoire, garantie par contrainte de base : aucun artefact orphelin
ArtifactVersion Unicité par artefact et numéro de version ; suppression en cascade
Doc.doc_type Trois valeurs : technical, user, release_notes. Le document d'exigences produit n'est pas un type de document : c'est une famille d'artefact
Doc.lang Deux valeurs : fr, en, valeur par défaut fr
Doc unicité Un document unique par locataire, projet, type, langue et titre
Doc.source_hash Empreinte du sous-ensemble canonique de la spécification projetée, utilisée pour la détection de dérive

⚠️ Nuance vérifiée. Le sous-type d'un artefact UML accepte 14 valeurs, mais 5 seulement disposent d'un générateur spécialisé : classe, machine à états, séquence, composant et déploiement. Les 9 autres retombent sur un organigramme générique. En outre, une révision d'un modèle entité-relation ou ArchiMate perd son diagramme, le dispatcher de rendu ne couvrant pas ces deux familles.

#1.3 Rétro-ingénierie

Aucun diagramme à afficher

Diagramme 3 — classDiagram

Contrainte réelle Valeur
ReverseJob.mode reverse, hybrid, incremental
ReverseJob.status queued, ingesting, analyzing, inferring, ready, failed
SourceRef.system git, db_schema, openapi, graphql, grpc, iac, ci, docs, runtime
Systèmes réellement outillés git, db_schema, openapi, graphql par tolérance, iac, docs, historique. grpc, ci et runtime sont admis mais sans analyseur : 422 typé
InferredItem.candidate_type US, FR, BR, NFR, ENT, API, DEC, PERSONA, CONTEXT
InferredItem.proof Obligatoire : un candidat sans preuve est refusé par le constructeur
Garde de promotion Un déclencheur de base interdit toute promotion sans tâche de validation approuvée
ProjectSource.cred_vault_path Chemin de coffre seulement ; un secret en clair produit un 422

#1.4 Exécution d'agents

Aucun diagramme à afficher

Diagramme 4 — classDiagram

Contrainte réelle Valeur
AgentRun.status queued, running, suspended, completed, failed
AgentRun.executor inline, claude_code, kubernetes. Une valeur inconnue échoue bruyamment, jamais de repli silencieux
AgentCheckpoint Unicité par exécution et numéro de séquence
AgentActivityEvent Unicité par exécution et numéro de séquence : c'est ce qui rend le flux rejouable
AgentPolicyCheck.policy_id Vaut deny-by-default lorsque aucune règle ne couvre l'action
AgentVaultLease Aucune colonne de secret : seule la référence de bail est enregistrée. Garde vérifiée par un test de structure
VisualBaseline L'approbation exige un rôle ≥ PUBLISHER

#1.5 Personnel virtuel et registre de capacités

Aucun diagramme à afficher

Diagramme 5 — classDiagram

Contrainte réelle Valeur
VirtualRole.autonomy_ceiling Contrainte de base : N0, N1, N2 ou N3, valeur par défaut N1
VirtualRole.visibility global ou tenant. Pas de niveau utilisateur pour les rôles
Skill.visibility global, tenant ou user. Le niveau utilisateur est réservé aux prompts
Skill.source builtin, imported, custom
ToolPermission.effect Valeur par défaut deny : un outil sans ligne d'autorisation explicite est refusé
ExtensionReview Contrainte de base : le relecteur doit différer du soumissionnaire
ToolCallAudit Journal en ajout massif ; empreintes seulement, jamais les arguments en clair
McpServer.auth_config Forme non secrète seulement ; le secret vit dans le coffre et est résolu à l'appel

Grammaire de portée. Un binding cible tenant, project:<identifiant> ou agent:<clé de rôle>. La résolution retient le binding actif le plus spécifique : agent puis projet puis locataire.

#1.6 Locataire, identité et organisation

Aucun diagramme à afficher

Diagramme 6 — classDiagram

Règle réelle Détail
Hiérarchie de rôles VIEWER 0 < EDITOR 1 < PUBLISHER 2 < ADMIN 3 < OWNER 4 < SUPERADMIN 5
Résolution de permission Défaut du rôle, puis dérogation la plus spécifique, priorité décroissante puis ancienneté ; sinon refus
OrgInvitation.expires_at Validité de 7 jours ; jeton inconnu ou expiré ⇒ 404 sans fuite
UserConsentRecord Journal en ajout seul : preuve de consentement Loi 25
UserDSARRequest Demande d'accès aux renseignements personnels, articles 27 et 28
Locataire de plateforme Identifiant réservé, exempté de l'application des limites de plan

⚠️ Écart connu. Cinq rôles sectoriels hérités d'un domaine antérieur subsistent hors hiérarchie et ne satisfont jamais une exigence de rang minimum. Leur retrait relève du chantier de généricisation.

#1.7 Plans, abonnements et budgets

Aucun diagramme à afficher

Diagramme 7 — classDiagram

Contrainte réelle Valeur
Plan.price_monthly Entier en cents ; devise unique CAD
Plan.plan_type free, freemium, trial, paid, enterprise
Subscription.status active, trialing, past_due, canceled, suspended, manual
Invoice.status draft, open, paid, void, uncollectible
Coupon.coupon_type percentage, fixed_amount, free_months
TrialRecord Essai de 14 jours sans carte, rappels à J-7, J-3 et J-1, rétrogradation à l'expiration
Budget Limite en dollars, seuil d'avertissement, seuil critique, par portée
QuotaWindow Consommation par portée et par modèle, avec date de réinitialisation

Droits résolus par plan. Dix fonctions et six quotas. Pour le plafond d'autonomie : gratuit N1, Équipe N2, Entreprise N3. Pour les appels d'outils par jour : 200, 5 000, 1 000 000.

#1.8 Revue, déploiement et retours

Aucun diagramme à afficher

Diagramme 8 — classDiagram

Contrainte réelle Valeur
Review.state draft, submitted, approved, changes_requested, rejected
Séparation des devoirs submitted_by ne peut jamais égaler reviewer_id sur une décision
DeployRun.env dev, staging, prod
DeployRun.status running, failed, deployed, succeeded, rolled_back
DeployStage Six étapes, ordinal de 0 à 5, unicité par exécution et par nom, et par exécution et ordinal
DeployStage.status pending, passed, failed
Deployment.status deploying, live, failed, rolled_back
DeployApproval.decision approved ou rejected ; auto-approbation refusée
BastionSession Aucune colonne de secret ; contrainte exigeant une expiration postérieure à l'ouverture

#2. Diagrammes d'états — cycles de vie réels

#2.1 Objet de spécification

Aucun diagramme à afficher

Diagramme 9 — stateDiagram-v2

État Signification opérationnelle Effet sur la couverture
draft Objet créé, non stabilisé Non comptabilisé
clarified Ambiguïtés levées, prêt à planifier Non comptabilisé
planned Inscrit à un cycle Comptabilisé au périmètre
in_dev En cours de fabrication Comptabilisé au périmètre
implemented Code livré, vérification à faire Écart de vérification visible
verified Relié à un test par verifies ou traces_to Couvert
deprecated Retiré du périmètre actif Exclu des calculs

#2.2 Revue

Aucun diagramme à afficher

Diagramme 10 — stateDiagram-v2

Transition Garde Code d'échec
draft vers submitted Arête légale 409 transition interdite
submitted vers approved Relecteur distinct et porte satisfaite 403 auto-approbation ; 422 critères non satisfaits
submitted vers changes_requested Relecteur distinct 403 auto-approbation
submitted vers rejected Relecteur distinct 403 auto-approbation
changes_requested vers submitted Arête légale 409 sinon
Depuis un état terminal Aucune transition possible 409 avec mention d'état terminal

#2.3 Exécution d'agent

Aucun diagramme à afficher

Diagramme 11 — stateDiagram-v2

État Conséquence sur les opérations
queued Aucun événement d'activité encore émis
running Suspension, interruption et réponse interactive possibles
suspended Seule la reprise est possible
completed Terminal : suspension et reprise renvoient 409
failed Terminal ; le résultat porte la cause nettoyée des données sensibles

#2.4 Exécution de déploiement

Aucun diagramme à afficher

Diagramme 12 — stateDiagram-v2

Garde de transition Code d'erreur réel
Étape d'ordinal inférieur non franchie 409 gate/out-of-order
Portes non franchies avant le déploiement 409 gate/not-passed
Marquage manuel de l'étape de déploiement 409 deploy/via-deploy-endpoint
Deuxième déploiement pour la même exécution 409 deploy/already-recorded
Approbateur identique au demandeur 409 deploy/approval-self
Exécution réelle désactivée 501 deploy/live-not-enabled

#2.5 Déploiement unitaire

Aucun diagramme à afficher

Diagramme 13 — stateDiagram-v2

Règle non négociable. Le statut live n'est jamais déduit de la réponse d'application : il exige une ré-interrogation de l'état réel du workload.

#2.6 Abonnement

Aucun diagramme à afficher

Diagramme 14 — stateDiagram-v2

État Effet sur les droits
trialing Droits du plan visé, rappels à J-7, J-3 et J-1
active Droits pleins du plan
past_due Droits maintenus pendant le délai de grâce
canceled Rétrogradation vers le palier gratuit, plafond d'autonomie N1
suspended Accès bloqué, données conservées
manual Facturation hors ligne, droits du plan

#2.7 Tâche de personnel virtuel

Aucun diagramme à afficher

Diagramme 15 — stateDiagram-v2

Statut de membre Effet
active Le membre reçoit des tâches et le bouton d'assignation est disponible
paused Le membre ne prend aucune nouvelle tâche ; ses tâches en cours restent visibles

Périmètre honnête. La phase 1 couvre le recrutement, l'assignation, la file, l'activité et l'organigramme. L'autonomie déléguée, l'escalade et la chaîne d'imputabilité sont ⚪ Planifiées.

#2.8 Travail de rétro-ingénierie

Aucun diagramme à afficher

Diagramme 16 — stateDiagram-v2

Règle Détail
Reprise manuelle ingesting, analyzing et inferring produisent un 409 ; ready est traité en opération neutre ; queued et failed relancent
Jamais bloqué Toute exception marque failed dans une session neuve, avec un message assaini
Reprise groupée Un point d'accès replanifie tous les travaux restés queued pour le locataire

#2.9 Compétence gouvernée du registre

Aucun diagramme à afficher

Diagramme 17 — stateDiagram-v2

Garde Code d'erreur réel
Auto-approbation 409 sod/self-approval-forbidden
Acteur non identifié 400 actor/required : une décision doit être attribuable
Seconde soumission alors qu'une revue est en attente 409 review/already-pending
Approbation sans revue en attente 409 review/none-pending
Approbation d'un sujet à risque élevé sans attestation 422 ext/security-review-required

Effet de la révocation. Transition persistée et propagation immédiate : tous les bindings sont désactivés et toutes les permissions supprimées.

#2.10 Candidat d'ingestion documentaire

Aucun diagramme à afficher

Diagramme 18 — stateDiagram-v2

Décision Écriture chez le service de spécification
edit Non — le candidat reste révisable
reject Non
link Non — 422 s'il n'existe aucune correspondance
accept Oui — identifiant canonique renvoyé par le serveur

#3. Diagrammes de composants

#3.1 Vue générale des composants et de leurs interfaces

Aucun diagramme à afficher

Diagramme 19 — flowchart

Interface fournie Composant fournisseur Consommateurs réels
Routage et réécriture de scope Passerelle API Tous les portails
Entité projet et objets de spécification Service de spécification Rétro-ingénierie, artefacts, ingestion, portail
Vérification de référence de spécification Service de spécification Service d'artefacts, avant toute persistance
Dispatch gouverné de prompt Orchestration de prompts Artefacts, ingestion
Résolution de bundle d'agent Registre d'extensions Orchestrateur, cœur agentique
Droits du plan Service utilisateurs Registre d'extensions
Journal d'audit Service d'audit Ingestion, rétro-ingénierie, déploiement, portail d'administration
Garde de crédit Service de facturation et d'usage Copilote, ingestion, apprentissage

#3.2 Vue des composants du portail client

Aucun diagramme à afficher

Diagramme 20 — flowchart

Contrainte d'architecture Conséquence assumée
Export statique, sans rendu serveur Les routes dynamiques passent par une sentinelle réécrite côté serveur ; l'identifiant réel est lu côté client après montage
Aucun intergiciel de requête Incompatible avec l'export statique
Variables d'environnement publiques Inlinées au moment de la construction : un changement exige une reconstruction
Politique de sécurité de contenu stricte Les origines d'API doivent être déclarées explicitement, sans caractère générique de sous-domaine côté serveur
Routes publiques exemptées Les préfixes /auth et /public échappent à la garde d'authentification

#4. Diagrammes de déploiement

#4.1 Topologie des trois environnements

Aucun diagramme à afficher

Diagramme 21 — flowchart

Environnement Portail client Portail administration API Statut
Développement dev.spectra.kyrieva.com dev.spectra.admin.kyrieva.com dev.api.spectra.kyrieva.com 🟢 En ligne
Qualification qa.spectra.kyrieva.com qa.spectra.admin.kyrieva.com spectra-api-qa.kyrieva.com 🟢 En ligne
Production spectra.kyrieva.com spectra.admin.kyrieva.com spectra-api.kyrieva.com 🟢 En ligne
Documentation kyspectradoc.kyrieva.com 🟡 En cours

Identité partagée. Les trois environnements s'appuient sur un serveur d'identité unique, un realm dédié, des clients publics en PKCE S256, sans secret côté navigateur.

#4.2 Anatomie d'un environnement applicatif

Aucun diagramme à afficher

Diagramme 22 — flowchart

Contrainte de plateforme Motif issu d'un incident réel
Deux répliques minimum Une réplique unique dont la sonde de vivacité dépend de la base oscille et provoque des erreurs 503 en cascade
Sonde de vivacité découplée de la base Séparer la vivacité du processus de la disponibilité des données
Politique de sortie explicite vers le serveur d'identité Sans elle, la passerelle redémarre en boucle sur un point de vérification injoignable, et le portail semble en défaut de partage de ressources entre origines
Politique de sortie dédiée pour le clonage de dépôts Le refus par défaut bloquait le clone depuis un dépôt public ; la règle est additive et exclut les plages privées
Remplacement avant création lorsque le cluster est saturé Une stratégie de mise à jour créant avant de supprimer bloque quand le cluster n'a plus de capacité
Espace de noms runner distinct Jamais l'espace de noms de l'application

#4.3 Chaîne de mise en ligne d'un produit client

Aucun diagramme à afficher

Diagramme 23 — flowchart

Cible de livraison Mécanisme réel Statut Environnement prouvé
Construction et publication d'image Constructeur sans démon en tâche, secret de registre éphémère 🟢 Livré Développement
Vérification du lien au registre Poignée de main réelle avec le registre 🟢 Livré Développement
Génération de pipeline d'intégration continue Quatre fournisseurs, avec commit réel dans un dépôt 🟢 Livré Développement
Déploiement Kubernetes gouverné Rollout avec séparation des devoirs et retour arrière 🟢 Livré Production
Produit servi sur sous-domaine avec TLS Espace de noms, service, entrée, certificat automatique 🟢 Livré Production
Publication d'un front statique vers un réseau de diffusion Tâche exécutant l'outil de publication 🟢 Livré Développement
Publication d'un front statique vers un stockage objet Téléversement et adresse signée 🟢 Livré Développement
Déploiement par ligne de commande nuage générique Chemin d'authentification et exécution réelle vérifiée 🟢 Livré Développement
Pilotes natifs de nuages publics Plan seul, réponse 501 explicite ⚪ Planifié
Échange de jetons de registre nuage Absent ⚪ Planifié
Provisionnement d'un fournisseur d'identité pour le produit client Droits d'administration insuffisants, vérifiés empiriquement 🔴 Bloqué

#5. Invariants structurels vérifiés

# Invariant Où il est garanti Statut
1 Aucun artefact sans au moins une référence de spécification Contrainte de base et vérification HTTP réelle avant persistance 🟢 Livré
2 Aucune promotion de candidat sans tâche de validation approuvée Déclencheur de base de données 🟢 Livré
3 Le relecteur diffère toujours du soumissionnaire Contrainte de base, garde applicative et blocage d'interface 🟢 Livré
4 Aucune colonne de secret dans les tables de bail et de session de rebond Structure de table, vérifiée par test 🟢 Livré
5 Une permission d'outil sans autorisation explicite vaut refus Valeur par défaut de colonne deny 🟢 Livré
6 Un événement d'activité est unique par exécution et numéro de séquence Contrainte d'unicité — c'est ce qui rend le flux rejouable 🟢 Livré
7 Une version d'artefact ou de document est immuable et unique Contrainte d'unicité et écriture en instantané 🟢 Livré
8 Un déploiement unique par exécution Contrôle applicatif et code d'erreur dédié 🟢 Livré
9 Six étapes exactement par exécution de déploiement, d'ordinal 0 à 5 Amorçage à la création et contraintes d'unicité 🟢 Livré
10 Étanchéité entre locataires par sécurité au niveau des lignes forcée Politiques de base sur un paramètre de session 🟢 Livré
11 Le plafond d'autonomie effectif ne dépasse jamais celui du plan Fonction de minimum, repli vers le bas en cas de dégradation 🟢 Livré
12 Aucune référence de stockage fabriquée en cas d'échec Statut de stockage explicite écrit en base 🟢 Livré

KySpectra — Plateforme agentique SDD/SDLC · par Kyrieva
Documentation : kyspectradoc.kyrieva.com · Dossier de lancement : Strategielancement/
Document interne de pré-lancement — version 1.0 du 2026-08-17. Les données marquées « [Gabarit : … ] » doivent être renseignées ou revalidées avant diffusion externe.