Aller au contenu principal

Workflows d'exception et de dégradation — KySpectra

  • DocumentStrategielancement/01-produit/22-workflows-exception-et-degradation.md
  • Version1.0
  • Date2026-08-17
  • StatutLivré
  • Publicinterne
  • MarqueKySpectra (par Kyrieva)

Strategielancement/01-produit/22-workflows-exception-et-degradation.mdFichier source

#0. Pourquoi ce document existe

Un dossier produit qui ne décrit que les chemins heureux ne décrit pas un produit : il décrit une démonstration. Les dix-huit scénarios ci-dessous sont les chemins non heureux de KySpectra — ceux que rencontrent réellement les équipes, et qui décident de la confiance qu'elles accordent à la plateforme.

Chaque scénario porte quatre informations qui manquent d'ordinaire :

Rubrique Contenu
Ce que voit l'utilisateur Le message et l'écran effectivement affichés
Code d'erreur réel Le code HTTP et, quand il existe, l'identifiant typé du problème
Trace laissée Ce qui reste dans le journal, la base ou le résumé de travail
Procédure de reprise La suite d'actions qui remet le système en état

#0.1 La doctrine de dégradation de la plateforme

Principe Traduction observable
Honnêteté d'ingénierie Une capacité non configurée répond 501 Not Implemented avec un message explicite. Elle ne simule jamais un succès.
Échec fermé sur les écritures gouvernées Une fonction payante ou sensible refuse plutôt que d'accorder par défaut.
Échec ouvert sur les plafonds d'usage en cours d'exécution Le plafond journalier d'appels d'outil laisse passer en cas de dégradation du plan de contrôle, pour ne pas casser un travail en cours.
Repli d'autonomie vers le bas Toute incertitude sur le plafond d'autonomie ramène à N1, jamais vers un niveau supérieur.
Masquage d'existence Un identifiant de locataire discordant renvoie 404, pas 403.
Jamais de montant inventé Sans service de facturation joignable, le reçu porte metered=false.
Jamais de vert fabriqué Un scanner absent produit un 501 qui nomme l'outil manquant.

#0.2 Carte des dix-huit exceptions

Aucun diagramme à afficher

Diagramme 1 — flowchart

#0.3 Index

ID Scénario Code dominant Statut du comportement
EX-01 Échec de construction d'image 501 / 502 🟢 Livré
EX-02 Échec de déploiement et retour arrière 409 / 501 🟢 Livré, prouvé en production
EX-03 Agent en boucle interrompu 200 sur interruption 🟢 Livré
EX-04 Budget épuisé en cours d'exécution 402 🟢 Livré
EX-05 Plan rétrogradé 402 / 403 🟢 Livré
EX-06 Locataire suspendu 403 / 404 🟡 En cours côté interface d'administration
EX-07 Service en panne et dégradation gracieuse 503 🟢 Livré
EX-08 Jeton expiré en cours de session 401 🟢 Livré
EX-09 Conflit de modification concurrente 409 🟢 Livré
EX-10 Quota d'appels d'outil atteint 402 🟢 Livré
EX-11 Secret introuvable dans le coffre 503 / 502 🟢 Livré
EX-12 Dépôt non supporté par la rétro-ingénierie 422 🟢 Livré
EX-13 Approbation refusée 409 🟢 Livré
EX-14 Auto-approbation tentée et bloquée 409 / 400 🟢 Livré
EX-15 Perte de connexion pendant un long traitement 🟢 Livré
EX-16 Mise en ligne désactivée par drapeau 501 🟢 Livré
EX-17 Sonde de vivacité couplée à la base 503 🟢 Corrigé, à auditer sur tous les services
EX-18 Politique réseau de refus par défaut 503 en cascade 🟢 Corrigé et vérifié en production

#EX-01 · Échec de construction d'image

Élément Valeur
Contexte WF-18 · un ingénieur lance la construction et la publication d'une image.
Cause typique Outil de construction absent, espace de noms d'exécution non configuré, secret de registre manquant, ou cluster refusant la création de la tâche.
Statut 🟢 Livré — le refus est explicite, jamais un faux succès.

Aucun diagramme à afficher

Diagramme 2 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Bandeau d'erreur nommant précisément la capacité absente Refuse d'agir plutôt que de tenter une construction locale approximative
2 Si la tâche démarre : progression puis verdict Réinterroge le statut terminal de la tâche — la fin de tâche est la seule preuve acceptée
3 Extrait de journal du pod de construction Conserve la queue de journal comme évidence
4 Bouton de relance Reconstruit un secret de registre éphémère à chaque tentative
Rubrique Contenu
Ce que voit l'utilisateur « Construction impossible : exécuteur non configuré » ou « exécution en cluster indisponible », avec le nom de la configuration manquante.
Code d'erreur réel 501 exec/incluster-unavailable · 501 build/runner-unconfigured · 501 exec/tool-unavailable en mode local · 502 si le cluster refuse la création.
Trace laissée Verdict d'étape avec la queue de journal, le code de retour et la ligne de commande utilisée ; aucun secret n'y figure.
Procédure de reprise 1. Vérifier la configuration de l'espace de noms d'exécution et du secret de registre. 2. Redéposer les identifiants de registre au coffre — WF-30. 3. Vérifier le lien au registre par la poignée de main réelle. 4. Relancer la construction. Aucune étape antérieure du pipeline n'est perdue.

#EX-02 · Échec de déploiement et retour arrière

Élément Valeur
Contexte WF-19 · un déploiement est lancé et le rollout ne converge pas.
Cause typique Image inexistante, sonde d'état du produit en échec, ressources insuffisantes, portes non franchies.
Statut 🟢 Livré et prouvé en production.

Aucun diagramme à afficher

Diagramme 3 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Liste nominative des portes non franchies Refuse le déploiement sans jamais toucher au cluster
2 Message d'approbation manquante Vérifie l'approbation avant toute étape lorsque le drapeau est actif
3 État de convergence du rollout Ne pose le statut vivant que si les quatre compteurs de répliques coïncident
4 Bouton de retour arrière Recalcule l'ensemble de répliques précédent puis réapplique son image
5 Historique des déploiements Marque l'original comme annulé et crée une ligne portant sa référence
Rubrique Contenu
Ce que voit l'utilisateur Un message typé, jamais un simple « erreur » : portes non franchies avec leur liste, approbation requise, ou déploiement réel désactivé.
Code d'erreur réel 409 gate/not-passed · 409 deploy/approval-required · 409 deploy/already-recorded · 409 deploy/via-deploy-endpoint · 501 deploy/live-not-enabled.
Trace laissée Le run conserve ses six étapes avec leurs verdicts et leurs évidences ; le déploiement échoué reste en base ; le retour arrière crée une ligne distincte reliée à l'original.
Procédure de reprise 1. Lancer la simulation, qui ne touche rien et liste les bloqueurs. 2. Corriger la cause. 3. Relancer l'exécution. 4. Si le produit est déjà dégradé en service, déclencher le retour arrière avant de corriger, pour restaurer d'abord.

#EX-03 · Agent en boucle interrompu

Élément Valeur
Contexte WF-06 et WF-13 · une exécution d'agent ne converge pas et consomme des jetons.
Cause typique Invite ambiguë, outil renvoyant systématiquement une erreur, tâche mal bornée.
Statut 🟢 Livré — l'interruption est une route réelle, côté copilote comme côté exécution d'agent.

Aucun diagramme à afficher

Diagramme 4 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Flux d'événements en direct : étapes, appels d'outil, complétions Émet chaque événement dans le flux du run
2 Répétition visible du même triplet d'étapes Ne détecte pas la boucle sémantiquement : c'est un jugement humain
3 Bouton d'arrêt sur l'exécution du copilote Arrête l'exécution et conserve les événements déjà émis
4 Confirmation modale d'interruption dans la flotte d'agents Exige la capacité plateforme d'interruption
5 Compteur de consommation mis à jour Règle la consommation réellement engagée, jamais une estimation
Rubrique Contenu
Ce que voit l'utilisateur L'exécution passe à l'état interrompu ; les événements antérieurs restent consultables.
Code d'erreur réel Aucun : l'interruption réussit en 200. Un appelant sans la capacité d'interruption reçoit 403.
Trace laissée L'exécution reste en base avec ses événements, son motif d'arrêt et son acteur. Le journal d'audit conserve la décision.
Procédure de reprise 1. Lire les derniers événements pour identifier l'outil ou l'étape fautive. 2. Vérifier la politique d'exécution : durée maximale, liste d'autorisations de sortie. 3. Reformuler la tâche avec une borne explicite. 4. Relancer. Un plafond d'autonomie plus bas est le premier réglage à essayer.

#EX-04 · Budget épuisé en cours d'exécution

Élément Valeur
Contexte WF-24 · un travail long consomme le budget de jetons avant d'aboutir.
Cause typique Plafond journalier ou mensuel atteint, budget de portée trop bas.
Statut 🟢 Livré.

Aucun diagramme à afficher

Diagramme 5 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Jauges dépensé, restant, pourcentage sur l'écran de consommation Publie la consommation réelle par portée et par modèle
2 Alerte au seuil d'avertissement N'interrompt rien à ce stade
3 Alerte critique N'interrompt toujours rien : c'est un signal, pas une porte
4 Refus au franchissement de la limite Ne procède à aucun appel de modèle
5 Date de réinitialisation de la fenêtre Affiche la date réelle, pas une estimation
Rubrique Contenu
Ce que voit l'utilisateur « Budget épuisé » avec le seuil atteint et la portée concernée.
Code d'erreur réel 402.
Trace laissée La consommation engagée avant l'épuisement est réglée avec les jetons réellement consommés. Si le service de facturation est injoignable, le reçu porte metered=falsejamais un montant inventé.
Procédure de reprise 1. Relever la limite du budget concerné. 2. Ou attendre la réinitialisation de la fenêtre de quota. 3. Ou monter de palier — WF-25. 4. Relancer l'exécution : les étapes déjà réalisées sont conservées.

#EX-05 · Plan rétrogradé

Élément Valeur
Contexte WF-25 · un essai expire ou un abonnement est annulé.
Cause typique Fin de la période d'essai de quatorze jours sans carte, annulation en fin de période, ou échec de paiement.
Statut 🟢 Livré. Les profils d'inscription configurés prévoient des rappels à J-7, J-3 et J-1 avant l'échéance.

Aucun diagramme à afficher

Diagramme 6 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Rappels d'échéance d'essai Applique le calendrier de rappel du profil d'inscription
2 Bandeau de rétrogradation Bascule l'abonnement vers le palier gratuit
3 Quotas visiblement réduits Ramène les six quotas de registre aux valeurs du palier gratuit, dont deux cents appels d'outil par jour
4 Plafond d'autonomie affiché à N1 Le plafond effectif est le minimum du plafond de rôle et du plafond de plan
5 Refus sur une écriture payante Les écritures gouvernées échouent en position fermée vers le palier gratuit
6 Lecture inchangée Aucune donnée n'est supprimée
Rubrique Contenu
Ce que voit l'utilisateur Un bandeau de palier gratuit, des quotas réduits, et un refus explicite lorsqu'une fonction payante est sollicitée.
Code d'erreur réel 402 sur un quota dépassé, 403 sur une fonctionnalité non incluse. Si la résolution des droits est désactivée par drapeau, la route répond 404 — comportement identique à l'absence de la fonction.
Trace laissée Le changement d'abonnement est enregistré ; les événements du prestataire de paiement sont journalisés et dédupliqués par un journal d'événements.
Procédure de reprise 1. Ajouter une méthode de paiement. 2. Changer de plan — la proratisation est réelle. 3. Vérifier que le plafond d'autonomie est remonté au niveau attendu.

#EX-06 · Locataire suspendu

Élément Valeur
Contexte Un locataire est suspendu pour impayé, incident de sécurité ou décision contractuelle.
Cause typique Décision d'exploitation ou de conformité.
Statut 🟡 En cours. La route de suspension existe et écrit un statut avec audit ; le portail d'administration affiche explicitement l'absence de commande de suspension dans son écran des locataires — un écart assumé, visible dans l'interface.

Aucun diagramme à afficher

Diagramme 7 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Authentification qui réussit normalement Keycloak n'est pas au courant de la suspension : elle est applicative
2 Refus à l'accès aux ressources du locataire Le statut de l'organisation porte la suspension et son motif
3 Message explicite invitant à contacter l'administration Aucune donnée n'est supprimée
4 Réactivation Rétablit le statut actif avec une ligne d'audit
Rubrique Contenu
Ce que voit l'utilisateur Un refus d'accès aux ressources, jamais une page blanche ni une erreur générique.
Code d'erreur réel 403 sur une ressource du locataire suspendu ; 404 si l'identifiant de locataire de la requête est discordant avec le jeton — masquage d'existence.
Trace laissée Statut de l'organisation, date de suspension, motif de suspension, et ligne d'audit de la décision.
Procédure de reprise 1. Traiter la cause : régularisation, incident clos. 2. Réactiver l'organisation. 3. Vérifier que les membres retrouvent leurs capacités effectives.

Action de pré-lancement : exposer la commande de suspension dans l'écran des locataires du portail d'administration, aujourd'hui déclarée manquante dans l'interface elle-même.


#EX-07 · Service en panne et dégradation gracieuse

Élément Valeur
Contexte Un service en amont ne répond plus.
Cause typique Base de données injoignable, pod redémarrant, dépendance externe indisponible.
Statut 🟢 Livré. L'agrégat de santé est honnête : il ne répond 200 que si tous les services sondés répondent 200.

Aucun diagramme à afficher

Diagramme 8 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Portail d'administration : état de santé par service Sonde chaque service enregistré, hors ceux volontairement exclus de l'agrégat
2 Bandeau de dégradation L'agrégat répond 503 dès qu'un service ne répond pas 200
3 Une lecture peut renvoyer une liste vide Repli de lecture seule volontaire lorsque le disjoncteur est ouvert
4 Une écriture échoue franchement Garde explicite : les écritures exposent le vrai code d'erreur
5 Rétablissement automatique Le disjoncteur tente une récupération après une trentaine de secondes
Rubrique Contenu
Ce que voit l'utilisateur Un bandeau de dégradation nommant le service concerné ; une lecture peut être vide, une écriture échoue explicitement.
Code d'erreur réel 503 sur l'agrégat de santé et sur un service dont la sonde de base échoue, avec l'identifiant health/db-unavailable. 502 ou 504 remontés depuis la passerelle.
Trace laissée Journal de la passerelle avec l'identifiant de requête, état du disjoncteur, et compteur d'échecs.
Procédure de reprise 1. Identifier le service en défaut dans l'agrégat. 2. Vérifier sa base de données et sa politique réseau de sortie. 3. Attendre la fermeture du disjoncteur ou redémarrer le service. 4. Rejouer les écritures échouées : elles n'ont pas été appliquées.

#EX-08 · Jeton expiré en cours de session

Élément Valeur
Contexte Une personne travaille depuis plus d'une heure sans rafraîchissement.
Cause typique Durée de vie du jeton d'accès du realm fixée à une heure.
Statut 🟢 Livré.

Aucun diagramme à afficher

Diagramme 9 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Une action qui semble ne rien faire Le premier appel repart en 401
2 Renouvellement invisible dans le cas nominal Le portail utilise le jeton de rafraîchissement puis rejoue l'appel
3 Redirection vers Keycloak si le rafraîchissement échoue Le garde d'authentification du portail déclenche le flux d'autorisation
4 Retour sur la page d'origine L'état de la vue est porté par la chaîne de requête, donc restauré
5 Les pages publiques restent lisibles Le garde exempte explicitement les routes publiques
Rubrique Contenu
Ce que voit l'utilisateur Au mieux rien du tout ; au pire un retour à l'écran de connexion suivi d'un retour à la page consultée.
Code d'erreur réel 401 sur l'appel expiré. 428 tenant_required si le contexte de locataire est perdu au retour.
Trace laissée Journal d'authentification côté serveur d'identité ; aucune écriture partielle côté applicatif — l'appel a été refusé avant traitement.
Procédure de reprise 1. Se réauthentifier. 2. Revenir à la vue, restaurée depuis la chaîne de requête. 3. Rejouer l'action : rien n'a été écrit.

Écart connu : dans le portail d'administration, le flux d'activité fonctionne par sondage et un jeton expiré s'y traduit par une série de 401 jusqu'au renouvellement.


#EX-09 · Conflit de modification concurrente

Élément Valeur
Contexte Deux personnes ou deux onglets agissent en même temps sur le même objet.
Cause typique Double soumission de revue, double déploiement sur un même run, double clic sur une création.
Statut 🟢 Livré. Un intergiciel d'idempotence est présent sur les créations.

Aucun diagramme à afficher

Diagramme 10 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Un message de conflit nommant la cause Refuse la seconde opération plutôt que de l'appliquer en double
2 Rechargement de l'écran Affiche l'état réel après la première écriture
3 Double clic sur une création La clé d'idempotence évite la double création lorsque le magasin est disponible
4 Comportement dégradé sans magasin La clé est acceptée mais non dédupliquée : le comportement est documenté, pas silencieux
Rubrique Contenu
Ce que voit l'utilisateur Un message typé : revue déjà en attente, aucune revue en attente, déploiement déjà enregistré, tâche déjà décidée.
Code d'erreur réel 409 avec l'un des identifiants review/already-pending, review/none-pending, deploy/already-recorded, ou un conflit de décision de tâche de validation.
Trace laissée La première écriture est intacte et journalisée ; la seconde n'a rien écrit.
Procédure de reprise 1. Recharger la vue. 2. Constater l'état réel. 3. Agir sur cet état, pas sur l'état supposé. Aucune réconciliation manuelle n'est nécessaire.

#EX-10 · Quota d'appels d'outil atteint

Élément Valeur
Contexte WF-13 et WF-26 · un agent appelle un outil externe au-delà du plafond journalier de son palier.
Cause typique Palier gratuit limité à deux cents appels d'outil par jour ; palier Équipe à cinq mille.
Statut 🟢 Livré.

Aucun diagramme à afficher

Diagramme 11 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Compteur d'appels d'outil du jour Publie la consommation par portée
2 Refus au franchissement Répond 402 au point de décision de politique
3 Aucun refus si le plan de contrôle est dégradé Le plafond journalier échoue en position ouverte : c'est un choix assumé pour ne pas casser une exécution en cours
4 Ligne d'audit de chaque appel Journalise par empreinte seulement, par minimisation des données personnelles
Rubrique Contenu
Ce que voit l'utilisateur « Quota d'appels d'outil épuisé pour aujourd'hui », avec le plafond du palier.
Code d'erreur réel 402 sur le quota ; 403 si aucune règle d'autorisation explicite n'existe pour l'outil — c'est le refus par défaut, qui n'a rien à voir avec le quota.
Trace laissée Ligne d'audit d'appel d'outil avec verdict blocked ou allowed, sans exposer le contenu.
Procédure de reprise 1. Distinguer un refus de politique d'un dépassement de quota : les deux messages sont différents. 2. Pour un quota, attendre la réinitialisation quotidienne ou monter de palier. 3. Pour un refus de politique, accorder une permission d'outil explicite sur la portée — WF-26.

#EX-11 · Secret introuvable dans le coffre

Élément Valeur
Contexte WF-16, WF-17, WF-18, WF-26, WF-30, WF-31 · une opération a besoin d'un identifiant.
Cause typique Chemin de coffre erroné, secret jamais déposé, identifiants d'accès au coffre absents de l'environnement.
Statut 🟢 Livré — aucun repli n'est prévu, et c'est délibéré.

Aucun diagramme à afficher

Diagramme 12 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Message nommant la référence attendue Rappelle la convention de chemin, sans jamais échoer une valeur
2 Refus immédiat si le coffre n'est pas configuré Aucun repli vers un stockage local ou une variable d'environnement improvisée
3 Message de clonage refusé en rétro-ingénierie Refuse explicitement plutôt que de tenter un accès anonyme silencieux
4 Sortie d'erreur d'un outil externe Caviarde le jeton, y compris ses formes encodées, et tronque le message
Rubrique Contenu
Ce que voit l'utilisateur « Coffre non configuré » ou « identifiants non configurés pour cette source », avec le chemin attendu.
Code d'erreur réel 503 sur le dépôt et la lecture d'identifiants ; 502 reverse/git-credentials-not-configured sur un clonage ; 422 registry/tool-auth-missing-ref si une configuration d'outil déclare une authentification sans référence de coffre.
Trace laissée Journal du service avec le chemin demandé, jamais la valeur. Aucun secret n'entre jamais en base.
Procédure de reprise 1. Construire le chemin normalisé. 2. Déposer la valeur — WF-30. 3. Relire la référence renvoyée et son numéro de version. 4. Relancer l'opération.

Cas connexe bloqué : la sauvegarde de nouvelles configurations de facturation échoue en position fermée tant que la clé de chiffrement n'est pas provisionnée du coffre vers le cluster. 🔴 Bloqué — c'est une action d'exploitation, et l'échec fermé est le comportement voulu.


#EX-12 · Dépôt non supporté par la rétro-ingénierie

Élément Valeur
Contexte WF-04 · une équipe soumet un dépôt qui n'est pas écrit en Python.
Cause typique Patrimoine en JavaScript, TypeScript, Go, Java, Ruby ou C#.
Statut 🟢 Livré — la limite est dite, jamais contournée par une analyse approximative.

Aucun diagramme à afficher

Diagramme 13 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Progression normale du travail Clone et parcourt le dépôt sans échouer
2 Résumé du travail listant les fichiers non supportés Ne fabrique aucun fait pour ces fichiers
3 Artefacts honnêtement vides si aucun fait ne les alimente Un modèle sans fait support dégrade en modèle vide plutôt qu'en modèle inventé
4 Refus explicite sur un système de source sans analyseur Le vocabulaire accepté est plus large que les analyseurs réels, et le dit
Rubrique Contenu
Ce que voit l'utilisateur Le travail réussit, mais son résumé liste nommément les fichiers non supportés. Les artefacts correspondants sont vides.
Code d'erreur réel 422 reverse/source-system-unsupported pour un système déclaré sans analyseur ; 422 reverse/remote-source-unfetched pour une source distante autre qu'un dépôt git.
Trace laissée Le résumé du travail conserve la liste des éléments non supportés ; les faits produits pour le reste sont persistés normalement.
Procédure de reprise 1. Déclarer d'autres sources exploitables : schéma de base, contrat d'interface, manifestes d'infrastructure, documents, historique du dépôt. 2. Compléter par une spécification saisie ou assistée par IA — WF-06. 3. Ne pas attendre d'analyse profonde d'un code non Python : elle n'existe pas.

#EX-13 · Approbation refusée

Élément Valeur
Contexte WF-11, WF-13, WF-19, WF-27 · une porte humaine est franchie par un refus.
Cause typique Portes de qualité insuffisantes, désaccord de conception, risque de sécurité non attesté.
Statut 🟢 Livré.

Aucun diagramme à afficher

Diagramme 14 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Verdict de rejet avec le nom du décideur et le motif Enregistre la décision de façon attribuable et horodatée
2 Pour une revue de spécification : l'objet reste modifiable Aucune donnée n'est supprimée
3 Pour un déploiement : aucune étape de déploiement n'est franchie Le run conserve ses verdicts d'étape antérieurs
4 Pour une extension du registre : retour à l'état enregistré Un rejet ramène un serveur d'outils à son état d'enregistrement, il n'existe pas d'état rejeté durable pour ce genre
5 Nouvelle soumission possible Une seule revue peut être en attente à la fois
Rubrique Contenu
Ce que voit l'utilisateur Le motif du rejet, le nom du décideur et l'horodatage.
Code d'erreur réel Le rejet lui-même réussit en 200 ou 201 : c'est une décision, pas une erreur. Une tentative d'avancer malgré le rejet renvoie 409 deploy/approval-required ou 409 gate/not-passed.
Trace laissée Ligne de décision en base, entrée au journal d'audit chaîné, historique de revue consultable.
Procédure de reprise 1. Lire le motif. 2. Corriger le sujet. 3. Resoumettre : une nouvelle revue s'ouvre, la précédente reste dans l'historique.

#EX-14 · Auto-approbation tentée et bloquée

Élément Valeur
Contexte WF-11, WF-19, WF-26, WF-27 · la même personne soumet puis tente d'approuver.
Cause typique Équipe réduite, urgence, méconnaissance de la règle.
Statut 🟢 Livré. La règle est appliquée à trois niveaux : interface, service, base de données.

Aucun diagramme à afficher

Diagramme 15 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Bouton d'approbation désactivé avec un motif nommé L'interface bloque avant tout appel serveur
2 Refus en cas d'appel direct à l'interface de programmation Le service reste autoritatif et refuse
3 Refus même en cas de contournement applicatif Une contrainte de base de données nommée interdit l'égalité entre soumissionnaire et décideur
4 Refus si aucune identité d'acteur n'est portée Une décision doit être attribuable, sans exception
5 Cas particulier des sujets à risque élevé L'approbation exige en plus une attestation explicite de revue de sécurité
Rubrique Contenu
Ce que voit l'utilisateur « Vous ne pouvez pas approuver votre propre soumission », avec le motif nommé.
Code d'erreur réel 409 sod/self-approval-forbidden sur le registre d'extensions · 409 deploy/approval-self sur un déploiement · 400 actor/required sans identité d'acteur · 428 actor_required au refus local du portail · 422 ext/security-review-required sur un sujet à risque élevé sans attestation.
Trace laissée La tentative refusée est journalisée ; aucune décision n'est enregistrée.
Procédure de reprise 1. Désigner une seconde personne disposant du rang requis. 2. Pour un sujet à risque élevé, joindre l'attestation de revue de sécurité. 3. Faire prendre la décision par cette personne. Il n'existe aucun contournement, y compris pour un administrateur de plateforme.

#EX-15 · Perte de connexion pendant un long traitement

Élément Valeur
Contexte WF-04, WF-06, WF-19 · le navigateur perd la connexion pendant une analyse, une génération ou un déploiement.
Cause typique Réseau instable, fermeture d'onglet, veille de la machine.
Statut 🟢 Livré. Le traitement long ne dépend pas de la connexion du navigateur.

Aucun diagramme à afficher

Diagramme 16 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Réponse immédiate avec un identifiant de travail Planifie le traitement en tâche de fond et répond sans attendre
2 Flux d'événements interrompu Le traitement continue côté serveur
3 À la reconnexion, l'état réel s'affiche La vue et l'objet consulté sont portés par la chaîne de requête, donc restaurables par simple lien
4 En cas d'échec, un motif lisible Toute exception marque le travail en échec dans une session neuve, avec un résumé sanitisé
5 Bouton de relance Une reprise manuelle est possible ; un travail resté en file peut être replanifié en lot
Rubrique Contenu
Ce que voit l'utilisateur À la reconnexion, l'état réel du travail — en cours, prêt ou en échec — jamais une page bloquée.
Code d'erreur réel Aucun côté client : la coupure n'est pas une erreur applicative. Une relance sur un travail déjà en cours renvoie 409 ; sur un travail déjà prêt, l'appel est sans effet.
Trace laissée Le travail conserve son état, son horodatage de début et de fin, et son résumé. Le message d'erreur éventuel est caviardé de tout secret et tronqué.
Procédure de reprise 1. Rouvrir le portail et le lien profond du projet. 2. Lire l'état du travail. 3. Relancer si l'état est en échec. 4. Utiliser la replanification en lot si plusieurs travaux sont restés en file.

#EX-16 · Mise en ligne désactivée par drapeau

Élément Valeur
Contexte WF-20 · une équipe demande la mise en ligne d'un produit dans un environnement où l'interrupteur est fermé.
Cause typique Interrupteur maître à false par défaut, jeton de compte de service non monté.
Statut 🟢 Livré — c'est le comportement voulu, pas un défaut.

Aucun diagramme à afficher

Diagramme 17 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Message explicite de fonction désactivée Refuse sans rien simuler
2 Aucun manifeste appliqué Le rendu des manifestes est pur : il n'a aucun effet de bord
3 Distinction entre drapeau et capacité Deux refus distincts : drapeau fermé, ou capacité en cluster absente
4 Cas du fournisseur d'identité du produit Réponse honnête portant applied=false et un motif de blocage
Rubrique Contenu
Ce que voit l'utilisateur « Mise en ligne désactivée » ou « capacité indisponible », jamais un faux succès ni une adresse fictive.
Code d'erreur réel 501 exec/tool-unavailable pour le drapeau fermé ; 501 pour l'applieur indisponible ; réponse 200 portant applied=false avec motif de blocage pour le fournisseur d'identité, dont le serveur d'identité renvoie 403.
Trace laissée La demande est journalisée avec son refus typé. Aucune ressource n'est créée.
Procédure de reprise 1. Faire activer l'interrupteur pour l'environnement visé — action d'exploitation. 2. Vérifier le montage du jeton de compte de service. 3. Relancer. Pour le fournisseur d'identité du produit client, la levée du blocage passe par l'élargissement des droits d'administration sur le serveur d'identité : c'est une action d'exploitation, pas de développement.

#EX-17 · Sonde de vivacité couplée à la base de données

Élément Valeur
Contexte Exploitation · un service à réplique unique oscille et provoque des erreurs en cascade.
Cause typique Sonde de vivacité qui interroge la base : une latence de base entraîne le redémarrage du pod, donc l'indisponibilité du service.
Statut 🟢 Corrigé — le motif est identifié et le correctif appliqué. Un audit reste à mener sur l'ensemble des services, le défaut étant systémique par nature.

Aucun diagramme à afficher

Diagramme 18 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Le portail affiche des erreurs intermittentes La passerelle ne trouve aucune réplique disponible
2 L'agrégat de santé bascule en dégradé Il ne répond 200 que si tous les services sondés répondent 200
3 Le pod redémarre en boucle La sonde de vivacité couplée à la base le tue à chaque latence
4 Rétablissement après correctif Sonde de vivacité découplée, sonde de disponibilité laissée couplée, deux répliques minimum
Rubrique Contenu
Ce que voit l'utilisateur Des erreurs intermittentes du portail, souvent confondues avec un problème de navigateur.
Code d'erreur réel 503 sur l'agrégat de santé et sur le service concerné, avec l'identifiant health/db-unavailable.
Trace laissée Compteur de redémarrages du pod, journal de la sonde, journal de la passerelle avec l'identifiant de requête.
Procédure de reprise 1. Découpler la sonde de vivacité de la base : la vivacité ne mesure que le processus. 2. Laisser la sonde de disponibilité vérifier la base. 3. Porter le service à deux répliques minimum. 4. Auditer les autres services : le défaut est systémique par construction.

#EX-18 · Politique réseau de refus par défaut

Élément Valeur
Contexte Exploitation en production · une politique de refus par défaut sur les sorties réseau bloque un appel légitime.
Cause typique Absence d'une règle de sortie explicite vers le serveur d'identité, ou vers les hôtes de dépôts publics.
Statut 🟢 Corrigé et vérifié en production sur les deux cas rencontrés.

Aucun diagramme à afficher

Diagramme 19 — flowchart

Déroulé

# Ce que voit l'utilisateur Ce que fait le système
1 Portail entièrement inutilisable, message évoquant une origine croisée Le symptôme visible masque une panne serveur : la passerelle ne démarre pas
2 Redémarrages en boucle de la passerelle Le point de vérification des jetons est injoignable
3 Échec de tout travail de rétro-ingénierie sur un dépôt public Le clonage sortant est refusé par la politique de refus par défaut
4 Rétablissement après ajout des règles Les règles de sortie sont additives à la politique de refus, sans l'affaiblir
Rubrique Contenu
Ce que voit l'utilisateur Un portail hors service dont le message parle de politique d'origine croisée — un faux ami classique — ou un travail d'analyse qui échoue au clonage.
Code d'erreur réel 503 en cascade sur la passerelle et l'agrégat de santé ; 502 reverse/remote-clone-failed sur le clonage, avec sortie d'erreur caviardée et tronquée.
Trace laissée Journal du pod, compteur de redémarrages, résumé du travail portant l'erreur sanitisée.
Procédure de reprise 1. Diagnostiquer depuis l'intérieur du pod, jamais depuis le navigateur : un message d'origine croisée cache très souvent une erreur serveur. 2. Ajouter la règle de sortie manquante, restreinte au pod concerné. 3. Vérifier le redémarrage propre de la passerelle. 4. Relancer le travail bloqué.

Dette déclarée : la règle de sortie du service de rétro-ingénierie ouvre aujourd'hui le port 443 vers l'ensemble des adresses publiques, en excluant les plages privées. Le durcissement prévu consiste à router ces clonages par un proxy de sortie limité aux hôtes de dépôts connus.


#19. Synthèse

#19.1 Les codes d'erreur réels, par famille

Code Signification chez KySpectra Exemples d'identifiants typés
400 Décision non attribuable actor/required
401 Aucun contexte d'authentification
402 Budget ou quota épuisé Budget de jetons, appels d'outil du jour
403 Rang insuffisant, ou refus de politique registry/platform-scope-required, refus sous deny-by-default
404 Ressource absente ou masquage d'existence d'un autre locataire ou fonction désactivée par drapeau registry/virtual-roles-disabled, registry/tiered-scopes-disabled
409 Conflit d'état ou porte de gouvernance sod/self-approval-forbidden, deploy/approval-self, gate/not-passed, gate/out-of-order, deploy/via-deploy-endpoint, deploy/already-recorded, review/already-pending, review/none-pending
422 Charge utile refusée par une règle nommée reverse/source-system-unsupported, skill/secret-in-content, registry/tool-auth-secret, uml/type-unknown, cicd/vcs-provider
428 Prérequis d'appel manquant, refusé localement tenant_required, actor_required
429 Limite de débit atteinte 300 requêtes par minute par défaut, 20 sur les endpoints d'IA, 5 sur l'authentification
501 Capacité non configurée — jamais une simulation deploy/live-not-enabled, exec/tool-unavailable, exec/incluster-unavailable, build/runner-unconfigured, discovery/browser-unavailable
502 Dépendance externe en échec reverse/remote-clone-failed, reverse/git-credentials-not-configured
503 Dépendance interne indisponible health/db-unavailable, capbind/session-store-unavailable

#19.2 Ce que l'utilisateur ne voit jamais

Jamais affiché Pourquoi
Un succès de déploiement non vérifié Le statut vivant exige la coïncidence de quatre compteurs de répliques, réinterrogés après application.
Un montant de consommation estimé Sans service de facturation joignable, le reçu porte explicitement la mention de non-mesure.
Une analyse de code non Python Les fichiers concernés sont listés comme non supportés.
Un résultat d'analyse de sécurité vert alors qu'un scanner manque Le refus nomme les scanners absents.
Un secret dans un message d'erreur Double caviardage, y compris des formes encodées, et troncature.
L'existence d'une ressource d'un autre locataire Réponse 404, jamais 403.

#19.3 Arbre de décision pour un incident

Aucun diagramme à afficher

Diagramme 20 — flowchart

#19.4 Les cinq exceptions à traiter avant le jour J

# Exception Action
1 EX-06 · Locataire suspendu Exposer la commande de suspension dans l'écran des locataires du portail d'administration.
2 EX-17 · Sonde de vivacité Auditer tous les services : découpler la vivacité de la base, porter à deux répliques.
3 EX-05 · Plan rétrogradé Nettoyer le catalogue de plans — trois jeux de données de démarrage incompatibles coexistent.
4 EX-16 · Interrupteurs fermés Décider et documenter l'état attendu de chaque interrupteur par environnement.
5 EX-08 · Session Fixer explicitement le mode d'authentification strict par manifeste, la valeur par défaut du code étant le mode permissif.

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.