# Garde-fous et journalisation

> Les canaux, la validation et les verrous que partage chaque écriture d'un agent, et la trace que laisse chaque action.

Un agent n'est pas une seconde porte d'entrée dans la station. Chaque appel aboutit dans le
même code que celui qu'appellent les pages, sous les mêmes verrous, et laisse la même trace
que l'action d'un opérateur.

## Les garde-fous que partage chaque écriture {#guardrails-every-write-shares}

- **Les mêmes canaux que l'interface.** Les écritures de configuration passent par les mêmes
  services de mise à disposition et les mêmes cas d'utilisation que les pages, les écritures
  en direct empruntent l'unique entonnoir d'écriture de la Logique, et la conduite d'un essai emprunte le
  cycle de vie du Process. Il n'existe aucun chemin parallèle par lequel un agent
  contournerait la validation, les verrous ou la journalisation.
- **Une validation d'éditeur.** Un upsert fusionne les paramètres fournis avec la
  déclaration existante et valide le brouillon fusionné avec les règles qu'appliquent les
  éditeurs. Un upsert refusé ne laisse rien d'appliqué à moitié.
- **Le verrou d'ingénierie s'applique.** Pendant qu'une unité Process fonctionne, les
  changements de configuration sont refusés par un résultat structuré « Configuration is
  locked while a Unit is running » qui nomme ce qu'il faut terminer d'abord, exactement
  comme les pages les refusent.
- **Un runtime arrêté est en lecture seule.** Quand le runtime de la station est arrêté,
  seules l'inspection, l'état, les listes, l'aide (`help_search`, `help_read`), l'export de
  rapport, la sauvegarde instantanée et l'orientation dans l'interface (`ui_state`,
  `ui_navigate`, `ui_screenshot`, `ui_scroll`) continuent de fonctionner ; tout appel qui
  modifie quelque chose répond `Runtime stopped`, même si l'interrupteur de son domaine est
  actif. Un outil ajouté plus tard échoue de la même manière tant qu'il n'a pas été
  délibérément classé en lecture seule.
- **Les outils destructeurs sont signalés.** Les outils qui commandent l'équipement ou
  détruisent des données (`tag_write`, `action_run`, `process_recipe_apply`,
  `process_start`, `process_resume`, les suppressions, `server_stop`, etc.) portent
  l'indicateur destructif de MCP : les clients qui approuvent automatiquement les outils
  sans risque demandent quand même confirmation pour ceux-là.

## Comment les actions d'un agent sont journalisées {#how-agent-actions-journal}

Tout ce que fait un agent laisse la même trace que les actions d'un opérateur, aux endroits
que vous consultez déjà :

- Le cycle de vie de l'endpoint, chaque changement de configuration venu d'un
  agent et chaque sondage de navigateur refusé sont journalisés dans le domaine **Agent** de
  la console de la page [Événements](events) (`logs_read` filtre directement dessus).
- Les opérations en direct dans le runtime de la Logique (écritures de variables, écritures de
  tags, exécutions d'actions, acquittements d'alarmes) sont journalisées avec l'origine
  **MCP**, à côté des mêmes opérations faites depuis l'interface ; l'historique des alarmes
  et la ligne « Déclenchée par » d'une action disent **Agent logiciel**.
- Les essais qu'un agent démarre, arrête, interrompt ou commente enregistrent **Agent logiciel**
  comme auteur dans le fichier de l'essai et dans les [Historiques](histories) : le nom
  d'une personne n'est jamais apposé sur ce qu'elle n'a pas fait.
- L'historique persistant des événements est en ajout seul pour les agents :
  `event_history_read` ne peut ni le vider ni en supprimer quoi que ce soit.
- Chaque geste d'un agent dans l'interface qui change quelque chose (`ui_click`, `ui_set_text`,
  `ui_select`, `ui_set_theme`) laisse une ligne dans le domaine **Agent** : l'outil, ce sur quoi il
  a agi et la page, jamais le texte écrit. Ces lignes vont dans le fichier journal du programme
  (le dossier `logs`, voir [Installation et premier démarrage](app-install)) et dans une
  [capture détaillée](events-console#detailed-capture), pas dans la liste de la console : une
  longue automatisation n'en chasse ni les avertissements ni les erreurs. Ce que le geste
  provoque est journalisé dans la console comme d'habitude.
