Ir al contenido

Loops y bubbles

Una bubble es un agente con un rol. Cada vez que el loop llega a ella, la bubble hace una pasada: lee lo que le pasó la bubble anterior, trabaja (lee archivos, escribe código, ejecuta comandos, según lo permita su rol) y termina con un veredicto.

Los roles:

Rol Qué hace Puede escribir archivos
Arquitecto Planifica el trabajo y su estructura Solo documentos
Planificador Divide el trabajo en tarjetas No
Diseño Escribe DESIGN.md y le da al programador una dirección visual Solo documentos
Programador Escribe el código Sí
Revisor Lee el trabajo y hace la revisión visual de las apps con interfaz No
Pruebas Escribe y ejecuta pruebas Sí
Reparador Arregla lo que encontró una revisión o una prueba Sí
Documentador Escribe documentación Solo documentos
Investigador Busca información en la web No
Seguridad Revisa el trabajo en busca de vulnerabilidades No
Creativo, Viabilidad Proponen ideas y las juzgan, para tableros que generan su propio trabajo No
Subloop No ejecuta ningún agente. Abre un Sub-loop y desvía hacia él (ver más abajo) No
Wait No ejecuta ningún agente. Retiene un loop hasta que pase algo, como que otro loop termine o llegue una tarjeta No
Propio Una bubble a medida: sus entradas, sus salidas, su propósito y lo que se le permite hacer Según se configure

Cada pasada termina con uno de cuatro resultados:

  • PASS y PARTIAL son el juicio del propio agente de que el trabajo está bien o parcialmente bien.
  • FAIL es el juicio del agente de que no lo está. Un FAIL puede desviarse a un reparador.
  • ERROR significa que el agente en realidad nunca se ejecutó: el proveedor estaba caído, el modelo no pudo responder, falta un ajuste. Un ERROR por una caída o por un ajuste que falta nunca se desvía a un reparador. Una pasada que se queda sin pasos sí.

Al soltar una bubble sobre otra, forman un loop. Para añadir más, se sueltan sobre el ring. El orden alrededor del ring es el orden de las pasadas, y las conexiones se dibujan solas a partir de ese orden.

Un Sub-loop cuelga de una bubble Subloop en su loop padre. Cuando se cumple la condición de la bubble, el loop padre espera mientras el Sub-loop se ejecuta y después continúa donde lo dejó. Por defecto, eso ocurre cuando falla la bubble anterior: una revisión fallida va a un Reparador, y el loop retoma en la bubble Subloop.

El campo Desviar cuando de la bubble Subloop elige la condición. Cada una se muestra con su código, con esta línea debajo:

Desviar cuando Qué comprueba
ON_FAIL (por defecto) El paso informó un fallo
VULNERABILITY_FOUND El paso informó un fallo, la misma comprobación que ON_FAIL, con nombre para una revisión de seguridad
ON_PASS El paso pasó
TASKS_EMPTY No queda nada en la cola

El paso es la propia bubble Subloop, que no ejecuta ningún agente: informa un fallo mientras algo anterior a ella en el loop siga informando uno, y pasa en cuanto se haya respondido a cada fallo.

Con qué frecuencia elige entre Cada vez que se cumpla la condición y Una vez y después seguir en el loop principal.

Cada loop que escribe código es dueño de una carpeta dentro del proyecto, y dos loops no pueden compartir una. Las bubbles de un loop pueden leer todo el proyecto. Las herramientas de archivos siempre limitan un loop a su carpeta. Sus comandos quedan limitados a ella por el sistema operativo solo con Aislar los comandos del agente activado en Ajustes. Un loop sin bubble que escriba no necesita carpeta. Un Sub-loop escribe en la carpeta de su loop principal.

Pulsar Play en el tablero para ejecutar todos los loops, o en un loop para ejecutar solo ese. Varios loops se ejecutan a la vez, cada uno en su propio carril. Los loops comparten el trabajo a través del Task Book y de los archivos en disco, no a través de la conversación de los demás.

  • Pausa deja terminar la pasada en curso; después el botón dice Parar, que detiene al instante y descarta esa pasada.
  • Play después de una pausa continúa donde se quedó el loop.
  • Un loop nunca toma una tarjeta Draft; solo empieza con las Approved. Draft es donde se revisa el trabajo antes de que ningún loop empiece con él.

Cada loop tiene tres topes, definidos en sus ajustes:

Tope Por defecto Detiene el loop cuando
Máx. ejecuciones del loop 100 ha hecho esa cantidad de pasadas
Máx. errores por paso 8 una bubble ha fallado esa cantidad de veces seguidas
Tope total de errores del loop 15 el loop ha fallado esa cantidad de veces en total

Un loop también se detiene cuando una bubble sigue produciendo el mismo cambio, o cuando no hay nada que pueda hacer (por ejemplo, todas las tarjetas siguen en Draft). Un loop detenido dice por qué en un aviso y en su panel del canvas. Un loop con límite de uso alcanzado lo dice solo en su panel. Una vez corregida la causa, pulsar Play, que reinicia los contadores del loop y lo vuelve a ejecutar desde donde se detuvo.

Los límites de uso y las caídas del proveedor no gastan los topes de errores, salvo que el loop tenga Continuar tras error activado. Un loop con límite de uso alcanzado espera y se reanuda solo cuando el proveedor indica cuánto esperar; una caída genera un aviso y espera a que se pulse Play.