Aller au contenu

Loops et bubbles

Une bubble est un agent avec un rôle unique. À chaque fois que le loop l’atteint, la bubble effectue une passe : elle lit ce que la bubble précédente a transmis, travaille (en lisant des fichiers, en écrivant du code, en exécutant des commandes, selon ce que son rôle autorise) et se termine par un verdict.

Les rôles :

Rôle Ce qu’il fait Peut écrire des fichiers
Architect Planifie le travail et sa structure Documentation uniquement
Planner Divise le travail en cartes Non
Designer Écrit DESIGN.md et donne une direction visuelle au codeur Documentation uniquement
Coder Écrit le code Oui
Reviewer Lit le travail, exécute la révision visuelle pour les applications dotées d’une interface utilisateur Non
Tester Écrit et exécute les tests Oui
Fixer Répare ce qu’une révision ou un test a trouvé Oui
Documenter Écrit la documentation Documentation uniquement
Researcher Cherche des informations sur le Web Non
Security Vérifie le travail à la recherche de vulnérabilités Non
Creative, Feasibility Proposent des idées et les jugent, pour les tableaux qui génèrent leur propre travail Non
Subloop N’exécute aucun agent. Ouvre un Sub-loop et y achemine (voir ci-dessous) Non
Wait N’exécute aucun agent. Met un loop en attente jusqu’à ce qu’un événement se produise, comme la fin d’un autre loop ou l’arrivée d’une carte Non
Custom Votre propre bubble : ses entrées, ses sorties, son rôle et ce qu’il est autorisé à faire Selon vos paramètres

Chaque passe se termine par l’un de ces quatre résultats :

  • PASS et PARTIAL constituent le jugement de l’agent selon lequel le travail est bon ou partiellement bon.
  • FAIL est le jugement de l’agent selon lequel il ne l’est pas. Un FAIL peut être acheminé vers un Fixer.
  • ERROR signifie que l’agent n’a jamais réellement fonctionné : le fournisseur était hors service, le modèle n’a pas pu répondre, un paramètre est manquant. Une ERROR due à une panne ou à un paramètre manquant n’est jamais acheminée vers un Fixer. Une passe qui manque d’étapes le fait.

Déposez deux bubbles l’une sur l’autre et elles forment un loop. Déposez-en d’autres sur le ring pour les ajouter. L’ordre autour du ring est l’ordre des passes, et les connexions sont tracées pour vous à partir de cet ordre.

Un Sub-loop dépend d’une bubble Subloop dans son loop parent. Lorsque la condition de la bubble est remplie, le loop parent attend pendant que le Sub-loop s’exécute, puis reprend là où il s’était arrêté. Par défaut, cela se produit lorsque la bubble qui le précède échoue : une révision échouée va à un Fixer, et le loop reprend au niveau de la bubble Subloop.

Le champ Divert when de la bubble Subloop choisit la condition. Chacune est affichée par son code, avec cette ligne en dessous :

Divert when Ce qu’il teste
ON_FAIL (par défaut) L’étape a signalé un échec
VULNERABILITY_FOUND L’étape a signalé un échec, le même test que ON_FAIL, nommé pour une vérification de sécurité
ON_PASS L’étape a réussi
TASKS_EMPTY Plus rien dans la file d’attente

L’étape est la bubble Subloop elle-même, qui n’exécute aucun agent : elle signale un échec tant que tout ce qui la précède dans le loop en signale encore un, et réussit une fois que chaque échec a reçu une réponse.

Le paramètre How often choisit entre Every time the condition holds et Once, then stay on the main loop.

Chaque loop qui écrit du code possède un dossier dans le projet, et aucun loop ne peut en partager un. Les bubbles d’un loop peuvent lire l’ensemble du projet. Les outils de fichier maintiennent toujours un loop dans son dossier. Ses commandes y sont maintenues par le système d’exploitation uniquement lorsque l’option Sandbox agent commands est activée dans les Paramètres. Un loop sans bubble d’écriture n’a pas besoin de dossier. Un Sub-loop écrit dans le dossier de son loop principal.

Appuyez sur Play sur le tableau pour exécuter tous les loops, ou sur un loop pour exécuter uniquement celui-là. Plusieurs loops s’exécutent en même temps, chacun dans sa propre voie. Les loops partagent le travail par le biais du Task Book et des fichiers sur le disque, et non par le biais de leurs conversations respectives.

  • Pause permet à la passe en cours de se terminer ; le bouton indique ensuite Stop, qui s’arrête immédiatement et rejette cette passe.
  • Play après une pause reprend là où le loop s’était arrêté.
  • Un loop ne prend jamais de carte Draft ; il démarre uniquement sur les cartes Approved. Draft est l’endroit où vous examinez le travail avant qu’aucun loop ne commence à y travailler.

Chaque loop a trois limites, définies dans ses paramètres :

Limite Par défaut Arrête le loop lorsque
Max loop executions 100 il a effectué ce nombre de passes
Max errors per step 8 une bubble a échoué ce nombre de fois d’affilée
Total loop error cap 15 le loop a échoué ce nombre de fois au total

Un loop s’arrête également lorsqu’une bubble continue de produire la même modification, ou lorsqu’il ne peut rien faire (par exemple, chaque carte est toujours dans Draft). Un loop arrêté indique la raison dans une notification et dans son panneau sur le canvas. Un loop limité par le taux l’indique uniquement dans son panneau. Corrigez la cause et appuyez sur Play, ce qui efface les compteurs du loop et le réexécute à partir de l’endroit où il s’est arrêté.

Les limites de taux et les pannes de fournisseurs ne consomment pas les limites d’erreurs, à moins que le loop n’ait activé l’option Continue on error. Un loop limité par le taux attend et reprend de lui-même lorsque le fournisseur indique le temps d’attente ; une panne génère une notification et attend que vous pressiez Play.