#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.