#Sommaire
| § | Section |
|---|---|
| 1 | Rôle de l'administrateur et périmètre du plan de contrôle |
| 2 | Accès, environnements, authentification et rôles |
| 3 | Les seize destinations du plan de contrôle, une par une |
| 4 | Procédures d'exploitation (runbooks) |
| 5 | Réglages globaux — inventaire exhaustif |
| 6 | Sécurité et conformité |
| 7 | Supervision quotidienne, hebdomadaire et mensuelle |
| 8 | Dépannage administrateur |
| 9 | Écarts connus et limites actuelles |
#1. Rôle de l'administrateur et périmètre du plan de contrôle
#1.1 Ce qu'est le portail d'administration
Le portail d'administration de KySpectra est un plan de contrôle. Il ne sert pas à produire du logiciel : il sert à gouverner la fabrique qui le produit. Vous y décidez qui existe, qui peut agir, dans quelles limites, avec quels modèles de langage, sous quelles politiques d'exécution, et vous y prouvez après coup que ces décisions ont bien été appliquées.
Techniquement, le portail est un site entièrement statique, rendu côté navigateur (frontend/admin-portal, Next.js 15.1.6, React 19, export statique). Il ne détient aucune donnée : chaque panneau interroge en direct un microservice du plan de contrôle et affiche la réponse réelle. Quand un service ne répond pas, l'interface affiche un état d'indisponibilité explicite — jamais une valeur de remplacement.
Cette règle est structurante et vous la retrouverez partout dans ce guide : l'interface ne fabrique jamais de donnée. Un compteur à zéro signifie zéro mesuré ; un tiret (—) signifie « non renseigné » ; un encadré « indisponible » signifie que la sonde a échoué. Aucune de ces trois situations n'est déguisée en succès.
#1.2 Ce qui distingue le portail d'administration du portail client
| Axe | Portail client (spectra.kyrieva.com) |
Portail d'administration (spectra.admin.kyrieva.com) |
|---|---|---|
| Objet | Produire : spécifier, concevoir, fabriquer, vérifier, livrer | Gouverner : autoriser, plafonner, tracer, arbitrer |
| Unité de travail | Le projet et son espace de travail (11 vues canoniques) | Le locataire, l'utilisateur, la politique, le budget |
| Utilisateur type | Analyste, développeur, chef de produit, testeur, architecte | Administrateur plateforme, opérateur plateforme, responsable conformité |
| Rôles | VIEWER, EDITOR, PUBLISHER, ADMIN, OWNER (échelle métier Keycloak) |
viewer, platform_operator, platform_admin (rôles plateforme, distincts) |
| Portée des données | Le locataire de l'utilisateur | Un locataire à la fois, sélectionné explicitement, plus quelques surfaces globales |
| Navigation | Espace de travail projet | 16 destinations réparties en 4 groupes |
| Nom affiché dans l'interface | SPECTRA (écart connu, voir §9) |
KySpectra (déjà conforme) |
Point de vocabulaire. Il n'existe pas de « portail business » distinct. C'est une persona à l'intérieur du portail client. Ne l'annoncez jamais comme une troisième application.
#1.3 Les quatre groupes de destinations
La barre latérale regroupe les seize destinations selon quatre intentions d'exploitation. L'ordre ci-dessous est celui du code (src/components/nav.tsx), et un test unitaire le verrouille : nav.test.ts affirme que la navigation expose exactement seize destinations, sans doublon.
| Groupe (libellé FR réel) | Destinations | Question à laquelle le groupe répond |
|---|---|---|
| Supervision | État système · Flotte d'agents | « Est-ce que ça tourne, et que font les agents en ce moment ? » |
| Locataires & accès | Locataires · Utilisateurs & RBAC · Gouvernance & SoD | « Qui existe, qui peut quoi, et qui a validé cet élargissement ? » |
| Coûts & conformité | Budgets & quotas · Audit & conformité | « Combien ça coûte, et puis-je le prouver à un auditeur ? » |
| Configuration plateforme | Feature-flags · Modèles & adaptateurs · Garde-fous & exécution · Registre · Agents IA · Workforce · Rôles IA · Démo · Configuration | « Comment la plateforme est-elle paramétrée, et qui a le droit de la changer ? » |
⚠️ La destination Workforce n'a pas de libellé traduit. Voir §3.13 et §9 : c'est un écart réel, visible à l'écran.
#1.4 Le contrat d'honnêteté du plan de contrôle
Sept comportements observables constituent le contrat que vous administrez. Ils ne sont pas des slogans : chacun se vérifie dans l'interface.
| Comportement | Où vous le voyez |
|---|---|
| Fonctionnalité non configurée ⇒ refus explicite, jamais un faux succès | Encadrés « non raccordé » sur Utilisateurs, Garde-fous, champs personnalisés |
| Refus par défaut | Garde-fous : « Sans règle allow correspondante, une action est refusée par défaut » |
| Séparation des devoirs | Gouvernance : le bouton d'approbation se bloque avant même l'appel serveur |
| Traçabilité opposable | Audit : vérification de la chaîne de hachage + rapport Loi 25 |
| Étanchéité entre locataires | Un identifiant de locataire en désaccord avec le jeton renvoie 404, pas 403 |
| Sobriété assumée | Budgets et fenêtres de quota, seuils d'alerte, plafonds de jetons |
| Bilingue de naissance | 841 clés de traduction, parité stricte FR/EN — aux deux exceptions documentées près |
#1.5 Vue d'ensemble du plan de contrôle
Aucun diagramme à afficher
Diagramme 1 — flowchart
#2. Accès, environnements, authentification et rôles
#2.1 Les trois environnements
| Environnement | Portail d'administration | Portail client | Passerelle API | Espace Kubernetes |
|---|---|---|---|---|
| Développement | https://dev.spectra.admin.kyrieva.com |
https://dev.spectra.kyrieva.com |
https://dev.api.spectra.kyrieva.com |
kyspectra-dev |
| Qualification | https://qa.spectra.admin.kyrieva.com |
https://qa.spectra.kyrieva.com |
https://spectra-api-qa.kyrieva.com |
kyspectra-qa |
| Production | https://spectra.admin.kyrieva.com |
https://spectra.kyrieva.com |
https://spectra-api.kyrieva.com |
kyspectra-prod |
Points d'attention par environnement :
- Développement — la résolution de noms externes depuis les conteneurs est défaillante ; certains parcours passant par le tunnel
dev-api.kyrieva.comne routent pas. Le cluster de développement est également à saturation : une mise à jour d'un service peut se bloquer si la stratégie de déploiement exige un conteneur supplémentaire avant d'en retirer un. Symptôme : la version en ligne ne change pas alors que le déploiement est « réussi ». - Qualification — environnement de répétition. Toute modification de politique, de garde-fou ou de drapeau doit y être répétée avant la production.
- Production — l'utilisateur final teste directement ici. Une modification de production n'est jamais « seulement un essai ».
#2.2 Les deux modes d'authentification
Le mode est choisi au moment de la construction du portail, par la variable NEXT_PUBLIC_AUTH_MODE. Il n'est pas modifiable depuis l'interface.
dev-headers (valeur par défaut) |
jwt |
|
|---|---|---|
| Écran de connexion | Aucun | Redirection Keycloak, flux Authorization Code + PKCE (S256) |
| Identité agissante | Auto-déclarée par l'opérateur sur la page Configuration | Dérivée du jeton signé (revendication sub) |
| Rôles plateforme | Auto-déclarés par cases à cocher | Dérivés des rôles client platform_operator / platform_admin du jeton |
| En-têtes émis | X-User-ID, X-Tenant-ID |
Authorization: Bearer … + X-User-ID, X-Tenant-ID conservés par compatibilité |
| Éditeur d'identité | Modifiable | Lecture seule — mention affichée : « Identité dérivée de la session Keycloak (jeton) — non modifiable ici. » |
| Posture de sécurité | Aucune preuve d'identité. Réservé au poste de développement. | Seul mode strict |
Implication de sécurité, à énoncer sans détour. En mode dev-headers, n'importe quel opérateur ayant accès à l'URL peut se déclarer administrateur plateforme en cochant une case. Le contrôle d'accès du portail devient purement décoratif ; seul le contrôle serveur subsiste, et celui-ci fait lui aussi de dev-headers sa valeur par défaut côté backend. Une exposition publique en mode dev-headers équivaut à une absence d'authentification.
Corollaire opérationnel : le mode du portail et le mode du backend doivent être identiques. Un portail construit en dev-headers pointé vers un backend en jwt provoque une avalanche de 401 que le navigateur présente souvent comme une erreur de partage de ressources entre origines. L'inverse — portail jwt, backend dev-headers — produit une connexion réussie suivie d'écrans vides, car le jeton n'est jamais lu comme autorité.
#2.3 Paramètres Keycloak du portail d'administration
| Paramètre | Valeur livrée | Rôle |
|---|---|---|
NEXT_PUBLIC_KEYCLOAK_URL |
https://keycloak.i2tdigital.com |
Serveur d'identité |
NEXT_PUBLIC_KEYCLOAK_REALM |
kyspectra |
Domaine d'identité dédié |
NEXT_PUBLIC_KEYCLOAK_CLIENT_ID |
kyspectra-admin-portal |
Client public PKCE, sans secret |
| URI de redirection | <origine>/auth/callback |
À déclarer sur le client Keycloak |
| Méthode de défi | S256 |
Flux implicite désactivé |
⚠️ Divergence documentée. La configuration partagée du backend décrit le domaine d'identité réellement exploité comme
ssoet qualifiekyspectrade domaine résiduel. Avant toute bascule enjwt, faites trancher ce point : un domaine d'identité erroné produit un échec de vérification de signature et un redémarrage en boucle de la passerelle.
#2.4 Les trois rôles plateforme
Les rôles plateforme sont distincts de l'échelle métier VIEWER → EDITOR → PUBLISHER → ADMIN → OWNER que vous attribuez aux utilisateurs d'un locataire. Ne les confondez jamais.
| Rôle plateforme | Libellé FR affiché | Portée |
|---|---|---|
viewer |
Lecteur | Lecture de tous les panneaux, aucune écriture |
platform_operator |
Opérateur plateforme | Exploitation quotidienne : budgets, drapeaux, interruption d'exécution, export d'audit |
platform_admin |
Administrateur plateforme | Toutes les écritures structurantes : locataires, utilisateurs, RBAC, modèles, politiques, registre, agents, démo |
#2.5 La matrice des seize capacités
Chaque bouton d'écriture du portail est rattaché à une capacité sémantique. La matrice ci-dessous est celle du code (src/lib/rbac.ts), sans interprétation.
| # | Capacité | Lecteur | Opérateur | Administrateur | Effet gardé |
|---|---|---|---|---|---|
| 1 | config:read |
✅ | ✅ | ✅ | Lire n'importe quel panneau du plan de contrôle |
| 2 | tenants:manage |
❌ | ❌ | ✅ | Créer / gérer un locataire |
| 3 | users:manage |
❌ | ❌ | ✅ | Créer, modifier, supprimer un utilisateur ; poser un rôle Keycloak |
| 4 | rbac:edit |
❌ | ❌ | ✅ | Créer / révoquer une dérogation de permission |
| 5 | secret_access:widen |
❌ | ✅ | ✅ | Proposer un élargissement d'accès à un justificatif |
| 6 | secret_access:approve |
❌ | ❌ | ✅ | Approuver l'élargissement d'un pair (second contrôle) |
| 7 | vault:manage |
❌ | ❌ | ✅ | Gérer les liaisons de chemin de coffre |
| 8 | budgets:manage |
❌ | ✅ | ✅ | Créer / modifier / supprimer un budget |
| 9 | fleet:interrupt |
❌ | ✅ | ✅ | Interrompre une exécution d'agent en cours |
| 10 | flags:manage |
❌ | ✅ | ✅ | Créer, activer, désactiver, supprimer un drapeau |
| 11 | models:manage |
❌ | ❌ | ✅ | Configurations de modèle et d'adaptateur |
| 12 | policies:manage |
❌ | ❌ | ✅ | Garde-fous et politiques d'exécution |
| 13 | registry:manage |
❌ | ❌ | ✅ | Rédiger / enregistrer / révoquer une capacité globale |
| 14 | agents:manage |
❌ | ❌ | ✅ | Activer/désactiver un agent ; mettre en pause un membre du personnel virtuel |
| 15 | demo:manage |
❌ | ❌ | ✅ | Provisionner, réinitialiser, supprimer le locataire de démonstration |
| 16 | audit:export |
❌ | ✅ | ✅ | Générer un rapport de conformité Loi 25 |
Comment la garde se manifeste à l'écran. Un bouton dont la capacité n'est pas accordée n'est pas caché : il est désactivé, et son infobulle affiche l'un des deux messages suivants.
Requiert le rôle Administrateur plateforme.Requiert le rôle Opérateur ou Administrateur plateforme.
Ce choix est délibéré : l'opérateur voit ce qui existe et comprend pourquoi il ne peut pas l'exécuter. Le serveur reste l'autorité. Le blocage visuel n'est qu'une politesse ; il n'a jamais valeur de contrôle de sécurité.
#2.6 Choisir le locataire actif
Presque toutes les destinations sont portées par un locataire. Sans locataire sélectionné, l'écran affiche un garde-fou plutôt que des données :
Aucun locataire sélectionné — « Renseignez l'identifiant (UUID) du locataire à administrer via le sélecteur en haut à droite. En développement, l'authentification s'effectue via l'en-tête X-Tenant-ID. »
Procédure :
- Repérez le sélecteur Locataire (tenant) dans la barre supérieure, à droite.
- Collez l'identifiant du locataire au format UUID.
- La sélection est persistée localement sous la clé
spx-admin-tenant— elle survit au rechargement de la page, pas au changement de navigateur ou de poste. - Alternative : ouvrez Locataires, repérez la ligne voulue et cliquez Sélectionner. La ligne du locataire courant affiche « Ce locataire est le locataire courant. » au lieu du bouton.
Le client d'appel refuse localement toute requête portée sans locataire, avec le code 428 tenant_required et le message « Aucun locataire sélectionné. ». La requête n'est pas envoyée : c'est un garde local, pas un échec réseau.
Trois surfaces échappent à cette règle :
| Surface | Comportement |
|---|---|
| Registre | S'exécute toujours au nom du locataire plateforme. Le sélecteur de locataire n'a aucun effet sur cette page. |
| Rôles IA | Idem : catalogue global, portée plateforme. |
| Démo | Toujours épinglée sur le locataire de démonstration réservé (d3300000-0000-4000-8000-000000000001 par défaut). |
#2.7 L'identité agissante et le garde 428
Les actions de gouvernance exigent un acteur nommé. Si vous tentez une décision sans identité agissante définie, le client refuse localement avec 428 actor_required :
« Aucune identité Platform-Admin définie. Renseignez l'identifiant de l'administrateur agissant (X-User-ID) — une action de gouvernance doit être attribuable (séparation des tâches). »
En mode jwt, cette identité provient du jeton et le problème ne se pose pas. En mode dev-headers, vous devez la saisir sur la page Configuration.
#2.8 Deux routes vers les services : passerelle ou direct
Le portail sait joindre chaque service de deux façons. La règle de résolution est stricte et lisible sur la page Configuration.
| Priorité | Condition | Route retenue |
|---|---|---|
| 1 | Une variable dédiée au service est renseignée | Direct vers cette origine, chemins natifs /api/v1/… |
| 2 | NEXT_PUBLIC_API_BASE est renseignée |
Passerelle ; un segment de portée est injecté (/api/v1/<portée>/…) |
| 3 | Rien n'est renseigné | Port local figé du service, en direct |
La colonne URL cible de la page Configuration affiche la cible complète et une pastille passerelle ou direct. C'est votre premier réflexe de diagnostic quand un panneau reste vide.
Les segments de portée injectés, tels que définis dans le code :
| Service logique | Port local figé | Segment de portée | Nom en amont |
|---|---|---|---|
user |
4101 | (aucun — service à plat) | user-service |
platformConfig |
4112 | platform-config |
platform-config-service |
audit |
4113 | audit-compliance |
audit-compliance-service |
observability |
4114 | observability |
observability-board-service |
billing |
4115 | billing-usage |
billing-usage-service |
extensionRegistry |
4116 | extension-registry |
extension-registry-service |
promptOrchestration |
4123 | prompt-orchestration |
prompt-orchestration-service |
aiOrchestrator |
4106 | (aucun — service à plat) | ai-orchestrator |
agentRuntime |
4119 | agent-runtime |
agent-runtime-service |
demo |
4132 | demo |
demo-orchestrator-service |
Le tableau de santé de la page État système ne surveille que neuf de ces dix services : demo en est exclu, puisqu'il ne fait pas partie du chemin critique d'exploitation. Un test unitaire (config.test.ts) verrouille ce nombre.
#3. Les seize destinations du plan de contrôle, une par une
Chaque fiche suit le même gabarit : objet, ce que vous voyez, actions pas à pas, contraintes réelles, effets de bord, permissions, erreurs, écarts.
#3.1 État système — /overview
Libellé de navigation : État système · Groupe : Supervision · Sous-titre : « Santé des services et magasins polyglottes, agrégats du locataire sélectionné »
#Objet
Répondre en dix secondes à deux questions : les services répondent-ils ? et où en est le locataire sélectionné ?
#Ce que vous voyez
| Panneau | Contenu réel |
|---|---|
| Santé des services & magasins polyglottes | Une ligne par service (9), colonnes Service · Base · État · Latence |
| Tableau de bord (locataire) | Progression, Défauts ouverts, Incidents ouverts, Défauts échappés, Brèches SLO récentes, Agents actifs |
| Défauts ouverts par sévérité | Répartition réelle par sévérité, plus les totaux incidents / échappés / brèches |
| KPI qualité, coût & spécification | Derniers panneaux d'indicateurs livrés par le service d'observabilité |
| Catalogue KPI intégré | Définitions livrées en configuration-comme-code, filtrable et virtualisé |
| Brèches SLO émises | Liste des dépassements enregistrés |
États possibles d'une ligne de santé : En service · Hors service · Sonde indisponible · Sonde…. Le bandeau résume : « Tout est opérationnel », « n hors service », « n sonde indisponible ».
La distinction entre « Hors service » et « Sonde indisponible » est essentielle. En mode passerelle, le portail interroge un agrégat de santé unique. Cet agrégat répond 200 quand tout va bien et 503 quand un service est en panne — et les deux réponses portent le détail par service. Tout autre code (404, 502…) signifie que la sonde elle-même ne fonctionne pas ; le portail affiche alors « Sondes de santé indisponibles » plutôt que de peindre tous les services en rouge.
Le texte d'aide du panneau précise la nature de la sonde : chaque point de santé exécute un vrai SELECT 1 sur son magasin PostgreSQL, et sur Redis lorsque configuré. Un état vert reflète une connectivité réelle.
#Actions
Cette destination est en lecture seule. Aucune capacité d'écriture n'y est rattachée.
- Sélectionnez le locataire à observer.
- Laissez la page ouverte : le rafraîchissement est automatique (santé toutes les 15 secondes).
- Cliquez Réessayer sur un encadré d'erreur pour relancer la sonde concernée.
- Filtrez le catalogue d'indicateurs par famille (Qualité / Coût / Spécification) ou par nom.
#Permissions
config:read — accordée aux trois rôles.
#Écarts honnêtes
| Écart | Manifestation |
|---|---|
Latence toujours à 0 ms en mode passerelle |
L'agrégat de santé n'expose pas la latence par service en amont. La colonne existe mais n'est renseignée qu'en routage direct. |
| Flux d'agents non connecté | Message affiché : « Aucun flux d'agents connecté (état honnête, non fabriqué). » |
| Indicateur non mesuré | Affiche n/d — jamais une valeur inventée. |
| Sondes toutes rouges | Message affiché : « Sondes de santé indisponibles — Aucun service n'a répondu à /health. Vérifiez les URL de service et la politique CORS des services. » |
#3.2 Flotte d'agents — /fleet
Libellé : Flotte d'agents · Groupe : Supervision · Sous-titre : « Supervision de la flotte d'agents et interruption »
#Objet
Voir ce que les agents exécutent en ce moment pour le locataire sélectionné, inspecter une exécution, et l'arrêter si nécessaire.
#Ce que vous voyez
- Flotte en un coup d'œil — total des exécutions, nombre d'actives, répartition par statut sous forme d'anneau.
- Graphe d'exécution — chaque voie est une exécution : la tête violette est l'agent, suivie des étapes de son plan. Les étapes exécutées sont vertes, l'étape courante porte le statut de l'exécution, les étapes à venir restent neutres.
- Runs d'agents — tableau : Agent · Statut · Exécuteur · Étape · Mis à jour · Créé · Actions.
- Détail du run — tiroir latéral : Projet, Budget d'étapes, Démarré, Erreur du run.
- Activité en direct — flux d'événements récents.
Statuts affichés : En file · En cours · Suspendu · Terminé · Échoué.
Le graphe se pilote au clavier : flèches pour naviguer entre les nœuds, Entrée pour inspecter, plus/moins pour zoomer, 0 pour ajuster à la vue.
#Action pas à pas — interrompre une exécution
- Sélectionnez le locataire concerné.
- Repérez la ligne dont le statut est En cours ou En file.
- Cliquez Interrompre.
- Lisez la confirmation : « Interrompre le run ? — Le run passera à l'état terminal « failed ». Cette action est irréversible. »
- Confirmez. Le message « Run interrompu. » s'affiche et la liste se rafraîchit.
Effets de bord. L'exécution passe à un état terminal. Il n'y a pas de reprise : la seule suite possible est une nouvelle exécution. L'action porte l'identité agissante — elle est donc attribuable et journalisée.
#Contraintes
| Élément | Contrainte réelle |
|---|---|
| Volume chargé | 200 exécutions maximum par requête |
| Rafraîchissement de l'activité | Sondage toutes les 10 secondes |
| Portée | Un locataire à la fois, strictement |
| Identité | Requise (withActor) — sinon refus local 428 |
#Permissions
fleet:interrupt — opérateur et administrateur plateforme.
#Écarts honnêtes signalés dans l'interface
| Titre affiché | Contenu |
|---|---|
| Agrégation cross-tenant — écart backend | Le service d'exécution isole les exécutions par locataire. Il n'existe pas de point d'entrée agrégeant toutes les exécutions actives de tous les locataires ; la flotte se supervise donc locataire par locataire via le sélecteur. |
| Activité en direct (SSE) | Le titre et l'aide mentionnent un flux poussé par le serveur. En réalité, l'implémentation livrée est un sondage du point /activity/snapshot toutes les 10 secondes. Deux raisons vérifiées : un flux d'événements navigateur ne peut pas porter d'en-tête d'autorisation (donc 401 systématique en mode jwt), et la passerelle met la réponse en tampon avant de la relayer, ce qui interdit un flux sans fin. |
| Graphe | Seule la séquence des étapes d'une exécution est modélisée. Les dépendances entre exécutions ou entre locataires ne le sont pas — le backend ne les expose pas. |
#3.3 Locataires — /tenants
Libellé : Locataires · Groupe : Locataires & accès · Sous-titre : « Registre des locataires, plans et sélection »
#Objet
Créer un locataire, changer de locataire actif, consulter le registre des organisations, le catalogue de plans, et éditer les champs personnalisés de l'organisation.
#Ce que vous voyez
| Panneau | Colonnes / contenu |
|---|---|
| Locataire courant | Sélecteur d'identifiant |
| Registre des locataires | Nom · Type · Membres · Vérifié · Actif · Actions |
| Champs personnalisés de l'organisation | Attributs typés + données libres |
| Catalogue de plans | Plan · Code · Mensuel · Annuel · Actif |
#Action pas à pas — créer un locataire
- Ouvrez Locataires.
- Cliquez Nouveau locataire (en haut à droite du registre).
- Renseignez les trois champs :
| Champ | Libellé FR | Contrainte réelle | Exemple |
|---|---|---|---|
| Slug | Slug | Commence et finit par une minuscule ou un chiffre, tirets autorisés au milieu, 3 à 40 caractères. Aide affichée : « minuscules, chiffres et tirets (3–40 car.) ». | acme-corp |
| Nom affiché | Nom affiché | Non vide après suppression des espaces | Acme Corporation |
| Plan | Plan | Champ texte libre, pré-rempli à starter |
voir avertissement ci-dessous |
- Le bouton de validation reste inactif tant que le slug est invalide ou que le nom est vide.
- Confirmez. Message : « Locataire créé. »
- Le registre se rafraîchit. Cliquez Sélectionner sur la nouvelle ligne pour en faire le locataire actif.
⚠️ Piège réel. Le champ Plan est un champ texte libre pré-rempli avec la valeur
starter. Or aucun plan de codestartern'existe dans le catalogue exploité : les codes réellement présents sontgratuit,teametenterprise. Écrasez systématiquement la valeur par défaut par un code existant, sous peine de créer un locataire rattaché à un plan fantôme. Voir §9.
#Effets de bord
- Le slug est normalisé en minuscules avant envoi.
- Une clé d'idempotence accompagne la création : un double clic ne crée pas deux locataires.
- Le locataire créé n'a aucun utilisateur. Enchaînez immédiatement sur le runbook R1 (§4.1).
#Permissions
tenants:manage — administrateur plateforme uniquement.
#Écarts honnêtes signalés dans l'interface
Suspension de locataire — écart backend : le service utilisateur n'expose aucun point d'entrée de suspension d'organisation. Le schéma de mise à jour ne comporte pas de champ d'activité et il n'existe pas de route de suspension. L'état Actif / Suspendu est donc affiché en lecture seule. Pour retirer un accès en urgence, utilisez le runbook R3 (§4.3), qui agit sur les utilisateurs et non sur le locataire.
Autres écarts :
| Écart | Détail |
|---|---|
| Catalogue de plans | Le point d'entrée qui alimente ce tableau est public et sans authentification, et il n'applique aucun filtre de publication ni d'activité : vous voyez tous les plans en base, y compris les inactifs. |
| Colonne Mensuel / Annuel | Les montants sont stockés en cents et convertis à l'affichage. Devise unique en base : CAD. |
| Champs personnalisés | Si la variable de base d'API des champs personnalisés n'est pas renseignée, le panneau affiche « Champs personnalisés non raccordés » — état honnête, jamais de données inventées. |
| Rattachement plan ↔ locataire | Le texte d'aide le dit : « Le rattachement d'un locataire à un plan relève de la facturation. » Ce n'est pas administrable depuis ce tableau. |
#3.4 Utilisateurs & RBAC — /users
Libellé : Utilisateurs & RBAC · Groupe : Locataires & accès · Sous-titre : « Utilisateurs et éditeur de matrice RBAC »
#Objet
Gérer le cycle de vie des comptes du locataire, poser et retirer les rôles d'identité, inspecter les permissions effectives et poser des dérogations ciblées.
#Ce que vous voyez
| Panneau | Contenu |
|---|---|
| Utilisateurs | Courriel · Nom · Statut · Rôles · Actions |
| Permissions effectives & dérogations | Sélecteur d'utilisateur, matrice des permissions résolues côté serveur, liste des dérogations |
| Matrice RBAC (rôles → permissions) | Référence statique des trois rôles plateforme × huit capacités représentatives |
Statuts d'utilisateur : En attente · Actif · Inactif · Suspendu · Supprimé.
Les huit capacités affichées comme colonnes de la matrice de référence sont : config:read, budgets:manage, flags:manage, fleet:interrupt, rbac:edit, models:manage, policies:manage, secret_access:approve.
#Action pas à pas — créer un utilisateur
- Vérifiez le locataire actif : l'utilisateur y sera rattaché.
- Cliquez Nouvel utilisateur.
- Renseignez :
| Champ | Contrainte réelle |
|---|---|
| Courriel | Format courriel valide (une arobase, un point dans le domaine, aucun espace) |
| Mot de passe | Au moins 8 caractères, avec majuscule, minuscule et chiffre — validation locale avant envoi |
| Prénom | Facultatif |
| Nom | Facultatif |
- Validez. Message : « Utilisateur créé. »
Le compte est créé sans aucun rôle. Sans rôle, l'utilisateur ne peut rien faire. Enchaînez sur l'attribution.
#Action pas à pas — attribuer ou retirer un rôle
- Sur la ligne de l'utilisateur, cliquez Modifier.
- Le bloc Rôles (Keycloak) liste les rôles en place. Aide affichée : « Ajouter/retirer un rôle applique immédiatement le mapping de rôle Keycloak. »
- Pour ajouter : choisissez un rôle dans la liste déroulante puis cliquez Ajouter. Rôles proposés, dans l'ordre :
VIEWER,EDITOR,PUBLISHER,ADMIN,OWNER. Le bouton est inactif si le rôle est déjà présent. Message : « Rôle ajouté. » - Pour retirer : cliquez la croix
×sur la pastille du rôle. Message : « Rôle retiré. »
Effet immédiat et sans confirmation. Le retrait d'un rôle n'ouvre aucune boîte de dialogue. L'effet est instantané côté serveur d'identité. Un utilisateur sans rôle affiche « Aucun rôle ».
Signification des rôles métier, telle que définie par le modèle RBAC partagé :
| Rôle | Rang | Permissions accordées |
|---|---|---|
VIEWER |
0 | read:* |
EDITOR |
1 | read:* + écriture sur un sous-ensemble de ressources |
PUBLISHER |
2 | read:*, write:*, publish:* |
ADMIN |
3 | read:*, write:*, publish:*, manage:users |
OWNER |
4 | Accès complet au locataire |
Les rôles sont composites côté serveur d'identité : OWNER implique ADMIN, qui implique PUBLISHER, et ainsi de suite. Vous n'avez donc pas à empiler les rôles ; attribuez le plus élevé nécessaire, et un seul.
#Action pas à pas — modifier ou supprimer un utilisateur
- Modifier ouvre un formulaire : Courriel (revalidé), Statut (liste des cinq états), Rôles. Message : « Utilisateur mis à jour. »
- Supprimer ouvre une confirmation : « Supprimer l'utilisateur ? — Cette action supprime définitivement l'utilisateur. Elle est irréversible. » Le courriel est rappelé dans la boîte. Message : « Utilisateur supprimé. »
Choisissez la désactivation plutôt que la suppression chaque fois que la traçabilité compte. Passer le statut à Inactif ou Suspendu coupe l'accès en conservant l'historique.
#Action pas à pas — poser une dérogation de permission
- Sur la ligne de l'utilisateur, cliquez Permissions — cela le sélectionne dans le panneau du dessous.
- Lisez d'abord Permissions effectives : c'est la matrice résolue par le serveur (rôles + dérogations). La ligne « Rôles appliqués » indique les rôles pris en compte.
- Cliquez Nouvelle dérogation (inactif tant qu'aucun utilisateur n'est sélectionné).
- Renseignez :
| Champ | Contrainte |
|---|---|
| Clé de permission | Si les permissions effectives ont été chargées, une liste déroulante propose les clés réelles ; sinon, saisie libre non vide |
| Effet | Autoriser ou Refuser |
| Priorité | Entier, 0 par défaut |
| Motif | Texte libre, facultatif mais fortement recommandé — c'est la seule trace d'intention |
- Validez. Message : « Dérogation créée. »
#Action pas à pas — révoquer une dérogation
- Repérez la ligne dans Dérogations de l'utilisateur.
- Cliquez Révoquer. Confirmation : « Révoquer la dérogation ? — Cette action révoque définitivement la dérogation. Elle est irréversible. »
- Message : « Dérogation révoquée. »
Portée verrouillée. Une dérogation de portée Locataire ne peut pas être révoquée depuis cet écran : le bouton est désactivé et affiche « Dérogation à l'échelle du locataire — révocation impossible ici. » Seules les dérogations de portée Utilisateur sont révocables ici.
#Permissions
| Action | Capacité requise |
|---|---|
| Créer / modifier / supprimer un utilisateur | users:manage (administrateur) |
| Ajouter / retirer un rôle | users:manage (administrateur) |
| Créer / révoquer une dérogation | rbac:edit (administrateur) |
| Lire la matrice de référence | config:read (tous) |
#Écarts honnêtes signalés dans l'interface
Moteur de permissions non raccordé : « Le moteur de permissions (/permissions) n'est pas raccordé dans cet environnement. La matrice de rôles ci-dessous reste la référence ; les permissions effectives par utilisateur seront disponibles une fois le service raccordé. »
Cet encadré s'affiche quand le point d'entrée répond 404 ou 501. Conséquence pratique : dans un tel environnement, les permissions effectives et les dérogations sont indisponibles, et seule l'attribution de rôles fonctionne. Le portail distingue proprement ce cas d'une vraie panne : une erreur réseau ou un 5xx affichent un encadré d'erreur avec bouton Réessayer, pas ce message.
#3.5 Gouvernance & SoD — /governance
Libellé : Gouvernance & SoD · Groupe : Locataires & accès · Sous-titre : « Contrôle double (SoD), politiques d'accès Vault et audit des accès aux justificatifs »
#Objet
Exercer le second contrôle sur les élargissements d'accès sensibles, consulter les chemins de coffre référencés, et auditer les accès aux justificatifs.
#Ce que vous voyez
| Panneau | Contenu |
|---|---|
| Revue d'extension — contrôle double (SoD) | Formulaire de chargement + tableau des revues |
| Politiques d'accès Vault (chemins de justificatifs) | Configuration · Type · Chemin Vault |
| Audit des accès aux justificatifs (appels d'outils) | Horodatage · Agent · Type · Verdict politique · Issue · Coût (USD) · Empreinte d'arguments |
#Action pas à pas — approuver ou rejeter une revue
- Vérifiez que votre identité agissante est définie. Sinon un encadré s'affiche : « Identité requise — Définissez l'identité Platform-Admin (X-User-ID) pour agir sur une revue. »
- Choisissez le Type de sujet : Version de skill ou Serveur MCP.
- Collez l'Identifiant du sujet (UUID). Le format UUID canonique est exigé ; le bouton Charger les revues reste inactif sinon.
- Cliquez Charger les revues.
- Lisez le tableau : Soumis par · Revu par · Classe de risque · Verdict · Actions.
- Cliquez Approuver (2ᵉ contrôle) ou Rejeter.
Ce que fait la séparation des devoirs, concrètement. Avant tout appel réseau, le portail vérifie trois conditions et bloque le bouton si l'une échoue :
| Motif de blocage | Cause | Message affiché |
|---|---|---|
no_identity |
Aucune identité agissante | « Identité requise — Définissez l'identité Platform-Admin (X-User-ID) pour agir sur une revue. » |
not_admin |
Rôle insuffisant | « L'approbation d'un élargissement d'accès requiert le rôle Administrateur plateforme. » |
self_approval |
Vous êtes le soumetteur | « Auto-approbation interdite — Vous êtes le soumetteur de cette revue. La séparation des tâches interdit d'approuver sa propre demande — une seconde personne (Administrateur plateforme) est requise. » |
Le rejet, lui, reste possible même si vous êtes le soumetteur : on peut toujours retirer sa propre demande. Seule l'approbation est verrouillée par l'anti-auto-approbation.
Le serveur reste autoritatif. Même si le blocage visuel était contourné, la base de données refuse l'auto-approbation avec un conflit typé
sod/self-approval-forbidden. Le blocage de l'interface évite un aller-retour inutile ; il ne constitue pas la sécurité.
Détail d'implémentation à connaître. Lorsque la classe de risque du sujet est élevée, le portail transmet automatiquement l'indicateur « revue de sécurité effectuée » avec votre décision. En approuvant un sujet à haut risque, vous attestez donc avoir mené la revue de sécurité correspondante. Traitez ce clic comme une signature.
#Effets de bord
- La décision porte votre identité et devient définitive.
- Une approbation débloque les liaisons associées à la capacité ; un rejet les laisse inertes.
- Une capacité non approuvée ne peut pas être liée à un rôle IA (voir §3.14).
#Permissions
secret_access:approve — administrateur plateforme uniquement. La proposition d'élargissement relève de secret_access:widen, ouverte aussi à l'opérateur : c'est la mécanique même du double contrôle.
#Écarts honnêtes signalés dans l'interface
File de revues à l'échelle plateforme — écart backend : le registre d'extensions liste les revues par sujet (type + identifiant), et non une file transverse des revues en attente. Une file d'approbations unifiée nécessiterait un point d'entrée dédié. Conséquence : vous devez connaître à l'avance l'identifiant du sujet à traiter. En pratique, il vient du message de la personne qui vous sollicite ou de la page Registre.
Autres points :
| Point | Réalité |
|---|---|
| Panneau Vault | Lecture seule. Il est dérivé des configurations de modèle et d'adaptateur : il n'affiche que les chemins déjà saisis ailleurs. Seuls des chemins sont stockés — jamais un secret. Sans configuration portant de chemin, le panneau affiche « Aucune liaison de chemin Vault. » |
| Audit des appels d'outils | Seules les empreintes d'arguments sont exposées, jamais les arguments bruts. C'est une exigence de protection des renseignements personnels. |
#3.6 Budgets & quotas — /budgets
Libellé : Budgets & quotas · Groupe : Coûts & conformité · Sous-titre : « Budgets de dépense et fenêtres de quota du locataire »
#Objet
Poser un plafond de dépense sur une portée, suivre la consommation réelle, et lire les fenêtres de quota mesurées en amont.
#Ce que vous voyez
Budgets — une carte par budget, avec : la portée en police à chasse fixe, une pastille d'état, une jauge, puis trois valeurs — Dépensé, Restant, % utilisé.
États possibles et code couleur :
| État | Libellé FR | Pastille |
|---|---|---|
ok |
Sain | Vert |
warning |
Alerte | Ambre |
critical |
Critique | Rouge |
exhausted |
Épuisé | Rouge |
Fenêtres de quota — tableau : Portée · Modèle de limite · % consommé · Réinitialisation. Panneau en lecture seule : les fenêtres sont produites par la mesure en amont, pas administrées ici.
#Action pas à pas — créer un budget
- Sélectionnez le locataire.
- Cliquez Nouveau budget.
- Renseignez :
| Champ | Contrainte réelle | Défaut |
|---|---|---|
| Portée | Texte libre non vide. Aide affichée : « p.ex. « tenant », « project:FB », « credential:abc ». » | vide |
| Limite (USD) | Nombre fini ≥ 0, pas de 0,01 | vide |
| Seuil d'alerte (%) | Entier 0–100 | 80 |
| Seuil critique (%) | Entier 0–100 | 95 |
- Validez. Message : « Budget créé. »
Convention de portée. La portée est une chaîne libre : rien ne l'empêche d'être mal orthographiée. Une portée
projet:FBau lieu deproject:FBcrée un budget qui ne sera jamais consommé. Adoptez une convention écrite et tenez-vous-y.
#Action pas à pas — modifier un budget
- Cliquez Modifier sur la carte.
- Ajustez Limite, Seuil d'alerte, Seuil critique. La portée n'est pas modifiable — pour la changer, supprimez et recréez.
- Validez. Message : « Budget mis à jour. »
#Action pas à pas — supprimer un budget
- Cliquez Supprimer.
- Confirmation : « Supprimer le budget ? — Cette action supprime définitivement le budget. L'historique de consommation est conservé (le lien est dissocié). Elle est irréversible. »
- Message : « Budget supprimé. »
Ce point mérite d'être souligné : supprimer un budget ne détruit pas l'historique de dépense. Vous perdez le plafond, pas la trace.
#Permissions
budgets:manage — opérateur et administrateur plateforme.
#Points d'attention
| Point | Détail |
|---|---|
| Devise d'affichage | Les montants de budget sont formatés en USD (format canadien-français), alors que le catalogue de plans est en CAD. Les deux grandeurs ne se comparent pas directement. |
| Sans service de facturation joignable | Le reçu d'usage porte metered=false et un motif — jamais un montant inventé. |
| Seuils par défaut | Si vous laissez un champ de seuil vide ou illisible, les valeurs 80 et 95 s'appliquent silencieusement. |
| Fenêtres vides | Message : « Aucune fenêtre de quota pour ce locataire. » Ce n'est pas une erreur. |
#3.7 Audit & conformité — /audit
Libellé : Audit & conformité · Groupe : Coûts & conformité · Sous-titre : « Recherche du journal d'audit et export de conformité Loi 25 »
#Objet
Retrouver une action passée, prouver que le journal n'a pas été altéré, et produire un rapport de conformité sur une période.
#Ce que vous voyez
| Panneau | Contenu |
|---|---|
| Recherche du journal d'audit | Quatre filtres, un bouton de vérification de chaîne, un tableau |
| Rapports de conformité Loi 25 | Sélecteur de période, bouton de génération, liste des rapports produits |
Colonnes du journal : Horodatage · Acteur · Action · Ressource · Hash (préfixe). Le préfixe de hachage affiché correspond aux douze premiers caractères de l'empreinte de l'entrée.
#Action pas à pas — rechercher dans le journal
- Sélectionnez le locataire.
- Renseignez tout ou partie des quatre filtres : Acteur, Action, Ressource, Recherche libre.
- Cliquez Rechercher.
- Le compteur affiche « n entrée(s) ». Sans résultat : « Aucune entrée d'audit pour ce filtre. »
Les filtres sont appliqués au clic, pas à la frappe : modifier un champ sans cliquer Rechercher ne change rien à l'affichage.
#Action pas à pas — vérifier l'intégrité de la chaîne
- Cliquez Vérifier la chaîne (en haut à droite du panneau de recherche).
- Le service recalcule les empreintes et compare.
- Deux issues possibles :
| Issue | Encadré affiché |
|---|---|
| Chaîne saine | « Chaîne d'audit valide — n entrée(s) recalculées et vérifiées : aucune altération détectée. » |
| Rupture détectée | « Chaîne d'audit compromise — Rupture détectée à l'entrée #id (motif : raison, position index). » |
Que faire d'une chaîne compromise. Ce n'est pas un incident d'interface, c'est un incident de sécurité. Consignez l'identifiant, le motif et la position affichés, n'effectuez aucune écriture supplémentaire sur le locataire concerné, et déclenchez la procédure de réponse à incident (voir le guide de durcissement, §6 du document
05-guide-administrateur-securite.md).
#Action pas à pas — générer un rapport Loi 25
- Renseignez Période — début et Période — fin (sélecteurs de date).
- Cliquez Générer le rapport. Le bouton reste inactif tant qu'une des deux dates manque.
- Message : « Rapport de conformité généré. »
- Le rapport apparaît dans le tableau : Période · Événements · Chaîne vérifiée (Oui/Non) · Généré par · Créé le.
Le texte d'aide est explicite sur la méthode : « Rapport Loi 25 par agrégation réelle du journal (accès / consentement / brèche + vérification de la chaîne). Une période sans données produit un rapport valide horodaté (non une erreur). »
C'est important en audit : l'absence d'événement est une information, et elle est attestée.
#Action pas à pas — exporter un rapport
- Sur la ligne du rapport, cliquez Exporter (JSON).
- Le fichier est produit localement par le navigateur, nommé
loi25-report-<identifiant>.json.
Cet export ne passe par aucun serveur : il sérialise l'objet déjà chargé dans la page. Il n'y a donc aucune trace serveur de l'export lui-même. Si votre politique interne exige de tracer les extractions, consignez-les manuellement.
#Permissions
| Action | Capacité |
|---|---|
| Rechercher, vérifier la chaîne | config:read |
| Générer un rapport | audit:export (opérateur et administrateur) |
| Exporter en JSON | Aucune garde spécifique — le bouton n'est pas conditionné |
#Points d'attention
- Les dates saisies sont converties en horodatage complet avant envoi ; attention aux effets de bord de fuseau sur les bornes de période.
- Le journal est append-only et chaîné par hachage : aucune entrée n'est modifiable depuis l'interface, par construction.
#3.8 Feature-flags — /flags
Libellé : Feature-flags · Groupe : Configuration plateforme · Sous-titre : « Feature-flags de la plateforme (évaluation déterministe par locataire) »
#Objet
Activer ou désactiver une fonctionnalité, globalement ou pour le seul locataire courant, avec un pourcentage de déploiement progressif.
#Ce que vous voyez
Tableau : Clé · Portée · Activé · Déploiement (%) · Description · Actions. Filtre de texte disponible sur la clé.
Le texte d'aide pose la règle : « Un flag global s'applique à toute la plateforme ; une dérogation de locataire ne concerne que le locataire courant. »
#Action pas à pas — créer un drapeau
- Cliquez Nouveau flag.
- Renseignez :
| Champ | Contrainte réelle | Défaut |
|---|---|---|
| Clé | Minuscules a-z, chiffres, ., _, - ; premier caractère alphanumérique ; 128 caractères maximum. Aide : « Minuscules a-z 0-9 . _ - , max 128. » |
vide |
| Portée | Global ou Locataire | Global |
| Déploiement (%) | Entier 0 à 100 | 0 |
| Description | Texte libre | vide |
- Validez.
Le drapeau est créé DÉSACTIVÉ. C'est délibéré et c'est la bonne posture : on crée, on relit, puis on active. Message : « Feature-flag créé. »
#Action pas à pas — activer, désactiver, ajuster
- Activer / Désactiver : bouton unique sur la ligne, dont le libellé bascule entre Activer et Désactiver. Effet immédiat, sans confirmation. Message : « Feature-flag mis à jour. »
- Modifier : ouvre un formulaire limité au Déploiement (%) et à la Description. Ni la clé ni la portée ne sont modifiables après création.
- Supprimer : confirmation « Supprimer le feature-flag ? — Cette action supprime définitivement le feature-flag. Elle est irréversible. » La clé est rappelée.
⚠️ Le bouton d'activation n'a pas de confirmation. Sur un drapeau de portée globale en production, un clic engage toute la plateforme. Traitez ce bouton avec la même prudence qu'un déploiement.
#Effets de bord
- L'évaluation est déterministe par locataire : à pourcentage constant, un même locataire obtient toujours la même réponse. Ce n'est pas un tirage aléatoire à chaque appel.
- Un drapeau à 0 % activé reste inerte pour tout le monde ; l'activation seule ne suffit pas.
- Certaines destinations dépendent d'un drapeau (Démo, Rôles IA). Voir §3.15 et §3.14.
#Permissions
flags:manage — opérateur et administrateur plateforme.
#Points d'attention
| Point | Détail |
|---|---|
| Liste vide | « Aucun feature-flag défini. » — état normal sur un environnement neuf |
| Drapeaux backend | Les drapeaux réellement implémentés côté services sont des variables d'environnement, pas des lignes de cette table. Créer ici une clé homonyme d'une variable backend n'a aucun effet sur ce service. Voir §5.3 et §9. |
#3.9 Modèles & adaptateurs — /models
Libellé : Modèles & adaptateurs · Groupe : Configuration plateforme · Sous-titre : « Configuration des modèles LLM et des adaptateurs d'assistant (chemins Vault uniquement) »
#Objet
Déclarer quels modèles de langage la plateforme peut utiliser, lequel est le modèle par défaut, et par quel adaptateur d'assistant on y accède.
#Ce que vous voyez
Configurations de modèle : Clé · Fournisseur · Modèle · Chemin Vault · Par défaut · Activé · Actions. Adaptateurs d'assistant : Clé · Assistant · Config modèle liée · Chemin Vault · Activé · Actions.
#Action pas à pas — créer une configuration de modèle
- Cliquez Nouvelle config modèle.
- Renseignez :
| Champ | Contrainte | Exemple d'aide affiché |
|---|---|---|
| Clé | Non vide | opus |
| Fournisseur | Non vide | anthropic |
| Identifiant modèle | Non vide | claude-opus-4 |
| Chemin Vault (secret/…) | Vide ou commençant par secret/. Aide : « Chemin KV Vault vers le justificatif — jamais le secret. Doit commencer par « secret/ ». » |
— |
| Modèle par défaut | Case à cocher | — |
- Validez. Message : « Configuration de modèle créée. »
Aucun secret n'est jamais saisi ici. Le champ attend un chemin dans le coffre. Le service résout la valeur au moment de l'appel. Si vous collez une clé d'API dans ce champ, vous venez de la persister en clair dans la configuration : traitez cela comme un incident et effectuez une rotation immédiate.
#Action pas à pas — changer le modèle par défaut
- Cliquez Modifier sur la configuration cible.
- Cochez Modèle par défaut.
- Vérifiez que Activé est coché — un modèle par défaut désactivé est un piège classique.
- Validez. Message : « Configuration de modèle mise à jour. »
- Rechargez la liste et vérifiez qu'une seule ligne porte la pastille « Par défaut ».
#Action pas à pas — créer un adaptateur
- Cliquez Nouvel adaptateur.
- Renseignez :
| Champ | Contrainte |
|---|---|
| Clé | Non vide (exemple d'aide : claude_code_headless) |
| Assistant | Liste fermée : claude_code · codex · cursor · api |
| Clé de config modèle liée (optionnel) | Texte libre — doit correspondre à une clé de modèle existante |
| Chemin Vault (secret/…) | Même règle que ci-dessus |
- Validez. Message : « Adaptateur créé. »
⚠️ Le champ Clé de config modèle liée est libre et non vérifié au moment de la saisie. Une faute de frappe produit un adaptateur pointant vers un modèle inexistant, sans erreur immédiate. Recopiez la clé depuis le tableau du dessus.
#Suppression
Les deux entités se suppriment avec une confirmation irréversible : « Cette action supprime définitivement la configuration de modèle / l'adaptateur. Elle est irréversible. »
#Permissions
models:manage — administrateur plateforme uniquement. Un opérateur voit tout et ne peut rien écrire.
#Effets de bord à connaître
- Les chemins de coffre saisis ici alimentent le panneau « Politiques d'accès Vault » de la page Gouvernance. C'est le seul endroit où l'on crée ces liaisons.
- Supprimer une configuration de modèle ne nettoie pas les adaptateurs qui la référencent : ils continuent d'afficher une clé désormais orpheline.
#3.10 Garde-fous & exécution — /policies
Libellé : Garde-fous & exécution · Groupe : Configuration plateforme · Sous-titre : « Garde-fous d'exécution (deny-by-default) et politiques de sandbox »
#Objet
Définir ce qu'un agent a le droit de faire (garde-fous) et dans quel bac à sable il s'exécute (politiques d'exécution).
#Ce que vous voyez
Garde-fous (out-of-loop, deny-by-default) : Identifiant · Motif d'action · Effet · Priorité · Approbation · Activé · Actions, plus un encadré Évaluer une action. Politiques d'exécution (sandbox) : Identifiant · Réseau · Egress (allowlist) · Durée max (s) · Système de fichiers · Actions.
La règle fondatrice est affichée : « Sans règle allow correspondante, une action est refusée par défaut (fail-safe). » Et quand la table est vide : « Aucune règle de garde-fou. L'évaluation refuse toute action par défaut. »
#Action pas à pas — créer un garde-fou
- Cliquez Nouvelle règle.
- Renseignez :
| Champ | Contrainte | Défaut / aide |
|---|---|---|
| Identifiant de politique | Non vide | exemple affiché : SPX-POL-0007 |
| Motif d'action | Non vide. Aide : « p.ex. « deploy:prod » ou « fs:* ». » | — |
| Effet | Refuser ou Autoriser | Refuser |
| Priorité (plus petit = évalué d'abord) | Entier ≥ 0 | 100 |
| Exiger une approbation (HITL) même si autorisé | Case à cocher | décochée |
- Validez. Message : « Garde-fou créé. »
L'effet par défaut est « Refuser ». C'est cohérent avec la posture de refus par défaut. Passer une règle en « Autoriser » est toujours un élargissement : justifiez-le.
Comprendre la priorité. Plus le nombre est petit, plus la règle est évaluée tôt. Une règle d'autorisation large en priorité 10 peut donc neutraliser une règle de refus ciblée en priorité 100. Placez toujours les refus ciblés avant les autorisations larges.
#Action pas à pas — évaluer une action
- Dans l'encadré Évaluer une action, saisissez l'action à tester (exemple affiché :
deploy:prod). - Cliquez Évaluer.
- Le verdict s'affiche : « Verdict : Autorisée » ou « Verdict : Refusée », suivi du nombre de règles correspondantes, de la mention Approbation requise le cas échéant, et de l'identifiant de la règle appliquée.
Si le service d'évaluation n'est pas monté dans l'environnement, l'encadré affiche : « Évaluateur non raccordé — L'évaluateur de garde-fous n'est pas raccordé dans cet environnement (l'endpoint d'évaluation répond 404/501). Les règles ci-dessus restent réelles ; l'évaluation à la volée sera disponible une fois le service raccordé. »
C'est un point de nuance important : un évaluateur non raccordé ne signifie pas que les règles sont inertes. Elles sont bien appliquées par le service d'exécution ; c'est seulement le simulateur de l'interface qui manque.
#Action pas à pas — créer une politique d'exécution
- Cliquez Nouvelle politique.
- Renseignez :
| Champ | Contrainte | Défaut |
|---|---|---|
| Identifiant | Non vide | exemple affiché : default_sandbox |
| Politique réseau | Doit commencer par deny-. Aide : « Doit être deny-by-default (préfixe « deny- »). » |
deny-all-egress-except-allowlist |
| Durée max (secondes) | Entier ≥ 1 | 3600 |
- Validez. Message : « Politique d'exécution créée. »
La validation du préfixe
deny-est un verrou de conception : on ne peut pas créer depuis cette interface une politique réseau permissive par défaut. C'est volontaire.
#Action pas à pas — durcir une politique existante
- Cliquez Modifier.
- Champs modifiables : Politique réseau (préfixe
deny-toujours exigé), Egress (allowlist), Durée max, Système de fichiers, Activé. - L'allowlist d'egress est une liste d'hôtes séparés par des virgules (exemple affiché :
api.anthropic.com, gateway.internal). Les espaces sont supprimés et les entrées vides ignorées. - Validez. Message : « Politique d'exécution mise à jour. »
#Permissions
policies:manage — administrateur plateforme uniquement, pour les deux familles.
#Points d'attention
| Point | Détail |
|---|---|
| Champ Système de fichiers | Absent du formulaire de création ; il n'apparaît qu'à la modification. Une politique créée porte donc la valeur par défaut du service tant que vous ne l'éditez pas. Exemple affiché à l'édition : ephemeral-workspace-only. |
| Champ Egress | Absent également à la création. Une politique nouvellement créée a donc une allowlist vide — donc, avec un réseau en deny-, aucune sortie autorisée. C'est le comportement sûr, mais il surprend. |
| Suppression | Confirmation irréversible dans les deux cas. |
#3.11 Registre (skills/outils/prompts) — /registry
Libellé : Registre (skills/outils/prompts) · Groupe : Configuration plateforme · Sous-titre : « Registre GLOBAL des skills, outils (MCP) et prompts — géré au niveau plateforme, visible par tous les locataires »
#Objet
Publier, au nom de la plateforme, les capacités que tous les locataires pourront adopter : compétences, serveurs d'outils, modèles de prompt.
#Portée : attention particulière
Un encadré permanent l'annonce : « Portée globale (locataire plateforme) — Ces entrées sont créées AU NOM du locataire plateforme avec la visibilité « global » et sont proposées à tous les locataires. Le sélecteur de locataire en haut n'affecte pas cette page. »
C'est la seule destination, avec Rôles IA et Démo, où le sélecteur de locataire est sans effet. Ne cherchez pas à isoler une publication sur un locataire depuis cet écran : ce n'est pas ce que fait cette page.
#Les trois onglets
| Onglet | Libellé FR | Contenu |
|---|---|---|
| 1 | Skills | Compétences globales + import du seed curaté |
| 2 | Outils (MCP) | Serveurs d'outils avec leur forme d'authentification |
| 3 | Prompts | Modèles de prompt par phase du cycle |
#Action pas à pas — rédiger une compétence globale
- Onglet Skills, cliquez Nouveau skill.
- Renseignez :
| Champ | Contrainte réelle |
|---|---|
| Nom du skill | Non vide |
| Description du déclencheur | Au moins 20 caractères. Aide : « Décrivez précisément QUAND ce skill doit s'activer (≥ 20 caractères). » |
| Version (semver) | Non vide — exemple affiché : 0.1.0 |
| Contenu / instructions | Non vide. Aide : « Instructions du skill (analysées à la recherche de secrets — n'y mettez aucun secret). » |
- Validez. Message : « Skill global créé (brouillon). »
La compétence atterrit en brouillon. Elle n'est pas utilisable tant qu'une revue de séparation des devoirs n'a pas été approuvée sur la page Gouvernance. Le texte d'aide le dit : « Ils atterrissent en brouillon jusqu'à approbation SoD (Gouvernance). »
#Action pas à pas — importer le seed curaté de compétences
- Onglet Skills, repérez le panneau Importer le seed de skills globaux.
- Lisez le manifeste : Capacité · Source · Licence · Résultat · Détail.
- Cliquez Importer les n skills.
- Le rapport s'affiche : « n importés », « n ignorés », « n bloqués », et par ligne : Importé · Déjà présent · Bloqué · Erreur.
- Message : « Seed importé (en attente de revue SoD). »
La note de gouvernance affichée décrit précisément le pipeline : « Chaque skill passe par le pipeline gouverné : provenance → vérification de signature → classification du risque → validation + analyse de secrets → revue SoD. Ce n'est jamais un INSERT en masse. Idempotent : un skill déjà présent est ignoré. »
Vous pouvez donc relancer l'import sans risque de doublon.
#Action pas à pas — enregistrer un serveur d'outils MCP
- Onglet Outils (MCP), cliquez Nouvel outil.
- Renseignez l'identité du serveur :
| Champ | Contrainte |
|---|---|
| Nom du serveur | Non vide |
| URL / endpoint | Non vide — exemple affiché : https://mcp.example.com |
| Description | Facultatif |
| Transport | http · sse · stdio |
- Choisissez le Type d'authentification parmi : Aucune · OAuth2 · Clé API · Basique (login). Les champs suivants s'adaptent :
| Type | Champs supplémentaires |
|---|---|
| OAuth2 | Endpoint du jeton · Scopes (séparés par des virgules) · Type d'octroi (client_credentials ou refresh) · Sous-clé Vault : client_id · Sous-clé Vault : client_secret |
| Clé API | Emplacement (En-tête ou Paramètre de requête) · Nom de l'en-tête / paramètre (défaut Authorization) · Sous-clé Vault : valeur de la clé |
| Basique (login) | Sous-clé Vault : nom d'utilisateur · Sous-clé Vault : mot de passe |
| Aucune | — |
- Renseignez le Chemin Vault du justificatif :
« Les secrets vivent dans Vault — saisissez UNIQUEMENT le chemin Vault, jamais la valeur du secret. » Le chemin doit commencer par
secret/; sinon l'erreur affichée est « Le chemin doit commencer par « secret/ ». » Le chemin devient obligatoire dès que le type d'authentification n'est pas « Aucune ».
- Complétez éventuellement : En-têtes statiques (JSON non secret) — objet JSON validé côté client, aide : « Objet JSON d'en-têtes NON secrets (jamais de justificatif ici) » ; Délai d'expiration (ms) ; Chemin de santé (optionnel) (exemple :
/health). - Validez. Message : « Outil MCP global enregistré. »
Notion clé à saisir : vous ne saisissez jamais un secret, et jamais non plus un ensemble de secrets. Vous saisissez le chemin du coffre et le nom des sous-clés qui y sont stockées. L'aide le précise : « Renseignez les NOMS des sous-clés stockées sous ce chemin Vault (jamais leurs valeurs). »
#Action pas à pas — modifier l'authentification d'un outil
- Cliquez Modifier l'authentification sur la ligne.
- Ajustez le type et les sous-clés.
- Message : « Authentification de l'outil mise à jour. »
#Action pas à pas — créer un prompt global
- Onglet Prompts, cliquez Nouveau prompt.
- Renseignez :
| Champ | Contrainte |
|---|---|
| Nom du prompt | Non vide |
| Phase SDD | Liste fermée de dix valeurs : specify · clarify · plan · tasks · implement · test · review · reverse · adr · fix |
| Classe de risque | Faible · Moyen · Élevé · Non classé |
| Description | Facultatif |
| Version (semver) | Non vide — exemple affiché : 1.0.0 |
| Corps du prompt | Non vide. Aide : « Corps du prompt avec des {{variables}}. Aucune donnée sensible. » |
- Validez. Message : « Prompt global créé. »
Effet de bord : la création produit trois objets liés — un modèle, une version de ce modèle, et une entrée de catalogue. Le corps vit dans le service d'orchestration de prompts ; le catalogue ne conserve qu'un lien gouverné.
#Action pas à pas — révoquer une entrée
- Cliquez Révoquer sur la ligne (le bouton est désactivé si l'entrée est déjà révoquée).
- Saisissez le Motif de révocation — obligatoire : le bouton de confirmation reste inactif tant que le champ est vide.
- Lisez l'avertissement : « La révocation désactive toutes les liaisons / permissions associées. Motif obligatoire (audité). Action irréversible. »
- Message : « Entrée révoquée. »
La révocation est l'outil de retrait d'urgence d'une capacité compromise. Son effet est large et immédiat : toutes les liaisons tombent.
#Permissions
registry:manage — administrateur plateforme uniquement, pour toutes les écritures des trois onglets.
#Écarts honnêtes
| Écart | Détail |
|---|---|
| Registre à plusieurs niveaux désactivé | Encadré affiché : « Les portées à plusieurs niveaux (global/tenant/user) ne sont pas activées sur cet environnement (indicateur REGISTRY_TIERED_SCOPES_ENABLED). La lecture du catalogue reste possible ; l'adoption et les prompts personnels s'activeront une fois l'indicateur levé. » Ce drapeau est désactivé par défaut. |
| Code mort | Deux fonctions du module d'API (création de rôle virtuel global, liste des outils d'un serveur) sont exportées mais référencées nulle part. Sans effet visible, mais à signaler. |
#3.12 Agents IA — /agents
Libellé : Agents IA · Groupe : Configuration plateforme · Sous-titre : « Tous les agents IA de la plateforme — registre central (source de vérité) : configuration + liaisons de bundle (skills / MCP / niveau de modèle) »
#Objet
Voir la flotte d'agents déclarés, inspecter le contenu d'un agent, activer ou désactiver un agent au niveau du registre central.
#Ce que vous voyez
| Panneau | Contenu |
|---|---|
| Registre des agents (en processus) | Vue en direct : chaque agent déclare ses capacités, ses skills, ses serveurs MCP et son transport |
| Enregistrements du registre central | Agents persistés — c'est ici que se fait le basculement actif/inactif |
Colonnes : Nom · Type · Capacités · Skills · Serveurs MCP · Transport · Niveau (jetons) · Santé · Statut · Modèle. Types d'agent : Statique ou Dynamique. Un compteur récapitule : « n agents · n statiques · n dynamiques ».
#Action pas à pas — inspecter un agent
- Cliquez la ligne de l'agent.
- La modale Détail de l'agent affiche : Capacités · Skills liés · Serveurs MCP · Santé, ainsi que le transport.
#Action pas à pas — activer ou désactiver un agent
- Repérez la ligne dans Enregistrements du registre central.
- Cliquez Activer ou Désactiver.
- Message : « Agent activé. » ou « Agent désactivé. »
Effet. Le basculement est écrit dans le registre central, qui est la source de vérité pour l'ensemble de la plateforme. Désactiver un agent le retire de la résolution pour tous les locataires — ce n'est pas une action portée par un locataire.
#Contraintes
| Élément | Valeur |
|---|---|
| Volume chargé | 200 enregistrements maximum |
| Portée | Plateforme (le sélecteur de locataire n'influe pas sur le registre central) |
#Permissions
agents:manage — administrateur plateforme uniquement.
#Erreurs possibles
| Situation | Message affiché |
|---|---|
| Orchestrateur injoignable | « Registre des agents indisponible — ai-orchestrator n'a pas répondu. Vérifiez la configuration des URL de service (passerelle API ou NEXT_PUBLIC_AI_ORCHESTRATOR_BASE). » |
| Registre vide | « Aucun agent enregistré. Vérifiez qu'ai-orchestrator est raccordé et que le registre central est joignable. » |
Un registre vide n'est pas normal en exploitation. Il signifie presque toujours que le registre central n'a jamais été alimenté, ou que le service d'orchestration ne le joint pas. Voir le tableau de dépannage (§8).
#3.13 Workforce (personnel virtuel) — /workforce
Libellé de navigation : ⚠️ MANQUANT · Groupe : Configuration plateforme · Sous-titre : « Membres du personnel virtuel, files de tâches et équipes du locataire sélectionné »
#Écart d'affichage à connaître avant tout
La clé de traduction nav.workforce n'existe ni en français ni en anglais. Les seize entrées de navigation sont bien présentes dans le code, mais quinze seulement ont un libellé. Conséquence directe et visible :
- l'entrée de la barre latérale ne s'affiche pas correctement ;
- le fil d'Ariane est incomplet ;
- le titre
<h1>de la page — qui est dérivé de la clé de navigation — est affecté ; - la palette de commandes et le copilote de console échouent également sur cette clé.
Deuxième clé manquante sur la même page : workforce.noTeams, utilisée quand aucune équipe n'existe. L'état vide du panneau Équipes est donc lui aussi défectueux.
Ces deux corrections sont des prérequis de lancement. Voir §9.
#Objet
Superviser le personnel virtuel du locataire : effectifs, autonomie, équipes, charge, et mise en pause.
#Ce que vous voyez
Vue d'ensemble des effectifs — cinq compteurs : Effectifs · Actifs · Équipes · Tâches ouvertes · Tâches terminées.
Membres du personnel — Nom · Rôle · Autonomie · Équipe · Statut · Tâches ouvertes · Actions. Colonnes triables sur le nom, l'autonomie, le statut et les tâches ouvertes ; filtre de texte disponible.
Statuts : Actif · En pause · Hors service.
Équipes — Nom · Clé d'équipe · Description · Coordinateur.
#Action pas à pas — mettre en pause ou reprendre un membre
- Sélectionnez le locataire.
- Sur la ligne du membre, cliquez Mettre en pause (bouton rouge) ou Reprendre (bouton secondaire).
- Message : « Statut du membre mis à jour. »
- Les compteurs de la vue d'ensemble se rafraîchissent automatiquement.
Le bouton bascule selon l'état : un membre En pause ou Hors service affiche Reprendre ; un membre Actif affiche Mettre en pause.
#Permissions
⚠️ Attention : l'action pause/reprise est gardée par la capacité
agents:manage, et non par une capacité dédiée au personnel virtuel. Un opérateur plateforme ne peut donc pas mettre un membre en pause — il faut le rôle administrateur plateforme. Le message affiché est « Requiert le rôle Administrateur plateforme. »
C'est une contrainte à connaître pour l'astreinte : mettre en pause un agent en dérive n'est pas une action d'opérateur. Pour l'astreinte de niveau opérateur, la voie disponible est l'interruption d'exécution depuis la page Flotte d'agents (§3.2), qui, elle, relève de fleet:interrupt.
#Statut fonctionnel
Le personnel virtuel est livré en phase 1 : embauche depuis l'interface, assignation à une file, activité et organigramme. C'est prouvé en ligne sur les environnements de développement et de production. Les phases suivantes — délégation, escalade, autonomie étendue, direction virtuelle — sont Planifiées et ne doivent pas être présentées comme disponibles.
#3.14 Rôles IA — /roles
Libellé : Rôles IA · Groupe : Configuration plateforme · Sous-titre : « Composez des capacités sur des rôles métier à l'échelle de la plateforme. »
#Objet
Attacher des capacités globales à un rôle virtuel et fixer son plafond d'autonomie.
#Prérequis bloquant
Si le drapeau des rôles virtuels est désactivé, la page affiche : « Rôles virtuels IA désactivés — Le plan des rôles virtuels IA n'est pas activé sur cet environnement (REGISTRY_VIRTUAL_ROLES_ENABLED désactivé). »
Ce drapeau est désactivé par défaut dans tous les services concernés, et il n'est activé dans aucun manifeste de déploiement. Sur un environnement livré tel quel, cette destination est donc inopérante. C'est un écart à assumer, pas un défaut d'installation.
Un second encadré rappelle la portée : « Portée globale (plateforme) — Les actions ici s'exécutent en tant que tenant plateforme sur le catalogue global. L'administration plateforme (registry:manage) est requise pour écrire ; le tenant plateforme n'est jamais soumis aux droits d'accès. »
#Ce que vous voyez
| Panneau | Contenu |
|---|---|
| Choisir un rôle | Sélecteur de rôle virtuel ; pastilles clé, portée de liaison, plafond d'autonomie |
| Lier des capacités au rôle | Sélection du type (Compétences / Outils / Prompts) et liaison |
| Recherche de compétences en ligne | Découverte puis import gouverné |
| Concepteur de compétences | Renvoi vers la page Registre |
| RPA & autonomie | Sélection du plafond d'autonomie |
#Action pas à pas — lier une capacité à un rôle
- Choisissez un rôle dans Choisir un rôle. Sans sélection : « Choisissez d'abord un rôle ci-dessus. »
- Choisissez le Type de capacité : Compétences, Outils ou Prompts.
- Le catalogue global s'affiche : Nom · Risque · Approuvé (Oui / Non) · action.
- Cliquez Lier au rôle. Le bouton est inactif sur une capacité non approuvée, avec la mention « Doit être approuvée pour être liée. »
- Confirmez : « Lier la capacité — Confirmez la liaison de cette capacité globale approuvée à la portée agent du rôle. Rien n'est auto-approuvé. »
- Message : « Capacité liée au rôle. »
Le bandeau du rôle indique en permanence le contenu du bundle : « n compétence(s) liée(s) », « n outil(s) lié(s) », « n prompt(s) lié(s) ».
#Action pas à pas — réviser un plafond d'autonomie
- Ouvrez le panneau RPA & autonomie.
- Choisissez le Plafond d'autonomie parmi N0, N1, N2, N3.
- Cliquez Enregistrer le plafond. Message : « Plafond d'autonomie enregistré. »
La règle de calcul est affichée et il faut la comprendre :
« Autonomie effective = min(plafond, plan.role.max_autonomy). »
Autrement dit : le plafond que vous fixez ici borne le rôle, et le plan commercial du locataire le borne encore davantage. Vous ne pouvez jamais accorder plus que ce que le plan autorise.
| Plan | Plafond d'autonomie maximal du plan |
|---|---|
| Gratuit / par défaut | N1 |
| Équipe | N2 |
| Entreprise | N3 |
Comportement de sécurité complémentaire : en cas de dégradation ou de valeur inconnue, la résolution retombe sur N1 — le système échoue vers le bas, jamais vers le haut.
Un encadré Gouverné complète : « Le browser_action RPA d'un rôle passe toujours par le plan agent-runtime gouverné (refus par défaut, dry-run, bail→egress→provision→exécution). Le plafond d'autonomie borne un rôle ; le forfait le borne davantage. Lier un outil RPA nécessite registry.rpa. »
#Action pas à pas — découvrir et importer une compétence en ligne
- Panneau Recherche de compétences en ligne : « Découvrez et importez des compétences depuis des sources en ligne (lecture seule, egress restreint). »
- Choisissez la Source : Catalogue curé ou GitHub.
- Saisissez la recherche (exemple affiché : « extraction de factures ») et cliquez Découvrir.
- Les candidats s'affichent : Candidat · Licence · Risque (aperçu).
- Cliquez Importer, puis confirmez : « La compétence est importée via le pipeline gouverné (provenance → vérif. signature → classification du risque → validation + scan de secrets) et reste en attente de revue (SoD). Jamais auto-approuvée. »
- Message : « Compétence importée (en attente de revue) », suivi de « nom : statut « statut » — en attente d'approbation (SoD). »
États dégradés : « Aucun candidat trouvé. » ou « Source en ligne indisponible — aucun résultat. »
La recherche en ligne est réservée au plan Entreprise : le droit
registry.online_searchest désactivé sur les plans Gratuit et Équipe.
#Permissions
registry:manage — administrateur plateforme uniquement. Message de refus affiché : « Nécessite l'administration plateforme (registry:manage). »
#Écarts honnêtes visibles dans l'interface
Trois panneaux portent explicitement la mention Ébauche et un texte commençant par « TODO » :
| Panneau | Texte affiché |
|---|---|
| Lier des capacités au rôle | « TODO : ouvrir un sélecteur de compétences/prompts/outils globaux et lier le choix à la portée du rôle via les routes de liaison existantes. Les octrois d'outils browser_action/RPA sont soumis à registry.rpa (W5). » |
| Recherche de compétences en ligne | « TODO : câbler /catalog/import/discover → prévisualiser les candidats → l'import existant /catalog/import (SoD) → lier à un rôle. Rien n'est exécuté ni auto-approuvé. » |
| Concepteur de compétences | « Le concepteur de compétences globales se trouve sur la page Registre. TODO : l'afficher ici dans le contexte du rôle. » |
Ces mentions sont visibles par l'utilisateur final. Elles doivent disparaître avant le jour J, soit par implémentation, soit par retrait du texte. Voir §9.
#3.15 Démo — /demo
Libellé : Démo · Groupe : Configuration plateforme · Sous-titre : « Provisionnez, réinitialisez ou supprimez le tenant de démonstration isolé — piloté par le module Démo (activé par flag, isolé par RLS). »
#Objet
Disposer d'un locataire de démonstration réaliste, reproductible et strictement isolé des locataires réels.
#Prérequis bloquant
Le module est gouverné par le drapeau DEMO_MODULE_ENABLED, désactivé par défaut. Tant qu'il l'est, la page affiche : « Le module Démo est désactivé. Activez le flag DEMO_MODULE_ENABLED (portée tenant, pour le seul tenant de démo) dans Feature-flags, puis provisionnez. » Le mot « Feature-flags » est un lien direct.
Les trois boutons d'action sont désactivés, avec la mention : « Activez d'abord le flag DEMO_MODULE_ENABLED pour déverrouiller ces actions. »
#Ce que vous voyez
État du module Démo — six champs : Activé · Provisionné · Ressources · Version du manifeste · Tenant de démo · Projets. Rafraîchissement automatique toutes les 15 secondes, plus un bouton Actualiser.
Le locataire de démonstration est épinglé : d3300000-0000-4000-8000-000000000001 par défaut. Le service refuse tout autre locataire.
#Action pas à pas — provisionner
- Vérifiez que Activé affiche bien la pastille verte.
- Choisissez le Mode de provisionnement :
| Mode | Libellé FR | Comportement |
|---|---|---|
authored |
Rédigé (déterministe, sans LLM) | Contenu fixe, reproductible, aucun appel de modèle |
agentic |
Agentique (exécutions LLM réelles via passerelle) | Contenu produit par des exécutions réelles — consomme du budget |
- Cliquez Provisionner. Message : « Démo provisionnée ».
- Vérifiez que Provisionné est passé à Oui et que Ressources affiche un compte non nul.
Le mode Rédigé est le bon choix par défaut pour une démonstration commerciale : il est déterministe, gratuit et rejouable à l'identique. Réservez le mode Agentique aux démonstrations où l'on veut montrer les agents en action.
#Action pas à pas — réinitialiser
- Cliquez Réinitialiser. Aucune confirmation n'est demandée.
- Message : « Démo réinitialisée ».
Le provisionnement est idempotent : les ressources sont créées ou mises à jour par clé naturelle. Une réinitialisation ramène donc le locataire à l'état du manifeste.
#Action pas à pas — supprimer
- Cliquez Supprimer.
- Confirmation : « Supprimer la démo ? — Archive les projets de démo et oublie le manifeste. Le tenant reste isolé par RLS ; réversible via Provisionner. » L'identifiant du locataire est rappelé.
- Message : « Démo supprimée ».
La suppression est donc réversible : elle archive et oublie, elle ne détruit pas le locataire.
#Permissions
demo:manage — administrateur plateforme uniquement. Le texte d'aide ajoute : « Toutes les actions n'opèrent que sur le tenant de démonstration réservé et exigent le rôle ADMIN. »
#Écart honnête
Le tableau du manifeste de démonstration est inerte. Le panneau Manifeste de démo n'affiche jamais le détail ligne à ligne des ressources : la liste qui l'alimente est codée en dur à vide dans la page. Seul le résumé de compte s'affiche — « n ressources semées dans le tenant de démonstration. » Les colonnes définies (Type · Clé naturelle · État) ne sont jamais rendues. Voir §9.
#3.16 Configuration — /config
Libellé : Configuration · Groupe : Configuration plateforme · Sous-titre : « URL des services control-plane et identité agissante (12-factor) »
#Objet
Déclarer qui vous êtes (en mode dev-headers) et vérifier où le portail envoie réellement ses requêtes.
#Panneau 1 — Identité Platform-Admin
Comportement selon le mode d'authentification :
En mode dev-headers — le panneau est modifiable :
- Saisissez l'Identifiant administrateur (UUID). Aide : « UUID de l'utilisateur agissant, forwardé en X-User-ID. » Exemple de format affiché :
00000000-0000-0000-0000-000000000000. - Cliquez Appliquer.
- Cochez les Rôles plateforme voulus : Lecteur, Opérateur plateforme, Administrateur plateforme. Les cases prennent effet immédiatement, sans validation.
- Les rôles retenus s'affichent en pastilles sous le formulaire.
En mode jwt — le panneau est en lecture seule : il affiche l'Administrateur agissant dérivé du jeton et ses rôles, avec la mention « Identité dérivée de la session Keycloak (jeton) — non modifiable ici. » Si rien n'est défini : Non définie.
Le texte d'aide rappelle la nature des valeurs : « L'administrateur agissant est transmis via l'en-tête X-User-ID sur les actions de gouvernance (séparation des tâches, audit). Ni l'UUID ni les rôles ne sont des secrets. »
#Panneau 2 — URL des services
Tableau à trois colonnes : Service · Variable d'environnement · URL cible, avec une pastille passerelle ou direct par ligne. Neuf lignes — le service de démonstration n'y figure pas.
C'est votre premier réflexe de diagnostic : quand un panneau reste vide, ouvrez cette page et vérifiez que la cible affichée est bien celle attendue.
#Actions
Aucune action serveur. Le panneau d'identité écrit dans le stockage local du navigateur ; le panneau d'URL est en lecture pure.
#Permissions
config:read — accessible aux trois rôles. Aucune garde n'empêche un lecteur de se déclarer administrateur plateforme en mode dev-headers : c'est précisément pourquoi ce mode ne doit jamais être exposé publiquement.
#Point de sécurité
En mode dev-headers, cette page est le mécanisme d'authentification. Elle ne vérifie rien : elle enregistre une déclaration. Toute la sécurité repose alors sur le contrôle serveur — lequel, par défaut, fait la même hypothèse. C'est le point unique le plus important de tout ce guide.
#4. Procédures d'exploitation (runbooks)
Seize procédures. Chacune indique son déclencheur, le rôle requis, les étapes numérotées, et les critères de vérification — c'est-à-dire ce que vous devez voir à l'écran pour affirmer que la procédure a réussi.
| # | Procédure | Rôle minimal | Durée indicative |
|---|---|---|---|
| R1 | Créer un locataire de bout en bout | Administrateur plateforme | 10 min |
| R2 | Intégrer un nouvel utilisateur et lui donner le bon rôle | Administrateur plateforme | 5 min |
| R3 | Retirer un accès en urgence | Administrateur plateforme | 3 min |
| R4 | Approuver ou rejeter une revue en respectant la séparation des devoirs | Administrateur plateforme | 10 min |
| R5 | Enregistrer un serveur d'outils MCP | Administrateur plateforme | 20 min |
| R6 | Publier une compétence globale | Administrateur plateforme (× 2 personnes) | 30 min |
| R7 | Réviser un plafond d'autonomie | Administrateur plateforme | 5 min |
| R8 | Définir un budget et réagir à un dépassement | Opérateur plateforme | 10 min |
| R9 | Activer un drapeau de fonctionnalité progressivement | Opérateur plateforme | étalée sur plusieurs jours |
| R10 | Changer le modèle de langage par défaut | Administrateur plateforme | 15 min |
| R11 | Durcir une politique d'exécution | Administrateur plateforme | 20 min |
| R12 | Produire un rapport de conformité Loi 25 | Opérateur plateforme | 5 min |
| R13 | Vérifier l'intégrité de la chaîne d'audit | Opérateur plateforme | 2 min |
| R14 | Interrompre une exécution d'agent | Opérateur plateforme | 2 min |
| R15 | Provisionner puis réinitialiser le locataire de démonstration | Administrateur plateforme | 10 min |
| R16 | Basculer un environnement de dev-headers vers jwt |
Administrateur plateforme + exploitation | 1 journée |
#R1 — Créer un locataire de bout en bout
Déclencheur : nouvelle organisation cliente, nouveau pilote, nouvel espace interne.
Rôle requis : administrateur plateforme (tenants:manage, users:manage, budgets:manage).
- Ouvrez Locataires.
- Cliquez Nouveau locataire.
- Saisissez le Slug en respectant la règle : minuscules, chiffres, tirets, 3 à 40 caractères. Choisissez-le stable : il n'est pas modifiable ensuite.
- Saisissez le Nom affiché (celui que verront les utilisateurs).
- Effacez la valeur
starterdu champ Plan et saisissez un code réel :gratuit,teamouenterprise. - Validez. Attendez le message « Locataire créé. »
- Repérez la nouvelle ligne dans le registre et cliquez Sélectionner.
- Vérifiez que le sélecteur de la barre supérieure porte bien le nouvel identifiant.
- Ouvrez Utilisateurs et créez le premier compte : c'est le futur propriétaire (voir R2).
- Attribuez-lui le rôle
OWNER. - Ouvrez Budgets & quotas et créez un budget de portée
tenantavec une limite non nulle (voir R8). - Ouvrez État système et vérifiez que le tableau de bord répond pour ce locataire.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Registre des locataires | La ligne existe, colonne Actif en vert |
| 2 | Sélecteur de la barre supérieure | Porte l'identifiant du nouveau locataire |
| 3 | Page Utilisateurs | Au moins un compte, colonne Rôles contenant OWNER |
| 4 | Page Budgets | Au moins une carte, état Sain |
| 5 | Page État système | Le tableau de bord répond (pas d'encadré « Tableau de bord indisponible ») |
| 6 | Page Audit | Une recherche sans filtre retourne au moins l'entrée de création |
Pièges
- Laisser
starterdans le champ Plan → locataire rattaché à un plan inexistant. - Oublier le rôle
OWNER→ le locataire existe mais personne ne peut y travailler. - Oublier le budget → aucune limite de dépense, aucun signal de dérive.
#R2 — Intégrer un nouvel utilisateur et lui donner le bon rôle
Déclencheur : arrivée d'une personne dans une organisation cliente.
Rôle requis : administrateur plateforme (users:manage).
- Sélectionnez le locataire d'accueil dans la barre supérieure. Vérifiez-le deux fois : un utilisateur créé dans le mauvais locataire devra être supprimé et recréé.
- Ouvrez Utilisateurs, cliquez Nouvel utilisateur.
- Saisissez le Courriel professionnel.
- Saisissez un Mot de passe conforme : au moins 8 caractères, une majuscule, une minuscule, un chiffre. Ce mot de passe est provisoire et doit être transmis par un canal distinct du courriel.
- Renseignez Prénom et Nom — facultatifs mais indispensables à la lisibilité du journal d'audit.
- Validez. Message attendu : « Utilisateur créé. »
- Sur la ligne du nouvel utilisateur, cliquez Modifier.
- Dans Rôles (Keycloak), choisissez un seul rôle, le plus faible qui permette le travail attendu :
| Besoin | Rôle à attribuer |
|---|---|
| Consulter uniquement | VIEWER |
| Rédiger des spécifications, travailler dans l'espace de travail | EDITOR |
| Publier, valider des décisions de revue | PUBLISHER |
| Gérer les utilisateurs du locataire | ADMIN |
| Responsable du locataire | OWNER |
- Cliquez Ajouter. Message attendu : « Rôle ajouté. »
- Fermez le formulaire et vérifiez la colonne Rôles dans le tableau.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Colonne Statut | Actif |
| 2 | Colonne Rôles | Exactement le rôle voulu, aucun autre |
| 3 | Page Audit, filtre Acteur = votre identité | Deux entrées : création puis attribution de rôle |
| 4 | Connexion de la personne au portail client | Réussie, avec les seules permissions attendues |
Rappel de moindre privilège. Les rôles sont composites : OWNER implique ADMIN, qui implique PUBLISHER, etc. N'empilez jamais plusieurs rôles ; un seul suffit toujours.
#R3 — Retirer un accès en urgence
Déclencheur : départ non planifié, compte compromis, comportement anormal.
Rôle requis : administrateur plateforme (users:manage).
Objectif de temps : moins de trois minutes.
- Sélectionnez le locataire concerné.
- Ouvrez Utilisateurs et filtrez sur le courriel.
- Cliquez Modifier.
- Retirez tous les rôles : cliquez la croix
×sur chaque pastille. Il n'y a pas de confirmation ; l'effet est immédiat sur le serveur d'identité. Le bloc doit finir par afficher « Aucun rôle ». - Passez le Statut à Suspendu.
- Validez. Message attendu : « Utilisateur mis à jour. »
- Ouvrez Flotte d'agents et interrompez toute exécution attribuée à cette personne (voir R14).
- Ouvrez Audit & conformité, filtrez sur Acteur = identifiant de la personne, et exportez les 30 derniers jours (voir R12).
- Ne supprimez pas le compte. La suppression est irréversible et détruit la lisibilité du journal.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Colonne Rôles | — |
| 2 | Colonne Statut | Suspendu |
| 3 | Page Flotte | Aucune exécution en cours attribuée à la personne |
| 4 | Nouvelle tentative de connexion | Refusée |
⚠️ Ce que cette procédure ne fait pas. Il n'existe aucun moyen de suspendre un locataire entier depuis le portail : le service concerné n'expose pas ce point d'entrée, et l'écran l'annonce. Pour couper l'accès d'une organisation complète, il faut retirer les rôles utilisateur par utilisateur, ou passer par une intervention d'exploitation hors portail.
#R4 — Approuver ou rejeter une revue en respectant la séparation des devoirs
Déclencheur : un pair vous transmet un identifiant de sujet à réviser.
Rôle requis : administrateur plateforme (secret_access:approve), différent du soumetteur.
- Vérifiez votre identité agissante sur la page Configuration. Sans elle, toute action sera refusée localement en 428.
- Ouvrez Gouvernance & SoD.
- Choisissez le Type de sujet : Version de skill ou Serveur MCP.
- Collez l'Identifiant du sujet (UUID). Le bouton reste inactif tant que le format n'est pas un UUID canonique.
- Cliquez Charger les revues.
- Instruisez la demande avant de cliquer :
| Colonne | Ce que vous devez vérifier |
|---|---|
| Soumis par | Ce n'est pas vous. Si c'est vous, arrêtez : passez la main. |
| Classe de risque | Élevé ⇒ vous devez avoir réellement mené la revue de sécurité |
| Verdict | Vide (une revue déjà décidée n'a plus de boutons) |
- Pour la classe de risque Élevé, examinez le contenu du sujet sur la page Registre : provenance, licence, instructions, chemin de coffre, forme d'authentification.
- Cliquez Approuver (2ᵉ contrôle) ou Rejeter.
- Si le bouton d'approbation est désactivé, lisez le motif :
| Encadré | Action à mener |
|---|---|
| Identité requise | Renseignez votre identité sur Configuration |
| « Requiert le rôle Administrateur plateforme. » | Faites traiter par un administrateur |
| Auto-approbation interdite | Passez la main à un autre administrateur — c'est le fonctionnement attendu |
- Rechargez les revues et vérifiez le verdict.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Colonne Verdict | Pastille verte approved ou rouge rejected |
| 2 | Colonne Revu par | Votre identifiant, différent de « Soumis par » |
| 3 | Colonne Décidé le | Horodatée |
| 4 | Page Audit | L'entrée de décision est présente |
| 5 | Après approbation, page Rôles IA | La capacité affiche Approuvé : Oui et devient liable |
Ce que vous signez. Pour un sujet à haut risque, votre approbation transmet automatiquement l'attestation de revue de sécurité. Ne cliquez jamais « pour débloquer » sans avoir lu le contenu.
#R5 — Enregistrer un serveur d'outils MCP
Déclencheur : un locataire ou une équipe demande l'accès à un outil externe.
Rôle requis : administrateur plateforme (registry:manage).
Phase A — préparer le coffre (hors portail)
- Faites déposer le justificatif dans le coffre de secrets par la personne habilitée.
- Récupérez le chemin et le nom des sous-clés. Jamais les valeurs.
- Notez la forme d'authentification attendue par le serveur.
Phase B — enregistrer dans le portail
- Ouvrez Registre, onglet Outils (MCP).
- Cliquez Nouvel outil.
- Renseignez Nom du serveur, URL / endpoint, Description.
- Choisissez le Transport :
http,sseoustdio. - Choisissez le Type d'authentification et renseignez les sous-clés correspondantes :
| Type | Sous-clés à nommer |
|---|---|
| OAuth2 | client_id, client_secret + endpoint du jeton, scopes, type d'octroi |
| Clé API | valeur de la clé + emplacement (en-tête ou paramètre) et nom |
| Basique | nom d'utilisateur, mot de passe |
| Aucune | — |
- Renseignez le Chemin Vault du justificatif. Il doit commencer par
secret/. Il devient obligatoire dès que l'authentification n'est pas « Aucune ». - Renseignez éventuellement les En-têtes statiques (JSON non secret), le Délai d'expiration (ms) et le Chemin de santé.
- Validez. Message attendu : « Outil MCP global enregistré. »
Phase C — faire approuver
- Notez l'identifiant du serveur créé.
- Transmettez-le à un autre administrateur plateforme, qui exécute R4.
- Après approbation, l'outil devient liable à un rôle (R7 / §3.14).
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Onglet Outils | La ligne existe, colonne Chemin Vault renseignée |
| 2 | Page Gouvernance, panneau Vault | Aucun secret en clair n'apparaît nulle part |
| 3 | Après R4 | Verdict approved |
| 4 | Page Rôles IA, type Outils | Colonne Approuvé : Oui, bouton Lier au rôle actif |
Pièges
- Coller une valeur de secret dans le champ de chemin → incident, rotation immédiate.
- Oublier de faire approuver → l'outil reste inutilisable, sans message d'erreur explicite.
#R6 — Publier une compétence globale
Déclencheur : une compétence réutilisable doit être offerte à tous les locataires.
Rôle requis : administrateur plateforme (registry:manage), et un second administrateur pour l'approbation.
- Ouvrez Registre, onglet Skills.
- Cliquez Nouveau skill.
- Nom du skill — court, explicite, sans nom de client.
- Description du déclencheur — au moins 20 caractères. Décrivez quand la compétence doit s'activer, pas ce qu'elle fait. C'est ce texte qui pilote la sélection automatique.
- Version (semver) — commencez à
0.1.0. - Contenu / instructions — le corps de la compétence.
Le contenu est analysé à la recherche de secrets. Un jeton, une clé ou un mot de passe collé ici bloquera la publication, et il aura tout de même transité. Relisez avant de valider.
- Validez. Message attendu : « Skill global créé (brouillon). »
- Notez l'identifiant.
- Transmettez-le à un autre administrateur, qui exécute R4 sur le type Version de skill.
- Après approbation, la compétence est liable aux rôles.
Variante — import du seed curaté
- Onglet Skills, panneau Importer le seed de skills globaux.
- Lisez le manifeste : Capacité, Source, Licence.
- Cliquez Importer les n skills.
- Lisez le rapport : « n importés », « n ignorés », « n bloqués ».
- Chaque élément importé reste En attente SoD. Traitez-les un à un avec R4.
L'import est idempotent : relancer ne crée pas de doublon (résultat Déjà présent).
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Onglet Skills | La ligne existe, visibilité Global |
| 2 | Statut avant revue | Brouillon / en attente |
| 3 | Après R4 | Verdict approved par un administrateur différent |
| 4 | Page Rôles IA, type Compétences | Approuvé : Oui |
| 5 | Page Audit | Création puis décision, deux acteurs distincts |
#R7 — Réviser un plafond d'autonomie
Déclencheur : un rôle virtuel doit gagner ou perdre en autonomie.
Rôle requis : administrateur plateforme (registry:manage).
Prérequis : le drapeau des rôles virtuels doit être actif ; sinon la page affiche « Rôles virtuels IA désactivés ».
- Ouvrez Rôles IA.
- Sélectionnez le rôle dans Choisir un rôle.
- Lisez la pastille du plafond courant (« plafond Nx »).
- Ouvrez le panneau RPA & autonomie.
- Choisissez le nouveau Plafond d'autonomie :
| Niveau | Lecture opérationnelle |
|---|---|
| N0 | Aucune action autonome — proposition seulement |
| N1 | Actions à effet nul ou réversible, sous supervision |
| N2 | Actions courantes autonomes, exceptions escaladées |
| N3 | Autonomie étendue dans le périmètre du rôle |
- Cliquez Enregistrer le plafond. Message attendu : « Plafond d'autonomie enregistré. »
- Calculez l'autonomie effective :
min(plafond du rôle, maximum du plan du locataire).
| Plan du locataire | Maximum imposé |
|---|---|
| Gratuit | N1 |
| Équipe | N2 |
| Entreprise | N3 |
- Si le plan borne en dessous du plafond demandé, dites-le au demandeur. Élever le plafond dans le portail ne change rien tant que le plan ne suit pas.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Pastille du rôle | Affiche le nouveau plafond |
| 2 | Calcul du minimum | Cohérent avec le plan du locataire concerné |
| 3 | Page Audit | L'action est journalisée |
| 4 | Page Workforce du locataire | La colonne Autonomie reflète la borne effective |
Comportement de sécurité : en cas de valeur inconnue ou de dégradation, la résolution retombe sur N1. Le système échoue vers le bas.
#R8 — Définir un budget et réagir à un dépassement
Déclencheur : ouverture d'un locataire, ou dérive de consommation constatée.
Rôle requis : opérateur plateforme (budgets:manage).
Partie A — poser le budget
- Sélectionnez le locataire.
- Ouvrez Budgets & quotas, cliquez Nouveau budget.
- Portée — suivez la convention d'équipe. Formes acceptées par l'aide :
tenant,project:FB,credential:abc. - Limite (USD) — nombre ≥ 0, pas de 0,01.
- Seuil d'alerte (%) — laissez 80 sauf raison contraire.
- Seuil critique (%) — laissez 95 sauf raison contraire.
- Validez. Message attendu : « Budget créé. »
Partie B — réagir à un dépassement
- La carte passe en Alerte, Critique ou Épuisé.
| État | Signification | Réaction attendue |
|---|---|---|
| Alerte | Seuil d'alerte franchi | Prévenir le responsable, observer la pente |
| Critique | Seuil critique franchi | Décider : relever la limite, ou restreindre l'usage |
| Épuisé | Limite atteinte | Les nouvelles consommations sont refusées en amont |
- Ouvrez Fenêtres de quota et identifiez le Modèle de limite le plus consommé.
- Ouvrez Flotte d'agents et repérez les exécutions les plus coûteuses.
- Ouvrez Gouvernance & SoD, panneau Audit des accès aux justificatifs, et lisez la colonne Coût (USD) pour attribuer la dépense.
- Décidez :
- Relever la limite → Modifier sur la carte, ajustez, validez. Message : « Budget mis à jour. »
- Restreindre → interrompez les exécutions en cause (R14), et abaissez le plafond d'autonomie du rôle concerné (R7).
- Consignez la décision et son motif.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Carte du budget | État redescendu à Sain après relèvement |
| 2 | Jauge | Dépensé / Restant / % cohérents |
| 3 | Fenêtres de quota | Le pourcentage consommé se stabilise |
| 4 | Page Audit | La modification de budget est tracée |
Rappel : supprimer un budget conserve l'historique de consommation ; seul le lien est dissocié.
#R9 — Activer un drapeau de fonctionnalité progressivement
Déclencheur : mise à disposition d'une nouvelle fonctionnalité.
Rôle requis : opérateur plateforme (flags:manage).
- Ouvrez Feature-flags sur l'environnement de qualification d'abord.
- Cliquez Nouveau flag.
- Clé — minuscules, chiffres,
.,_,-, premier caractère alphanumérique, 128 caractères maximum. Choisissez une clé stable : elle n'est pas modifiable. - Portée — Locataire pour un pilote, Global pour une bascule plateforme.
- Déploiement (%) — laissez 0.
- Description — indiquez la date de création, le responsable et la date de retrait prévue.
- Validez. Le drapeau est créé désactivé.
- Relisez la ligne du tableau avant toute activation.
- Cliquez Activer. Le drapeau est actif à 0 % : encore inerte pour tout le monde.
- Montez le pourcentage par paliers, en observant entre chaque :
| Palier | Attente minimale | Ce que vous observez |
|---|---|---|
| 5 % | 24 h | Défauts ouverts, brèches SLO (page État système) |
| 25 % | 24 h | Idem + budgets |
| 50 % | 48 h | Idem + flotte d'agents |
| 100 % | — | Bascule complète |
- Pour ajuster : Modifier → Déploiement (%) → validez. Message : « Feature-flag mis à jour. »
- En cas de dérive : cliquez Désactiver. Effet immédiat, sans confirmation.
- Rejouez la séquence complète en production.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Ligne du tableau | Colonnes Activé et Déploiement (%) conformes |
| 2 | Page État système | Aucune brèche SLO nouvelle attribuable au palier |
| 3 | Page Budgets | Pas de saut de consommation inexpliqué |
| 4 | Retour arrière testé | Désactiver produit l'effet attendu en moins d'une minute |
⚠️ Le bouton d'activation n'a pas de confirmation. Sur un drapeau global en production, un clic engage toute la plateforme.
⚠️ Un drapeau créé ici ne pilote pas les services backend. Les drapeaux réellement implémentés côté services sont des variables d'environnement. Voir §5.3 et §9.
#R10 — Changer le modèle de langage par défaut
Déclencheur : nouveau modèle disponible, changement de coût, incident fournisseur.
Rôle requis : administrateur plateforme (models:manage).
- Faites déposer le justificatif du fournisseur dans le coffre (hors portail) et récupérez le chemin.
- Ouvrez Modèles & adaptateurs.
- Notez la configuration par défaut actuelle — c'est votre point de retour arrière.
- Cliquez Nouvelle config modèle.
- Renseignez Clé, Fournisseur, Identifiant modèle.
- Renseignez le Chemin Vault (secret/…). Doit commencer par
secret/. - Ne cochez pas encore « Modèle par défaut ».
- Validez. Message : « Configuration de modèle créée. »
- Créez ou ajustez l'adaptateur qui pointe vers cette clé (§3.9), en recopiant la clé exactement.
- Testez sur un locataire de recette ou sur le locataire de démonstration.
- Une fois le test concluant : Modifier la configuration → cochez Modèle par défaut → vérifiez que Activé est coché → validez.
- Rechargez et vérifiez qu'une seule ligne porte la pastille « Par défaut ».
- Ouvrez Gouvernance & SoD et vérifiez que le chemin de coffre apparaît bien dans Politiques d'accès Vault.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Tableau des modèles | Une seule pastille « Par défaut », sur la bonne ligne |
| 2 | Colonne Activé | Activé sur cette même ligne |
| 3 | Panneau Vault (Gouvernance) | Le chemin apparaît, aucun secret visible |
| 4 | Une exécution d'agent réelle | Aboutit ; page Flotte, statut Terminé |
| 5 | Page Budgets | La consommation reste dans les seuils |
Retour arrière : rouvrez l'ancienne configuration, recochez Modèle par défaut, décochez-la sur la nouvelle.
Piège classique. Un modèle par défaut désactivé casse tout sans message clair. Vérifiez toujours les deux cases ensemble.
#R11 — Durcir une politique d'exécution
Déclencheur : revue de sécurité, incident, préparation d'une mise en production.
Rôle requis : administrateur plateforme (policies:manage).
- Ouvrez Garde-fous & exécution.
- Relevez l'état courant : Réseau, Egress (allowlist), Durée max (s), Système de fichiers. Notez-le : c'est votre point de retour arrière.
- Cliquez Modifier sur la politique.
- Politique réseau — laissez ou renforcez le préfixe
deny-. L'interface refuse toute valeur qui ne commence pas pardeny-. - Egress (allowlist) — réduisez la liste au strict nécessaire. Format : hôtes séparés par des virgules. Retirez tout hôte non justifié par un besoin écrit.
- Durée max (secondes) — abaissez jusqu'à la valeur qui n'interrompt pas les traitements légitimes les plus longs. Une durée trop généreuse est une fenêtre d'exfiltration.
- Système de fichiers — visez un espace de travail éphémère uniquement.
- Validez. Message : « Politique d'exécution mise à jour. »
Volet garde-fous
- Vérifiez qu'il existe une règle de refus sur les actions sensibles (déploiement en production, écritures de fichiers larges).
- Vérifiez que les règles de refus ciblées ont une priorité plus petite que les règles d'autorisation larges — la plus petite priorité est évaluée en premier.
- Cochez Exiger une approbation (HITL) même si autorisé sur les actions à effet irréversible.
- Testez avec Évaluer une action : saisissez l'action, cliquez Évaluer, lisez le verdict, le nombre de règles correspondantes et l'identifiant appliqué.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Colonne Réseau | Commence par deny- |
| 2 | Colonne Egress | Ne contient que des hôtes justifiés |
| 3 | Évaluation d'une action sensible | Verdict Refusée, ou Autorisée + Approbation requise |
| 4 | Évaluation d'une action non couverte | Verdict Refusée — refus par défaut confirmé |
| 5 | Exécution légitime | Toujours possible ; page Flotte, statut Terminé |
Nuance importante. Si l'encadré « Évaluateur non raccordé » s'affiche, cela signifie que le simulateur de l'interface est absent — pas que les règles sont inertes. Le texte le dit explicitement : « Les règles ci-dessus restent réelles ». Testez alors par une exécution réelle sur un environnement de recette.
Attention aux nouvelles politiques. Les champs Egress et Système de fichiers n'existent pas dans le formulaire de création. Une politique fraîchement créée a donc une allowlist vide : avec un réseau en
deny-, aucune sortie n'est autorisée. Éditez-la immédiatement après création.
#R12 — Produire un rapport de conformité Loi 25
Déclencheur : demande d'audit, revue trimestrielle, incident.
Rôle requis : opérateur plateforme (audit:export).
- Sélectionnez le locataire concerné. Un rapport porte sur un seul locataire.
- Ouvrez Audit & conformité.
- Exécutez d'abord R13 (vérification de la chaîne) : un rapport dont la chaîne est rompue n'a aucune valeur probante.
- Descendez au panneau Rapports de conformité Loi 25.
- Renseignez Période — début et Période — fin.
- Cliquez Générer le rapport. Message attendu : « Rapport de conformité généré. »
- Lisez la nouvelle ligne : Période · Événements · Chaîne vérifiée · Généré par · Créé le.
- Vérifiez que Chaîne vérifiée affiche Oui.
- Cliquez Exporter (JSON). Le fichier
loi25-report-<identifiant>.jsonest produit par le navigateur. - Déposez le fichier dans votre coffre documentaire de conformité.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Colonne Chaîne vérifiée | Oui |
| 2 | Colonne Généré par | Votre identité, pas un champ vide |
| 3 | Colonne Événements | Cohérent avec une recherche sur la même période |
| 4 | Fichier exporté | Ouvrable, période conforme |
Une période sans événement produit un rapport valide horodaté, pas une erreur. C'est une attestation d'absence, et elle a de la valeur.
L'export JSON est local au navigateur : il ne laisse aucune trace serveur. Si votre politique impose de tracer les extractions, consignez-les manuellement.
#R13 — Vérifier l'intégrité de la chaîne d'audit
Déclencheur : contrôle hebdomadaire, préalable à tout rapport, soupçon d'altération.
Rôle requis : lecteur suffit (config:read).
- Sélectionnez le locataire.
- Ouvrez Audit & conformité.
- Cliquez Vérifier la chaîne.
- Lisez le résultat :
| Résultat | Encadré | Suite |
|---|---|---|
| Saine | « Chaîne d'audit valide — n entrée(s) recalculées et vérifiées : aucune altération détectée. » | Consignez le nombre d'entrées et la date |
| Rompue | « Chaîne d'audit compromise — Rupture détectée à l'entrée #id (motif : raison, position index). » | Passez immédiatement en réponse à incident |
- En cas de rupture :
- Capturez l'écran : identifiant, motif, position.
- N'effectuez plus aucune écriture sur ce locataire.
- Alertez le responsable sécurité.
- Générez tout de même un rapport de conformité : il figera la constatation.
- Ouvrez le processus de réponse à incident en six phases (guide de durcissement).
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Encadré affiché | « Chaîne d'audit valide » |
| 2 | Nombre d'entrées vérifiées | Non nul et croissant d'une semaine sur l'autre |
| 3 | Consignation | Date, locataire, nombre d'entrées, opérateur |
#R14 — Interrompre une exécution d'agent
Déclencheur : boucle, coût anormal, comportement inattendu, incident de sécurité.
Rôle requis : opérateur plateforme (fleet:interrupt).
- Sélectionnez le locataire.
- Ouvrez Flotte d'agents.
- Identifiez l'exécution : nom de l'agent, statut En cours ou En file, étape courante, horodatage de mise à jour.
- Avant de couper, cliquez la ligne pour ouvrir le Détail du run : Projet, Budget d'étapes, Démarré, Erreur du run. Notez ces informations : elles disparaissent de la vue active après interruption.
- Cliquez Interrompre.
- Lisez la confirmation : « Interrompre le run ? — Le run passera à l'état terminal « failed ». Cette action est irréversible. »
- Confirmez. Message attendu : « Run interrompu. »
- Vérifiez que le statut affiche Échoué.
- Si le motif est un coût : enchaînez sur R8.
- Si le motif est un comportement anormal : envisagez R7 (abaisser le plafond) ou §3.13 (mettre le membre du personnel virtuel en pause — nécessite le rôle administrateur).
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Statut de l'exécution | Échoué |
| 2 | Compteur « actifs » | Décrémenté |
| 3 | Page Audit, filtre Acteur = vous | L'interruption est journalisée |
| 4 | Page Budgets | La consommation cesse de croître pour cette portée |
Il n'y a pas de reprise : la seule suite est une nouvelle exécution.
Il n'existe pas d'interruption de masse ni de vue tous-locataires : le service isole les exécutions par locataire, et l'interface l'annonce (« Agrégation cross-tenant — écart backend »). Pour un incident touchant plusieurs locataires, répétez la procédure locataire par locataire.
#R15 — Provisionner puis réinitialiser le locataire de démonstration
Déclencheur : préparation d'une démonstration, remise à zéro après passage.
Rôle requis : administrateur plateforme (demo:manage, flags:manage).
Phase A — activer le module
- Ouvrez Feature-flags.
- Cherchez la clé
DEMO_MODULE_ENABLED. Si elle n'existe pas, créez-la avec la portée Locataire — le locataire de démonstration, jamais un autre. - Cliquez Activer.
- Ouvrez Démo et vérifiez que le champ Activé est passé au vert.
Phase B — provisionner
- Choisissez le Mode de provisionnement :
- Rédigé (déterministe, sans LLM) — recommandé pour une démonstration commerciale : reproductible et sans consommation.
- Agentique (exécutions LLM réelles via passerelle) — pour montrer les agents à l'œuvre ; consomme du budget réel.
- Cliquez Provisionner. Message attendu : « Démo provisionnée ».
- Attendez le rafraîchissement automatique (15 secondes) ou cliquez Actualiser.
- Vérifiez : Provisionné = Oui, Ressources non nul, Version du manifeste renseignée, Projets listés.
Phase C — réinitialiser après la démonstration
- Cliquez Réinitialiser. Aucune confirmation n'est demandée.
- Message attendu : « Démo réinitialisée ».
- Vérifiez que le compte de ressources correspond de nouveau au manifeste.
Phase D — retirer (optionnel)
- Cliquez Supprimer, puis confirmez : « Archive les projets de démo et oublie le manifeste. Le tenant reste isolé par RLS ; réversible via Provisionner. »
- Message attendu : « Démo supprimée ».
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Champ Activé | Pastille Activé |
| 2 | Champ Provisionné | Oui |
| 3 | Champ Ressources | Compte non nul, stable après réinitialisation |
| 4 | Champ Tenant de démo | L'identifiant réservé, jamais un locataire réel |
| 5 | Portail client, connecté au locataire de démo | Projets visibles et navigables |
Le tableau du manifeste n'affichera jamais le détail des ressources : c'est un écart connu (§9). Seul le résumé « n ressources semées » s'affiche. Ce n'est pas une panne.
Ne créez jamais le drapeau
DEMO_MODULE_ENABLEDen portée Globale. Cela ouvrirait le module de démonstration sur tous les locataires.
#R16 — Basculer un environnement de dev-headers vers jwt
Déclencheur : ouverture d'un environnement à des utilisateurs réels, durcissement avant lancement. Rôle requis : administrateur plateforme + équipe d'exploitation. Criticité : cette bascule a déjà provoqué une interruption de service. Suivez l'ordre.
- Préparer le serveur d'identité. Vérifiez le domaine d'identité, le client public PKCE du portail d'administration, et la déclaration de l'URI de redirection
<origine>/auth/callback. - Trancher la question du domaine. La configuration partagée du backend décrit
ssocomme domaine réellement exploité et qualifiekyspectrade résiduel. Faites arbitrer ce point avant la bascule ; un domaine erroné rend la vérification de signature impossible. - Vérifier la règle de sortie réseau vers le serveur d'identité. Sur un espace en refus-par-défaut, l'absence de cette règle empêche la passerelle de récupérer les clés de signature : elle redémarre en boucle et tout le portail tombe, avec un symptôme qui ressemble à une erreur de partage de ressources entre origines. C'est un incident déjà survenu en production.
- Basculer le backend en mode
jwt. - Vérifier la santé de la passerelle avant de toucher au portail : elle doit répondre et servir l'agrégat de santé.
- Reconstruire le portail avec le mode
jwtet les paramètres du serveur d'identité. - Déployer le portail.
- Tester la connexion : ouvrez le portail, vérifiez la redirection vers l'écran de connexion, authentifiez-vous, vérifiez le retour sur
/auth/callback. - Vérifier l'identité dérivée : page Configuration → le panneau doit être en lecture seule avec la mention « Identité dérivée de la session Keycloak (jeton) — non modifiable ici. »
- Vérifier les rôles : les pastilles doivent refléter les rôles du jeton, pas des cases cochées.
- Vérifier chaque destination : parcourez les seize et confirmez qu'aucune n'affiche d'erreur d'autorisation.
- Vérifier le tableau de santé : l'agrégat doit répondre. Sous
jwt, il exige le jeton — un tableau entièrement rouge après bascule signale un jeton non transmis.
Critères de vérification
| # | À vérifier | Attendu |
|---|---|---|
| 1 | Ouverture du portail sans session | Redirection vers l'écran de connexion |
| 2 | Page Configuration | Panneau d'identité en lecture seule |
| 3 | Rôles affichés | Issus du jeton |
| 4 | Page État système | Services En service, pas « Sonde indisponible » |
| 5 | Flotte d'agents | L'activité se rafraîchit (sondage, pas flux) |
| 6 | Une écriture gardée | Aboutit avec le bon rôle, échoue proprement sans |
| 7 | Journal d'audit | L'acteur est l'identifiant issu du jeton |
Retour arrière : reconstruire et redéployer le portail en dev-headers, et repasser le backend en dev-headers. Les deux doivent bouger ensemble, dans les deux sens.
#5. Réglages globaux — inventaire exhaustif
Trois familles de réglages coexistent. Ne les confondez pas : elles n'ont ni le même cycle de vie, ni la même portée, ni le même risque.
| Famille | Où | Prise d'effet | Qui peut changer |
|---|---|---|---|
| A. Réglages d'interface, locaux au navigateur | Portail | Immédiate, pour vous seul | Toute personne devant l'écran |
| B. Réglages de plateforme, persistés côté serveur | Portail | Immédiate, pour tout le monde | Selon la capacité |
| C. Variables d'environnement | Construction / déploiement | Après reconstruction ou redéploiement | Exploitation |
#5.1 Famille A — réglages locaux au navigateur
Ces valeurs vivent dans le stockage local du navigateur. Elles ne sont pas synchronisées entre postes et disparaissent avec le profil du navigateur.
| Réglage | Où le changer | Clé de stockage | Défaut réel | Effet | Risque si mal réglé |
|---|---|---|---|---|---|
| Locataire actif | Sélecteur de la barre supérieure, ou bouton Sélectionner sur la page Locataires | spx-admin-tenant |
Vide (ou la valeur de semis de développement) | Détermine le locataire de toutes les pages portées | Élevé. Agir sur le mauvais locataire : créer un utilisateur au mauvais endroit, interrompre l'exécution d'un tiers |
| Identité agissante | Page Configuration (mode dev-headers seulement) |
Magasin d'identité local | Vide (ou la valeur de semis) | Valeur de l'en-tête X-User-ID sur les actions de gouvernance |
Élevé. Une décision attribuée à la mauvaise personne fausse la séparation des devoirs et l'audit |
| Rôles plateforme | Page Configuration (mode dev-headers seulement) |
Magasin d'identité local | Vide (ou la valeur de semis) | Détermine les boutons actifs | Critique en dev-headers : auto-déclaration sans preuve |
| Thème | Sélecteur de thème | spx-theme |
system |
Clair / Sombre / Système | Aucun |
| Langue | Sélecteur de langue | kyspectra.locale |
fr |
Bascule FR/EN sans rechargement | Aucun |
| Rail de navigation replié | Bouton Réduire le rail de navigation | spx-admin-rail-collapsed |
Déployé | Confort d'affichage | Aucun |
En mode
jwt, l'identité et les rôles ne sont plus des réglages : ce sont des lectures du jeton. Le portail les affiche sans permettre de les modifier.
#5.2 Famille B — réglages de plateforme, persistés
Ces réglages sont écrits côté serveur et s'appliquent à tout le monde.
| # | Réglage | Destination | Champs et contraintes | Défaut réel | Effet exact | Risque si mal réglé |
|---|---|---|---|---|---|---|
| 1 | Locataire | Locataires | Slug (3–40, minuscules/chiffres/tirets), Nom affiché, Plan (texte libre) | Plan pré-rempli à starter |
Crée une organisation isolée | Élevé. starter n'existe pas : locataire orphelin de plan |
| 2 | Utilisateur | Utilisateurs | Courriel valide, mot de passe ≥ 8 avec majuscule/minuscule/chiffre | Statut Actif | Crée un compte dans le locataire courant | Moyen. Compte créé dans le mauvais locataire |
| 3 | Rôle d'utilisateur | Utilisateurs | VIEWER, EDITOR, PUBLISHER, ADMIN, OWNER |
Aucun rôle à la création | Applique immédiatement le mappage côté serveur d'identité | Élevé. OWNER accordé par confort = accès total au locataire |
| 4 | Statut d'utilisateur | Utilisateurs | En attente / Actif / Inactif / Suspendu / Supprimé | Actif | Contrôle l'accès | Moyen |
| 5 | Dérogation de permission | Utilisateurs | Clé, Effet (Autoriser/Refuser), Priorité (entier), Motif | Effet Autoriser, Priorité 0 |
Surcharge la permission résolue | Élevé. Une dérogation Autoriser oubliée contourne durablement le modèle de rôles |
| 6 | Budget | Budgets & quotas | Portée (texte), Limite USD ≥ 0, Seuils 0–100 | Alerte 80, Critique 95 | Plafond de dépense et signal de dérive | Moyen. Portée mal orthographiée = budget jamais consommé |
| 7 | Feature-flag | Feature-flags | Clé (regex, ≤ 128), Portée Global/Locataire, Déploiement 0–100, Description | Créé désactivé, 0 % | Active une fonctionnalité par palier déterministe | Élevé en portée Globale : effet plateforme sans confirmation |
| 8 | Configuration de modèle | Modèles & adaptateurs | Clé, Fournisseur, Identifiant modèle, Chemin secret/…, Par défaut, Activé |
Non par défaut ; activé | Déclare un modèle utilisable | Critique. Un secret collé dans le champ de chemin est persisté en clair |
| 9 | Adaptateur d'assistant | Modèles & adaptateurs | Clé, Assistant (claude_code/codex/cursor/api), Clé de modèle liée, Chemin Vault |
Assistant claude_code |
Route les appels vers un modèle | Moyen. Clé liée non vérifiée à la saisie |
| 10 | Garde-fou | Garde-fous & exécution | Identifiant, Motif d'action, Effet, Priorité, Approbation requise | Effet Refuser, Priorité 100 | Autorise ou refuse une famille d'actions | Critique. Une règle Autoriser large en priorité basse neutralise les refus |
| 11 | Politique d'exécution | Garde-fous & exécution | Identifiant, Réseau (préfixe deny- obligatoire), Egress, Durée max, Système de fichiers |
Réseau deny-all-egress-except-allowlist, Durée 3600 s |
Bac à sable des agents | Critique. Allowlist trop large = fenêtre d'exfiltration |
| 12 | Compétence globale | Registre | Nom, Description ≥ 20 car., Version, Contenu | Créée en brouillon | Capacité offerte à tous les locataires | Moyen. Contenu analysé à la recherche de secrets |
| 13 | Serveur d'outils MCP | Registre | Nom, Endpoint, Transport, Authentification, Chemin Vault, En-têtes JSON, Délai, Chemin de santé | Transport http, authentification Aucune |
Ouvre un outil externe aux agents | Critique. Endpoint non maîtrisé + authentification mal cadrée |
| 14 | Prompt global | Registre | Nom, Phase (10 valeurs), Risque, Version, Corps | Phase specify, risque à choisir |
Modèle de prompt gouverné | Faible à moyen |
| 15 | Révocation de capacité | Registre | Motif obligatoire | — | Désactive toutes les liaisons associées | Élevé. Effet large et immédiat |
| 16 | Statut d'agent | Agents IA | Actif / Inactif | Selon le registre | Écrit dans le registre central, effet plateforme | Élevé. Désactiver un agent le retire pour tous les locataires |
| 17 | Statut de personnel virtuel | Workforce | Actif / En pause | Actif | Suspend la prise de tâches | Moyen |
| 18 | Plafond d'autonomie de rôle | Rôles IA | N0 / N1 / N2 / N3 | N1 en repli | Borne l'autonomie ; le plan borne encore | Élevé. N3 sur un rôle à effet irréversible |
| 19 | Liaison de capacité à un rôle | Rôles IA | Type (Compétences/Outils/Prompts), capacité approuvée obligatoire | — | Ajoute la capacité au bundle du rôle | Élevé selon la capacité |
| 20 | Module de démonstration | Démo | Mode authored / agentic |
Mode Rédigé | Provisionne, réinitialise ou archive le locataire de démonstration | Faible — l'action est confinée au locataire réservé |
| 21 | Champs personnalisés d'organisation | Locataires | Attributs typés + JSON libre | Selon le schéma | Métadonnées d'organisation | Faible |
#5.3 Famille C — variables d'environnement du portail
Toutes préfixées NEXT_PUBLIC_ et inlinées au moment de la construction. Les modifier exige une reconstruction puis un redéploiement ; il n'existe aucun moyen de les changer depuis l'interface.
#Routage vers les services
| Variable | Défaut livré | Effet | Risque si mal réglée |
|---|---|---|---|
NEXT_PUBLIC_API_BASE |
http://localhost:4100 dans l'exemple |
Origine unique de la passerelle ; les segments de portée sont injectés automatiquement | Critique. Valeur absente = repli sur les ports locaux ⇒ portail entièrement vide en ligne |
NEXT_PUBLIC_USER_SERVICE_BASE |
vide | Accès direct au service utilisateur (port 4101) | Élevé. Contourne la passerelle, donc ses contrôles |
NEXT_PUBLIC_PLATFORM_CONFIG_BASE |
vide | Direct (4112) | Élevé |
NEXT_PUBLIC_AUDIT_BASE |
vide | Direct (4113) | Élevé |
NEXT_PUBLIC_OBSERVABILITY_BASE |
vide | Direct (4114) | Moyen |
NEXT_PUBLIC_BILLING_BASE |
vide | Direct (4115) | Moyen |
NEXT_PUBLIC_EXTENSION_REGISTRY_BASE |
vide | Direct (4116) | Élevé |
NEXT_PUBLIC_AGENT_RUNTIME_BASE |
vide | Direct (4119) | Élevé |
NEXT_PUBLIC_PROMPT_ORCHESTRATION_BASE |
vide | Direct (4123) | Moyen |
NEXT_PUBLIC_AI_ORCHESTRATOR_BASE |
vide | Direct (4106) | Élevé |
NEXT_PUBLIC_DEMO_ORCHESTRATOR_BASE |
vide | Direct (4132) | Faible |
NEXT_PUBLIC_CUSTOM_FIELDS_API_BASE |
vide | Alimente le panneau de champs personnalisés | Faible. Vide ⇒ état « non raccordé » honnête |
NEXT_PUBLIC_AGENTIC_CORE_BASE |
— | Base du service de personnel virtuel (port 8095 en local) | Moyen. Mal réglée ⇒ « Effectifs indisponibles » |
Règle de résolution rappelée : variable dédiée → passerelle → port local. La page Configuration affiche la cible réellement retenue et une pastille passerelle ou direct.
#Authentification
| Variable | Défaut livré | Effet | Risque |
|---|---|---|---|
NEXT_PUBLIC_AUTH_MODE |
vide ⇒ dev-headers |
Choisit le mode d'authentification | Critique. Laisser vide sur un environnement exposé = pas d'authentification |
NEXT_PUBLIC_KEYCLOAK_URL |
https://keycloak.i2tdigital.com |
Serveur d'identité | Élevé |
NEXT_PUBLIC_KEYCLOAK_REALM |
kyspectra |
Domaine d'identité | Élevé. Divergence documentée avec sso — à trancher |
NEXT_PUBLIC_KEYCLOAK_CLIENT_ID |
kyspectra-admin-portal |
Client public PKCE | Élevé. URI de redirection non déclarée ⇒ connexion impossible |
#Semis de développement
| Variable | Défaut | Effet | Risque |
|---|---|---|---|
NEXT_PUBLIC_DEV_TENANT_ID |
vide | Pré-remplit le locataire au premier chargement | Moyen. Un identifiant de production câblé ici crée un risque d'action sur le mauvais locataire |
NEXT_PUBLIC_DEV_ADMIN_ID |
vide | Pré-remplit l'identité agissante | Élevé en dev-headers |
NEXT_PUBLIC_DEV_ADMIN_ROLES |
vide | Pré-coche les rôles plateforme | Critique en dev-headers. Pré-cocher platform_admin donne les pleins pouvoirs à quiconque ouvre la page |
NEXT_PUBLIC_DEMO_TENANT_ID |
d3300000-0000-4000-8000-000000000001 |
Locataire de démonstration ciblé | Faible. Le service refuse tout autre locataire |
Aucune de ces variables n'est un secret — ce sont des URL, des identifiants publics et des UUID. Elles sont visibles dans le paquet servi au navigateur, par construction. N'y placez jamais une clé, un jeton ou un mot de passe.
#5.4 Variables d'environnement des services backend
Ces variables ne se règlent pas depuis le portail, mais elles conditionnent ce que le portail peut faire. Les valeurs ci-dessous sont celles du code.
| Variable | Défaut réel | Effet | Conséquence visible dans le portail |
|---|---|---|---|
AUTH_MODE |
dev-headers |
Mode d'authentification serveur | Doit être identique au mode du portail |
REGISTRY_VIRTUAL_ROLES_ENABLED |
False |
Ouvre le plan des rôles virtuels | Page Rôles IA : « Rôles virtuels IA désactivés » |
REGISTRY_TIERED_SCOPES_ENABLED |
False |
Portées global / locataire / utilisateur | Page Registre : « Registre à plusieurs niveaux désactivé » |
DEMO_MODULE_ENABLED |
False |
Ouvre le module de démonstration | Page Démo : actions verrouillées |
AGENT_REGISTRY_ENABLED |
True |
Registre central d'agents | Page Agents IA alimentée |
DEPLOY_LIVE |
False |
Interrupteur maître des exécuteurs réels | Désactivé ⇒ refus honnête, jamais de déploiement simulé |
DEPLOY_REQUIRE_APPROVAL |
False |
Approbation humaine avant déploiement, approbateur ≠ demandeur | Activé ⇒ conflit typé si la règle n'est pas respectée |
GOLIVE_ENABLED |
False (mis à vrai en développement et production à l'exécution) |
Ouvre la mise en ligne sur sous-domaine | — |
RPA_BROWSER_ENABLED |
False |
Automatisation de navigateur | Conditionne les liaisons d'outils RPA |
SESSION_GOVERNOR_ENABLED |
False |
Gouverneur de session | — |
CHECKPOINT_STORE_ENABLED |
False |
Points de reprise | — |
EVIDENCE_SCRUB_ENABLED |
True |
Nettoyage des preuves | — |
SPEC_APPLY_ENABLED |
False |
Application de spécification | — |
VCS_MULTI_PROVIDER_ENABLED |
False |
Multi-fournisseurs de gestion de versions | — |
KYSPECTRA_DEV_IMPLICIT_OWNER |
non défini | Promotion implicite au rôle propriétaire en développement | Ne jamais activer hors poste de développement |
⚠️ Constat à connaître. Vingt-cinq noms de drapeaux apparaissent dans les documents de conception (préfixes
IGNITION_,MKT_,STAFF_,WORKFORCE_) sans exister nulle part dans le code. Ce sont des noms de conception, pas des réglages. Ne les cherchez pas et ne les documentez pas comme configurables.
#5.5 Rapport entre drapeaux du portail et drapeaux des services
Point de confusion fréquent, à énoncer clairement :
| Drapeaux de la page Feature-flags | Drapeaux des services | |
|---|---|---|
| Stockage | Base de données du service de configuration | Variables d'environnement du conteneur |
| Portée | Global ou par locataire | Par service et par environnement |
| Modification | Depuis le portail, effet immédiat | Redéploiement du service |
| Déploiement progressif | Oui, 0 à 100 % déterministe | Non — binaire |
| Qui les lit | Le code qui interroge le service de configuration | Le code du service au démarrage |
Créer dans la page Feature-flags une clé qui porte le nom d'une variable de service ne modifie pas ce service. L'unique exception documentée est DEMO_MODULE_ENABLED, que la page Démo indique explicitement d'activer par ce chemin.
#6. Sécurité et conformité
#6.1 Isolation multi-locataire, et pourquoi un 404 plutôt qu'un 403
Chaque requête portée transporte un identifiant de locataire. La résolution suit une précédence stricte :
- L'en-tête
X-Tenant-ID; - À défaut, le locataire porté par le jeton vérifié ;
- À défaut, le paramètre de requête.
Si l'identifiant demandé est en désaccord avec celui du jeton, la réponse est 404 — pas 403.
Ce choix est délibéré et il faut savoir l'expliquer.
| Réponse | Ce qu'elle révèle | Conséquence |
|---|---|---|
| 403 Interdit | « Cette ressource existe, mais vous n'y avez pas droit » | Confirme l'existence de la ressource d'un tiers |
| 404 Introuvable | « Il n'y a rien ici pour vous » | Ne révèle rien |
Un 403 est une fuite d'information. Il permet d'énumérer les identifiants d'un concurrent, de confirmer qu'une organisation est cliente, de deviner des volumes. Le 404 supprime ce canal. C'est un masquage d'existence, exigence directe de la protection des renseignements personnels.
Conséquence pratique pour vous : un 404 sur une ressource que vous savez exister signifie presque toujours un mauvais locataire sélectionné, pas une ressource supprimée. C'est le premier réflexe de diagnostic.
Un unique aménagement existe : un administrateur de plateforme vérifié peut cibler le locataire technique de plateforme. C'est ce qui permet aux pages Registre et Rôles IA de fonctionner.
#6.2 Journal d'audit chaîné
Chaque entrée porte une empreinte calculée à partir de son contenu et de l'empreinte de l'entrée précédente. Modifier une entrée passée invalide toutes les suivantes.
Aucun diagramme à afficher
Diagramme 2 — flowchart
Propriétés :
| Propriété | Détail |
|---|---|
| Ajout seul | Aucune route de modification ni de suppression n'existe |
| Chaînage | Chaque empreinte dépend de la précédente |
| Vérifiable à la demande | Bouton Vérifier la chaîne — recalcul complet |
| Localisation de la rupture | Identifiant, motif et position de la première rupture |
| Attestable | Rapport de conformité avec l'indicateur Chaîne vérifiée |
Ce que le journal ne fait pas : il ne trace pas l'export JSON local (produit par le navigateur), et il ne remplace pas les journaux d'infrastructure.
#6.3 Séparation des devoirs
Trois barrières successives :
| Niveau | Mécanisme | Effet |
|---|---|---|
| 1. Interface | Le bouton d'approbation est désactivé si vous êtes le soumetteur | Empêche la tentative |
| 2. Explication | Encadré « Auto-approbation interdite » | Rend la règle compréhensible |
| 3. Base de données | Conflit typé sod/self-approval-forbidden |
Autorité réelle — incontournable |
Le rejet reste possible par le soumetteur : retirer sa propre demande n'est pas un contournement.
Le second contrôle est asymétrique par conception : proposer un élargissement (secret_access:widen) est ouvert à l'opérateur ; l'approuver (secret_access:approve) est réservé à l'administrateur. Un opérateur ne peut donc jamais boucler seul le cycle.
Implication d'organisation. Il faut au moins deux administrateurs plateforme distincts en exploitation. Avec un seul, aucune publication de capacité globale ne peut être approuvée : la plateforme se bloque par construction. Prévoyez-en trois pour couvrir les absences.
#6.4 Refus par défaut
| Domaine | Comportement en l'absence de règle |
|---|---|
| Garde-fous | Toute action non couverte est refusée et journalisée sous une politique de refus par défaut |
| Politique réseau d'exécution | Préfixe deny- imposé par l'interface |
| Allowlist d'egress d'une politique neuve | Vide ⇒ aucune sortie autorisée |
| Autonomie de rôle | Valeur inconnue ou dégradation ⇒ repli sur N1 |
| Droits de plan en écriture | Échec fermé vers le plan gratuit |
| Liaison de capacité | Impossible tant que la capacité n'est pas approuvée |
Message affiché quand la table de garde-fous est vide : « Aucune règle de garde-fou. L'évaluation refuse toute action par défaut. »
#6.5 Gestion des secrets par coffre
Règle unique : le portail ne voit jamais un secret. Il ne manipule que des chemins et des noms de sous-clés.
| Endroit | Ce que vous saisissez | Ce qui est stocké |
|---|---|---|
| Configuration de modèle | Chemin commençant par secret/ |
Le chemin |
| Adaptateur d'assistant | Chemin commençant par secret/ |
Le chemin |
| Serveur d'outils MCP | Chemin + noms des sous-clés | Le chemin et les noms |
| Panneau Vault (Gouvernance) | — (lecture seule) | Vue dérivée |
Trois contrôles concourants :
- Validation de forme — un chemin qui ne commence pas par
secret/est refusé. - Analyse de contenu — les instructions de compétence sont analysées à la recherche de secrets avant publication.
- Séparation des devoirs — l'élargissement d'un accès à un justificatif exige un second contrôle.
En cas de suspicion de secret exposé :
- Effectuez la rotation du secret dans le coffre.
- Corrigez ou supprimez la configuration fautive.
- Révoquez la capacité concernée avec un motif explicite.
- Exportez le journal d'audit sur la période.
- Ouvrez la procédure de réponse à incident.
#6.6 Que faire en cas d'incident de confidentialité
Réaction immédiate, dans l'ordre :
- Constater et horodater. Notez l'heure, le locataire, la ressource, le canal de découverte.
- Figer. Vérifiez la chaîne d'audit (R13) et générez un rapport de conformité sur la période (R12) : cela fige la constatation avec attestation d'intégrité.
- Contenir. Retirez les accès (R3), interrompez les exécutions (R14), révoquez les capacités impliquées (§3.11), désactivez le drapeau qui exposait la fonctionnalité (R9).
- Qualifier. Déterminez la nature des renseignements en cause, le nombre de personnes concernées, et si le risque est sérieux — c'est ce dernier point qui déclenche l'obligation de déclaration.
- Notifier. Selon la qualification, informez l'autorité compétente et les personnes concernées. Les délais et le contenu relèvent du responsable de la protection des renseignements personnels, pas de l'administrateur plateforme.
- Corriger et consigner. Corrigez la cause, documentez, et versez le rapport de conformité au registre des incidents.
Ce que le produit vous apporte pour cette procédure :
| Besoin | Outil |
|---|---|
| Qui a fait quoi, quand | Journal d'audit, filtres Acteur / Action / Ressource |
| Preuve de non-altération | Vérification de chaîne |
| Attestation datée | Rapport Loi 25 |
| Empêcher la fuite d'existence | Masquage par 404 |
| Preuve d'accès aux justificatifs | Audit des appels d'outils, avec empreintes d'arguments |
| Isolation de la démonstration | Locataire réservé, isolé par sécurité au niveau des lignes |
#7. Supervision quotidienne, hebdomadaire et mensuelle
#7.1 Santé des services
Neuf services sont sondés. Trois états, à distinguer rigoureusement :
| État affiché | Signification | Action |
|---|---|---|
| En service | Le service a répondu ; un vrai SELECT 1 a été exécuté sur son magasin |
Aucune |
| Hors service | Le service a été joint et a répondu en échec | Diagnostic ciblé sur ce service |
| Sonde indisponible | La sonde n'a pas pu s'exécuter | Diagnostic sur la passerelle ou le routage, pas sur le service |
Une bascule répétée entre En service et Hors service sur un service à réplique unique indique presque toujours une sonde de vitalité couplée à la base de données : à la moindre latence, le conteneur est redémarré. Voir §8.
#7.2 Indicateurs à suivre
| Indicateur | Où | Seuil d'attention |
|---|---|---|
| Services hors service | État système | ≥ 1 |
| Sondes indisponibles | État système | ≥ 1 |
| Progression | État système | Régression d'une semaine sur l'autre |
| Défauts ouverts | État système | Croissance continue sur 7 jours |
| Incidents ouverts | État système | ≥ 1 non traité à 24 h |
| Défauts échappés | État système | Toute valeur non nulle |
| Brèches SLO récentes | État système | ≥ 1 |
| Exécutions en échec | Flotte d'agents | Proportion en hausse |
| Exécutions bloquées | Flotte d'agents | Statut inchangé depuis > 1 h |
| Budgets en Alerte | Budgets | ≥ 1 |
| Budgets en Critique / Épuisé | Budgets | Toute occurrence |
| Fenêtres de quota | Budgets | % consommé > 80 |
| Coût par appel d'outil | Gouvernance | Rupture de tendance |
| Revues en attente | Gouvernance | > 48 h sans décision |
| Agents inactifs | Agents IA | Écart avec l'attendu |
| Personnel en pause | Workforce | En pause depuis > 24 h |
#7.3 Rituel quotidien — 10 minutes
- État système, locataire principal : lisez le bandeau de synthèse.
- Vérifiez qu'aucun service n'est Hors service ni en Sonde indisponible.
- Lisez Brèches SLO récentes et Incidents ouverts.
- Flotte d'agents : repérez les exécutions bloquées ou en échec anormal.
- Budgets : vérifiez qu'aucune carte n'est passée en Alerte ou au-delà.
- Gouvernance : traitez les revues en attente qui vous ont été signalées.
- Répétez les points 1 à 5 pour chaque locataire actif significatif.
#7.4 Rituel hebdomadaire — 45 minutes
- Vérifiez la chaîne d'audit de chaque locataire actif (R13). Consignez le nombre d'entrées.
- Revue des accès : parcourez la page Utilisateurs de chaque locataire. Cherchez les comptes sans activité, les rôles trop élevés, les
OWNERmultiples. - Revue des dérogations : toute dérogation
Autorisersans motif écrit est à réexaminer. - Revue des drapeaux : tout drapeau à 100 % depuis plus d'un mois devrait être retiré du code puis supprimé. Tout drapeau à 0 % depuis longtemps est probablement mort.
- Revue des budgets : comparez la consommation à la semaine précédente.
- Revue du registre : vérifiez qu'aucune entrée n'est restée en attente de revue plus d'une semaine.
- Revue de la flotte : proportion d'échecs, durées anormales.
#7.5 Rituel mensuel — 2 heures
- Rapport de conformité Loi 25 par locataire (R12), avec export et archivage.
- Revue complète des accès : liste nominative, rôle, justification, date de dernière connexion. Faites valider par le responsable de chaque locataire.
- Revue des politiques d'exécution : chaque hôte de l'allowlist d'egress doit avoir une justification écrite. Retirez les autres.
- Revue des garde-fous : vérifiez l'ordre des priorités ; testez cinq actions sensibles avec Évaluer une action.
- Revue des modèles : coût par modèle, pertinence du modèle par défaut, configurations orphelines.
- Revue des serveurs d'outils MCP : chaque serveur est-il encore utilisé ? Ses justificatifs ont-ils été renouvelés ?
- Revue des plafonds d'autonomie : chaque rôle en N2 ou N3 est-il toujours justifié ?
- Test de retour arrière : sur l'environnement de qualification, désactivez puis réactivez un drapeau, et mesurez le temps de bascule.
- Revue des écarts connus (§9) : lesquels ont été corrigés, lesquels persistent ?
#7.6 Ce que la supervision ne couvre pas
| Angle mort | Contournement |
|---|---|
| Vue cross-locataires de la flotte | Répéter locataire par locataire (écart backend assumé) |
| File unifiée des revues en attente | Suivre les identifiants de sujet hors portail |
| Alerte poussée | Le portail n'envoie ni courriel ni notification : la supervision est active, pas passive |
| Latence par service en mode passerelle | Toujours 0 ms — utiliser l'observabilité d'infrastructure |
| Historique de santé | Seule une tendance de session est conservée ; rien ne persiste entre deux ouvertures |
#8. Dépannage administrateur
#8.1 Tableau symptôme → cause → action
Trente entrées, classées par famille. La colonne « Cause » indique la cause la plus probable, pas la seule.
| # | Symptôme observé | Cause probable | Action |
|---|---|---|---|
| 1 | Tout le portail affiche des erreurs de partage de ressources entre origines, la passerelle redémarre en boucle | Sur un espace en refus-par-défaut, la règle de sortie réseau vers le serveur d'identité est absente. La passerelle ne peut pas récupérer les clés de signature et s'arrête au démarrage. Incident déjà survenu en production. | Ajouter la règle de sortie vers le serveur d'identité sur le port 443, redémarrer la passerelle, vérifier l'agrégat de santé. Prévoir au moins deux répliques pour la passerelle. |
| 2 | Un service à réplique unique bascule sans cesse entre En service et Hors service | Sonde de vitalité couplée à la base de données : à la moindre latence, le conteneur est redémarré, et la passerelle renvoie 503 pendant ce temps. | Faire pointer la sonde de vitalité sur un point de vie découplé du magasin, et porter le service à au moins deux répliques. Auditer tous les services : le défaut est systémique. |
| 3 | Connexion réussie, mais tous les écrans sont vides | Modes d'authentification incohérents : portail en jwt, backend en dev-headers — le jeton n'est jamais lu comme autorité. |
Aligner les deux modes. Les deux bougent ensemble, dans les deux sens. |
| 4 | 401 systématiques, aucun écran de connexion ne s'affiche | Inverse du précédent : portail en dev-headers, backend en jwt. |
Reconstruire le portail en jwt et redéployer. |
| 5 | Redirection en boucle vers l'écran de connexion | URI de redirection <origine>/auth/callback non déclarée sur le client, ou domaine d'identité erroné. |
Déclarer l'URI ; trancher la divergence entre les domaines kyspectra et sso. |
| 6 | Tableau de santé entièrement rouge après une bascule en jwt |
L'agrégat de santé passe par la même route que les autres appels : sans jeton, il répond 401. | Vérifier que la session est active et que le jeton est bien attaché. Distinguer « Hors service » de « Sonde indisponible ». |
| 7 | Message « Sondes de santé indisponibles » | La sonde a répondu autre chose que 200 ou 503 (404, 502…). Ce n'est pas une panne générale des services. | Vérifier NEXT_PUBLIC_API_BASE sur la page Configuration, et que la passerelle est servie sous le préfixe attendu. |
| 8 | Latence affichée à 0 ms sur toutes les lignes |
Comportement attendu en mode passerelle : l'agrégat n'expose pas la latence par service. | Aucune action. Utiliser l'observabilité d'infrastructure pour la latence. |
| 9 | Un panneau reste vide, sans message d'erreur | Aucun locataire sélectionné : le client refuse localement en 428 tenant_required. |
Renseigner le locataire dans le sélecteur de la barre supérieure. |
| 10 | « Aucun locataire sélectionné » alors qu'un locataire a été choisi | La sélection vit dans le stockage local du navigateur : profil différent, navigation privée, ou stockage purgé. | Resélectionner. Envisager un semis d'environnement pour les postes d'exploitation. |
| 11 | Une action de gouvernance échoue immédiatement, sans appel réseau | 428 actor_required : aucune identité agissante définie. |
Renseigner l'identifiant sur la page Configuration (mode dev-headers), ou se connecter (mode jwt). |
| 12 | 404 sur une ressource dont vous savez qu'elle existe | Mauvais locataire sélectionné. L'isolation renvoie 404 et non 403, pour ne pas révéler l'existence de la ressource d'un tiers. | Vérifier le sélecteur de locataire. C'est le premier réflexe. |
| 13 | Un bouton est grisé avec « Requiert le rôle Administrateur plateforme. » | Capacité non accordée aux rôles détenus. | Faire exécuter par un administrateur, ou faire attribuer le rôle. Ne jamais contourner. |
| 14 | Le bouton « Approuver (2ᵉ contrôle) » est désactivé | Vous êtes le soumetteur de la revue. Fonctionnement attendu de la séparation des devoirs. | Passer la main à un autre administrateur plateforme. |
| 15 | Conflit sod/self-approval-forbidden renvoyé par le serveur |
Auto-approbation tentée malgré le blocage visuel. | Faire approuver par une autre personne. La base de données est autoritaire. |
| 16 | Encadré « Moteur de permissions non raccordé » | Le point d'entrée des permissions répond 404 ou 501 dans cet environnement. | État honnête, pas une panne. Seule l'attribution de rôles fonctionne. Faire raccorder le service. |
| 17 | Encadré « Évaluateur non raccordé » sur les garde-fous | Le point d'évaluation n'est pas monté. Les règles restent réelles et appliquées. | Tester par une exécution réelle en recette. Faire raccorder le service. |
| 18 | Encadré « Champs personnalisés non raccordés » | La variable de base d'API des champs personnalisés n'est pas renseignée. | Renseigner la variable, reconstruire, redéployer. |
| 19 | Page Rôles IA : « Rôles virtuels IA désactivés » | REGISTRY_VIRTUAL_ROLES_ENABLED est à faux — valeur par défaut, et le drapeau n'est activé dans aucun manifeste. |
Décision produit. Activer par l'exploitation si la fonctionnalité doit être disponible. |
| 20 | Page Registre : « Registre à plusieurs niveaux désactivé » | REGISTRY_TIERED_SCOPES_ENABLED est à faux. La lecture du catalogue reste possible. |
Idem. |
| 21 | Page Démo : toutes les actions sont verrouillées | DEMO_MODULE_ENABLED est à faux. |
Créer et activer le drapeau en portée Locataire, pour le seul locataire de démonstration. |
| 22 | Le tableau du manifeste de démonstration reste vide malgré un provisionnement réussi | Écart connu : la liste qui alimente ce tableau est codée en dur à vide. | Aucune action de dépannage. Se fier au résumé « n ressources semées ». À corriger dans le code. |
| 23 | Page Agents IA : « Aucun agent enregistré » | Le registre central n'a jamais été alimenté, ou l'orchestrateur ne le joint pas. | Vérifier le routage vers l'orchestrateur, puis déclencher la synchronisation du registre central. |
| 24 | Page Agents IA : « Registre des agents indisponible » | L'orchestrateur n'a pas répondu. | Vérifier la page Configuration et la santé du service. |
| 25 | Page Workforce : « Effectifs indisponibles » | Le service de personnel virtuel n'est pas joignable, ou sa variable de base est mal réglée. | Vérifier la variable, la santé du service et le locataire sélectionné. |
| 26 | L'entrée de navigation Workforce s'affiche mal, le titre de page est incorrect | Écart connu : la clé de traduction nav.workforce n'existe ni en français ni en anglais. |
Ajouter la clé dans les deux fichiers de messages. Prérequis de lancement. |
| 27 | L'état vide du panneau Équipes s'affiche mal | Écart connu : la clé workforce.noTeams est appelée mais absente des deux fichiers de messages. |
Ajouter la clé dans les deux fichiers. |
| 28 | Une exécution semble figée (statut inchangé depuis plus d'une heure) | Traitement long, ou blocage réel. | Ouvrir le détail (étape, budget, erreur), puis interrompre (R14) si le blocage est confirmé. |
| 29 | Impossible de voir toutes les exécutions actives de tous les locataires | Écart backend assumé : les exécutions sont isolées par locataire, il n'existe pas d'agrégat plateforme. | Répéter locataire par locataire. |
| 30 | L'activité en direct n'est pas temps réel | Écart assumé : le flux poussé par le serveur est remplacé par un sondage toutes les 10 secondes, pour deux raisons vérifiées (jeton impossible sur un flux navigateur, mise en tampon par la passerelle). | Aucune action. Le titre de la section mentionne encore « SSE » : à corriger. |
| 31 | Un locataire créé n'a pas de plan valide | Le champ Plan était resté à sa valeur par défaut starter, qui n'existe pas dans le catalogue. |
Corriger le rattachement côté facturation. Toujours écraser la valeur par défaut. |
| 32 | Un budget ne se consomme jamais | Portée mal orthographiée, ou ne correspondant à aucune consommation réelle. | Supprimer et recréer avec la bonne portée (la portée n'est pas modifiable). |
| 33 | Un adaptateur ne fonctionne pas alors que le modèle existe | La clé de configuration de modèle liée est un champ libre non vérifié : faute de frappe probable. | Recopier la clé exactement depuis le tableau des modèles. |
| 34 | Toutes les exécutions échouent après un changement de modèle par défaut | Le modèle marqué par défaut est désactivé, ou son chemin de coffre est erroné. | Vérifier ensemble les cases « Par défaut » et « Activé ». Vérifier le chemin dans le panneau Vault. |
| 35 | Un agent ne peut plus joindre un service externe après un durcissement | L'allowlist d'egress a été réduite, ou la politique vient d'être créée (allowlist vide par défaut, réseau en deny-). |
Ajouter l'hôte à l'allowlist, avec justification écrite. |
| 36 | Une action censée être refusée est autorisée | Une règle d'autorisation large a une priorité plus petite qu'un refus ciblé : elle est évaluée en premier. | Réordonner : refus ciblés en priorité basse (nombre petit), autorisations larges ensuite. Vérifier avec Évaluer une action. |
| 37 | Une capacité approuvée reste non liable à un rôle | Le drapeau des rôles virtuels est désactivé, ou la capacité a été révoquée. | Vérifier le drapeau et le statut de la capacité dans le Registre. |
| 38 | Une mise à jour de service ne prend pas effet en développement | Le cluster de développement est saturé : la stratégie de déploiement exige un conteneur supplémentaire avant d'en retirer un, le nouveau reste en attente et l'ancien continue de servir. | Basculer la stratégie de déploiement pour libérer avant de remplacer. Développement uniquement. |
| 39 | Chaîne d'audit signalée comme compromise | Altération, corruption, ou incident d'infrastructure. | Incident de sécurité. Capturer identifiant, motif, position ; cesser les écritures ; générer un rapport ; ouvrir la réponse à incident. |
| 40 | Un rapport Loi 25 affiche « Chaîne vérifiée : Non » | La vérification a échoué au moment de la génération. | Le rapport n'a pas de valeur probante. Traiter comme le cas 39. |
| 41 | Aucune trace serveur d'un export de rapport | Comportement attendu : l'export JSON est produit localement par le navigateur. | Consigner manuellement les extractions si la politique interne l'exige. |
| 42 | Un drapeau créé dans le portail n'a aucun effet sur un service | Les drapeaux de service sont des variables d'environnement, pas des lignes de la table du portail. | Faire modifier la variable et redéployer le service. Seule exception documentée : le module de démonstration. |
| 43 | Un utilisateur supprimé rend le journal d'audit illisible | La suppression est définitive ; les entrées passées perdent leur référence nominative. | Privilégier le statut Suspendu. Irréversible une fois fait. |
| 44 | Le catalogue de plans affiche des plans inattendus | Le point d'entrée est public et sans filtre : il retourne tous les plans en base, actifs ou non. | Nettoyer le catalogue en base. Prérequis de lancement. |
| 45 | Erreur « Réseau indisponible » | Le portail n'a pas pu joindre le service : réseau, DNS, ou URL erronée. | Vérifier la page Configuration, la connectivité, et la santé de la passerelle. |
#8.2 Arbre de décision : « un panneau ne s'affiche pas »
Aucun diagramme à afficher
Diagramme 3 — flowchart
#8.3 Réflexes de diagnostic, dans l'ordre
- Quel locataire est sélectionné ? — cause n°1 des symptômes inexplicables.
- Quelle identité et quels rôles ? — page Configuration.
- Quelle URL cible ? — page Configuration, colonne URL cible et pastille passerelle/direct.
- Quel état de santé ? — page État système, en distinguant « Hors service » de « Sonde indisponible ».
- Quel message exact ? — le portail distingue soigneusement « non raccordé », « désactivé par indicateur » et « indisponible ». Ces trois mots appellent trois actions différentes.
- Le mode d'authentification est-il cohérent des deux côtés ?
#9. Écarts connus et limites actuelles
Section franche. Tout ce qui suit est vérifié dans le code au 2026-08-17. Rien n'est minimisé.
#9.1 Défauts d'affichage — à corriger avant le jour J
| # | Écart | Manifestation | Gravité |
|---|---|---|---|
| 1 | Clé nav.workforce absente en FR et EN |
La seizième destination n'a pas de libellé. Barre latérale, fil d'Ariane, titre <h1>, palette de commandes et copilote sont tous affectés. |
🔴 Bloquant |
| 2 | Clé workforce.noTeams absente en FR et EN |
L'état vide du panneau Équipes s'affiche mal. | 🟡 Élevé |
| 3 | Trois panneaux « Ébauche » avec texte « TODO » visible | Page Rôles IA : liaison de capacités, recherche en ligne, concepteur de compétences. Textes de développement lisibles par l'utilisateur final. | 🔴 Bloquant |
| 4 | Section « Activité en direct (SSE) » | Le titre annonce un flux poussé par le serveur ; l'implémentation est un sondage. Le libellé induit en erreur. | 🟡 Élevé |
| 5 | Nom d'application du portail client | Le portail client affiche encore SPECTRA. Le portail d'administration est déjà à KySpectra. |
🟡 Élevé (hors périmètre de ce guide) |
#9.2 Fonctionnalités non raccordées
| # | Élément | État réel | Message affiché |
|---|---|---|---|
| 6 | Copilote de console | Navigateur déterministe par correspondance approximative. Aucun backend de modèle de langage. | « Les opérations agentiques en direct depuis la console ne sont pas encore raccordées à un backend — cet assistant ne fait que naviguer. Les exécutions réelles apparaissent dans la Flotte d'agents. » |
| 7 | Moteur de permissions | Point d'entrée répondant 404/501 dans certains environnements | « Moteur de permissions non raccordé » |
| 8 | Évaluateur de garde-fous | Point d'évaluation non monté dans certains environnements. Les règles restent appliquées. | « Évaluateur non raccordé » |
| 9 | Champs personnalisés | Sans variable de base d'API, panneau inerte | « Champs personnalisés non raccordés » |
| 10 | Tableau du manifeste de démonstration | Liste codée en dur à vide. Le tableau n'est jamais rendu ; seul le résumé de compte s'affiche. | Aucun — l'écart est silencieux |
| 11 | Flux temps réel | Remplacé par un sondage toutes les 10 secondes | Voir écart n°4 |
#9.3 Écarts backend affichés honnêtement dans l'interface
Ces trois écarts sont signalés à l'utilisateur par des encadrés dédiés. C'est le comportement voulu.
| # | Écart | Encadré affiché | Conséquence |
|---|---|---|---|
| 12 | Suspension de locataire | « Suspension de locataire — écart backend » | L'état Actif/Suspendu est en lecture seule. Aucun moyen de suspendre une organisation entière depuis le portail. |
| 13 | Agrégation tous-locataires de la flotte | « Agrégation cross-tenant — écart backend » | Supervision locataire par locataire uniquement. |
| 14 | File de revues transverse | « File de revues à l'échelle plateforme — écart backend » | Il faut connaître l'identifiant du sujet à réviser. |
#9.4 Fonctionnalités derrière un drapeau désactivé par défaut
| # | Drapeau | Défaut | Destination affectée | Statut à annoncer |
|---|---|---|---|---|
| 15 | REGISTRY_VIRTUAL_ROLES_ENABLED |
Faux — et activé dans aucun manifeste de déploiement | Rôles IA (page entièrement inopérante) | 🟡 En cours |
| 16 | REGISTRY_TIERED_SCOPES_ENABLED |
Faux | Registre (lecture possible, adoption et prompts personnels indisponibles) | 🟡 En cours |
| 17 | DEMO_MODULE_ENABLED |
Faux | Démo (actions verrouillées) | 🟢 Livré, activable |
| 18 | DEPLOY_LIVE |
Faux | Exécuteurs réels — refus honnête tant qu'il est faux | 🟢 Livré, activable |
| 19 | DEPLOY_REQUIRE_APPROVAL |
Faux | Approbation humaine avant déploiement | 🟢 Livré, activable |
| 20 | RPA_BROWSER_ENABLED |
Faux | Automatisation de navigateur | 🟡 En cours |
| 21 | SESSION_GOVERNOR_ENABLED, CHECKPOINT_STORE_ENABLED, SPEC_APPLY_ENABLED, VCS_MULTI_PROVIDER_ENABLED |
Faux | Fonctions avancées | 🟡 En cours |
⚠️ Vingt-cinq noms de drapeaux figurent dans les documents de conception sans exister dans le code (préfixes
IGNITION_,MKT_,STAFF_,WORKFORCE_). Ce sont des noms de conception, jamais des réglages livrés. Ne les documentez pas comme configurables, ne les annoncez pas.
#9.5 Écarts de configuration et de données
| # | Écart | Détail | Gravité |
|---|---|---|---|
| 22 | AUTH_MODE par défaut à dev-headers, côté portail et côté backend |
La variable n'est définie dans aucun manifeste de déploiement ni fichier d'exemple. La posture effective par défaut est donc « pas d'authentification ». | 🔴 Bloquant |
| 23 | Divergence de domaine d'identité | La configuration partagée du backend décrit sso comme le domaine réel et qualifie kyspectra de résiduel, alors que le portail est configuré sur kyspectra. |
🔴 Bloquant |
| 24 | Champ Plan pré-rempli à starter |
Ce code n'existe pas au catalogue. Les codes réels sont gratuit, team, enterprise. |
🟡 Élevé |
| 25 | Trois jeux de données de démarrage de plans incompatibles | Un jeu porte encore du vocabulaire hérité d'un autre domaine métier ; un autre suit un schéma périmé. | 🔴 Bloquant pour le lancement |
| 26 | Catalogue de plans public et non filtré | Le point d'entrée est accessible sans authentification et ne filtre ni la publication ni l'activité. | 🟡 Élevé |
| 27 | Rôles sectoriels hérités dans le modèle RBAC partagé | Cinq rôles issus d'un domaine métier antérieur subsistent hors hiérarchie. Ils ne satisfont jamais un contrôle de rang minimal. | 🟡 Élevé |
| 28 | Export statique du portail obsolète dans le dépôt | L'export commité comporte quinze pages : la page Workforce en est absente. Il est donc antérieur à l'ajout de la seizième destination. | ⚪ Faible |
| 29 | Fichier README du portail obsolète | Il décrit encore un « shell minimal sans code métier ». | ⚪ Faible |
| 30 | Code mort dans le module de registre | Deux fonctions exportées ne sont référencées nulle part. | ⚪ Faible |
| 31 | Devises mélangées à l'affichage | Les budgets sont formatés en dollars américains, le catalogue de plans en dollars canadiens. Les deux grandeurs ne se comparent pas. | 🟡 Élevé |
#9.6 Limites d'architecture assumées
| # | Limite | Pourquoi | Contournement |
|---|---|---|---|
| 32 | Aucune alerte poussée | Le portail n'envoie ni courriel ni notification | Supervision active (§7) |
| 33 | Aucun historique de santé | Seule une tendance de session existe | Observabilité d'infrastructure |
| 34 | Aucune action de masse | Chaque action porte sur un objet | Répétition manuelle |
| 35 | Aucune journalisation des exports JSON | L'export est produit par le navigateur | Consignation manuelle |
| 36 | Sélection de locataire locale au navigateur | Stockage local | Semis d'environnement pour les postes d'exploitation |
| 37 | Latence par service indisponible en mode passerelle | L'agrégat ne l'expose pas | Observabilité d'infrastructure |
| 38 | Aucun contrôle d'unicité sur le modèle par défaut | Rien n'empêche d'en marquer plusieurs | Vérification visuelle après chaque changement |
| 39 | Aucune vérification de la clé de modèle liée sur un adaptateur | Champ texte libre | Recopier depuis le tableau |
| 40 | Champs Egress et Système de fichiers absents à la création d'une politique d'exécution | Formulaire réduit | Éditer immédiatement après création |
#9.7 Ce qui est Planifié et ne doit jamais être annoncé comme disponible
| Élément | Statut réel |
|---|---|
| Application mobile iOS / Android | ⚪ Planifié — aucun code mobile n'existe. Les portails sont utilisables sur mobile via navigateur. |
| Personnel virtuel, phases 2 et 3 (délégation, escalade, direction virtuelle) | ⚪ Planifié — la phase 1 seule est livrée et prouvée. |
| Console de personnel virtuel autonome à l'échelle plateforme | ⚪ Planifié — conception seule. |
| Place de marché de capacités avec audience ciblée | 🟡 En cours — code présent, jamais déployé ni prouvé en ligne. |
| Provisionnement automatique de fournisseur d'identité | 🔴 Bloqué — refus vérifiés côté serveur d'identité ; déblocage relevant de l'exploitation. |
| Pilotes nuage natifs (services conteneurs gérés des grands fournisseurs) | 🟡 En cours — mécanisme générique prouvé, pilotes dédiés absents. |
| Portail de documentation publique | 🟡 En cours. |
| Portail « business » distinct | ⚪ N'existe pas — c'est une persona dans le portail client. |
#9.8 Synthèse : les six prérequis de lancement issus de ce guide
| Priorité | Action | Responsable |
|---|---|---|
| 1 | Définir explicitement AUTH_MODE=jwt sur tous les environnements exposés, portail et backend |
Exploitation + plateforme |
| 2 | Trancher la divergence entre les domaines d'identité kyspectra et sso |
Propriétaire produit |
| 3 | Ajouter les clés de traduction nav.workforce et workforce.noTeams en FR et EN |
Frontend |
| 4 | Retirer les trois textes « TODO » visibles de la page Rôles IA | Frontend |
| 5 | Nettoyer le catalogue de plans (jeux de démarrage incompatibles, vocabulaire hérité) | Backend |
| 6 | Corriger la valeur par défaut starter du champ Plan à la création d'un locataire |
Frontend |
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.