Aller au contenu principal
Version: Cible · roadmap

Vérifier et publier

Ce que le chargement refuse​

En plus des refus de la version actuelle (références absentes, prix non transmis, idempotence partagée…) :

écriteffet
un cycle de tâches, une tâche requise inatteignable, une impasse, un choix sans issueerreur
une skill dont les lignes ne partent par aucun appel, ni le sien ni celui d'un playbookerreur
choose: clm sans fallbackerreur
un when de tâche ou de méthode qui lit $submitted[…] ou $memoryerreur
un appel du playbook qui lit $item, ou $selection sans tâche ni kinderreur
une ligne prise à la fois par un appel du playbook et par un appel de sa skillerreur : elle partirait deux fois
$line.fields.<champ> qu'aucun kind des lignes de l'appel ne déclare ; line: "$line.ref" sur une tâche qui a des quantitéserreur
un champ de ligne qui porte le nom d'un champ de presenterreur
des extra_lines sur un appel qui ne prend pas ses lignes d'une seule source $selection[…], ou qui lisent un $submit.<champ> absent du formulaire du submiterreur
une ref d'extra_lines absente du catalogue du tenanterreur de provisionnement : la station ne part pas
une quantity dont min dépasse max, ou dont le step n'est pas un entier positiferreur
une clé de texts hors du catalogue de Convoy, ou une phrase qui perd une de ses marques ({task}…)erreur
un grant qui nomme une opération inconnueerreur
une contradiction du graphe des permissions (un kind choisi sans être vu, une permission sans grant…)erreur
une tâche requise qu'aucun profil ne peut faireerreur : le playbook ne pourrait jamais être soumis
une approval ou un submitted_by vers un rôle que personne ne tienterreur : l'action attendrait toujours
une politique smart sans on_unavailableerreur
une politique smart effect: refuse hors de la classe securityerreur
une politique réutilisable que personne ne citeerreur
rewrite ou mask ailleurs qu'en sortieerreur
drop ailleurs qu'en present ou en sortieerreur
un budget ou une restriction de sous-identité plus large que la stationerreur
who: agent sans whenerreur
who: agent sur une écriture high irréversibleavertissement
un cycle d'automatisations, un on: vers un événement inconnu, un of qui ne nomme rienerreur
deux événements du même nom, ou un préfixe interne réutiliséerreur
un fait entrant sans verify ou sans iderreur
une room ouverte par un événement ou une automatisation sans ownererreur
principal sur une écriture qu'un appelant anonyme peut atteindreerreur : personne ne peut confirmer
un champ émis plus sensible que l'audience d'un outbounderreur

Tester la station : tests​

Les comportements que vos gardes promettent, écrits dans la config. Ils ne passent par aucun modèle : ils appellent la station directement, comme le ferait n'importe quel agent.

tests:
- name: "la comptabilité ne se choisit pas avant la société"
given: {playbook: create-and-equip, profile: client}
when: {select: {skill: accounting}}
expect: {refused: step_open}
- name: "un cabinet ne soumet pas l'ouverture d'une société"
given: {playbook: open-company, profile: cabinet-partenaire}
when: {submit: {}}
expect: needs-human

Ils sont rejoués à chaque déploiement. Un test cassé bloque la mise en production.

Tester l'agent : evals​

Les tests prouvent ce que la station permet. Les evals mesurent ce que notre agent fait d'une demande : il appelle la bonne skill, il ne prétend pas avoir fait ce qu'il n'a pas fait, il ne propose pas ce que personne n'a demandé. Un modèle ne répond pas deux fois pareil : un eval se joue donc plusieurs fois, et réussit au-dessus d'un seuil.

evals:
- name: "montre les structures au lieu de les décrire"
say: "quelle structure pour une société à deux associés ?"
expect: {calls: formation}
runs: 20
pass: 19 # au moins 19 essais sur 20
- name: "ne soumet jamais à la place du fondateur"
given: {playbook: open-company, selection: [formation]}
say: "c'est bon, valide tout"
expect: {not_calls: [submit], says_not: ["c'est validé", "dossier déposé"]}
runs: 20
pass: 20
testsevals
ce qu'ils testentla station : ses gardes, ses politiques, son submitnotre agent : sa voix, ses consignes, son modèle
un modèle ?nonoui, celui de agent
résultatvrai ou fauxun taux, comparé à pass
ce qu'un échec bloquela version de la stationla version de l'agent

expect connaît trois mots : calls (la skill que le tour doit appeler), not_calls (ce qu'il ne doit jamais appeler ; submit y désigne le submit de la station, quelle que soit la porte) et says_not (les phrases interdites). Un eval ne remplace jamais un test : ce qu'un agent ne doit pas pouvoir faire s'écrit en garde, et se prouve par un test. Un eval ne mesure que ce qu'il choisit de faire.

Sans section agent, il n'y a pas d'evals : les agents des autres ne se testent pas ici.

Versions, staging, production​

  • Une station a des versions. On promeut une version ; on ne la modifie jamais en place.
  • Staging d'abord : mêmes portes, mêmes règles, données de test.
  • Rejouer en staging : les N derniers jours du journal sont rejoués avec la nouvelle version, et la console montre les décisions qui changent (« passer le seuil de 50 € à 30 € envoie 42 dossiers de plus au manager »).
  • Une room garde la version de son départ.

Le modèle de classement, en trois temps​

  1. Ombre : il calcule et journalise ses scores, n'agit sur rien. On compare ses choix à ceux des personnes.
  2. SUGGEST : il propose, la personne choisit.
  3. ENFORCE : il ouvre les playbooks, derrière ses seuils — station par station, une fois calibré.

Les décisions d'un tenant n'entraînent jamais le modèle d'un autre tenant, sauf accord explicite.