Files
agents_and_robots/dev/issues/completed/0034-e2e-create-bot-skill.md
T
egutierrez 43c70e904b docs: cerrar issue 0034 y actualizar CLAUDE.md
- Añadir test-bot a tabla de agentes en CLAUDE.md
- Añadir nuevos specs E2E a la lista de tests
- Mover issue a completed, actualizar README

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-04-09 20:45:17 +00:00

6.9 KiB

0034 — E2E: verificar skill /create-bot con robot de prueba

Objetivo

Crear un robot de prueba usando la skill /create-bot y escribir tests E2E con Playwright que verifiquen que el robot se creo correctamente y responde a comandos en Matrix. Esto valida el pipeline completo: scaffold → build → register → verify → comandos funcionales.

Contexto

  • La skill /create-bot existe en .claude/skills/create-bot/ y ejecuta create-full.sh + conversion a robot
  • Ya hay E2E tests para agentes (assistant-bot, asistente-2) en e2e/tests/
  • No hay tests que validen robots ni el pipeline de creacion de bots
  • Los robots solo responden a comandos (!xxx), no tienen LLM — los assertions pueden ser estrictos (deterministicos)
  • El issue 0032 hace lo mismo pero para agentes con LLM — este es el equivalente para robots

Arquitectura

agents/test-bot/                     NEW — robot creado por /create-bot
agents/test-bot/agent.go             NEW — Rules() retorna nil
agents/test-bot/config.yaml          NEW — config tipo robot
agents/test-bot/commands.go          NEW — comandos custom de prueba
cmd/launcher/main.go                 MOD — blank import + registro de comandos custom
e2e/tests/test-bot.spec.ts           NEW — tests E2E del robot
e2e/tests/create-bot-pipeline.spec.ts NEW — tests del pipeline de creacion

Patron pure core / impure shell

  • pkg/ — sin cambios
  • shell/ — sin cambios
  • agents/test-bot/ — composicion: agent.go puro (nil rules) + config YAML + commands.go
  • e2e/ — tests Playwright (fuera del modulo Go)

Tareas

Fase 1: Crear robot de prueba con /create-bot

  • 1.1 Ejecutar /create-bot test-bot "Test Bot" con los siguientes inputs:
    • bot-id: test-bot
    • display-name: "Test Bot"
    • description: "Robot de prueba para validar el pipeline de creacion de bots"
    • Comandos custom: !echo <text> (repite el texto), !dice (numero aleatorio 1-6)
  • 1.2 Verificar que create-full.sh completa las 4 etapas sin errores
  • 1.3 Verificar que el config tiene agent.type: robot
  • 1.4 Verificar que no existe agents/test-bot/prompts/ (robots no tienen system prompt)
  • 1.5 Implementar los comandos custom en agents/test-bot/commands.go:
    • !echo <text>: devuelve el texto tal cual (util para assertions exactas)
    • !dice: devuelve un numero aleatorio entre 1 y 6
  • 1.6 Registrar comandos en cmd/launcher/main.go
  • 1.7 Verificar compilacion: go build -tags goolm ./...
  • 1.8 Arrancar y verificar que el robot responde: ./dev-scripts/server/start.sh

Fase 2: E2E tests del robot

  • 2.1 Crear e2e/tests/test-bot.spec.ts con los siguientes tests:
    • !help funciona: enviar !help → verificar que lista comandos built-in + custom (echo, dice)
    • !ping funciona: enviar !ping → verificar respuesta (assertion estricta)
    • !echo funciona: enviar !echo hello world → verificar que responde "hello world" (assertion estricta)
    • !dice funciona: enviar !dice → verificar que responde un numero entre 1 y 6
    • Comando desconocido: enviar !unknown → verificar respuesta de error
    • Mensaje normal ignorado: enviar "hola" sin prefijo → verificar que NO responde (silencio)
    • Sin errores de descifrado: verificar assertNoDecryptionErrors en cada test
  • 2.2 Seguir el patron de los tests existentes para fixtures, imports y estructura
  • 2.3 Ejecutar los tests: ./dev-scripts/e2e/run.sh test-bot

Fase 3: E2E test del pipeline de creacion (validacion estructural)

  • 3.1 Crear e2e/tests/create-bot-pipeline.spec.ts que valide la estructura:
    • Verificar que agents/test-bot/agent.go existe y Rules() retorna nil
    • Verificar que agents/test-bot/config.yaml tiene agent.type: robot
    • Verificar que NO existe agents/test-bot/prompts/system.md
    • Verificar que cmd/launcher/main.go tiene el blank import
    • Verificar que agents/test-bot/commands.go existe
  • 3.2 Estos tests pueden ser scripts bash o tests Node.js — no requieren Playwright

Fase 4: Tests

  • 4.1 Ejecutar suite E2E completa: ./dev-scripts/e2e/run.sh
  • 4.2 Verificar que tests existentes siguen pasando (no regresion)
  • 4.3 Verificar build completo: go build -tags goolm ./... y go test -tags goolm ./...

Fase 5: Cleanup y docs

  • 5.1 Actualizar CLAUDE.md tabla de agentes con test-bot (tipo robot)
  • 5.2 Documentar en e2e/README.md el nuevo spec y la estrategia de testing para robots

Ejemplo de uso

# 1. Crear el robot con la skill
> /create-bot test-bot "Test Bot"
(skill ejecuta create-full.sh, convierte a robot, crea comandos)

# 2. Arrancar y probar manualmente
> ./dev-scripts/server/start.sh
> (en Matrix) !help
< Comandos disponibles:
<   !help  — Muestra esta ayuda
<   !ping  — Verifica conectividad
<   !echo  — Repite el texto
<   !dice  — Lanza un dado (1-6)

> !echo hola mundo
< hola mundo

> !dice
< 4

> hola                    # mensaje sin prefijo
> (sin respuesta)         # robot lo ignora

# 3. Correr E2E
> ./dev-scripts/e2e/run.sh test-bot
  ✓ !help lista todos los comandos (2s)
  ✓ !ping responde (2s)
  ✓ !echo repite el texto (2s)
  ✓ !dice devuelve numero valido (2s)
  ✓ comando desconocido muestra error (2s)
  ✓ mensaje sin prefijo es ignorado (5s)
  6 passed

Decisiones de diseno

  • Assertions estrictas: a diferencia de los tests de agentes con LLM (assertions flexibles por no-determinismo), los tests de robots son 100% deterministicos. Cada comando tiene una respuesta predecible → assertions exactas.
  • !echo como comando de prueba: permite enviar cualquier texto y verificar que lo devuelve exactamente — ideal para debugging y assertions.
  • !dice como comando con variabilidad: permite testear que el bot responde algo valido dentro de un rango, sin ser deterministico exacto.
  • Test de silencio: verificar que un mensaje normal NO genera respuesta es critico para robots — asegura que el robot no intenta procesar mensajes como un agente LLM.
  • Robot permanente: el robot de prueba se queda en el repo como referencia de creacion y target permanente para E2E.

Prerequisitos

  • Issue 0030 completado (Robot vs Agent separacion) ✓
  • Skill /create-bot funcionando (en .claude/skills/create-bot/)
  • E2E infrastructure funcionando (issue 0022 completado) ✓
  • Variables de entorno del homeserver configuradas

Riesgos

  • create-full.sh no soporta robots nativamente: el script crea un agente por defecto, la skill lo convierte despues. Riesgo bajo — la conversion es solo editar config y borrar prompts.
  • Timing en test de silencio: verificar que el bot NO responde requiere esperar un timeout. Mitigacion: timeout corto (5s) ya que los robots responden en <1s.
  • E2EE verification: el robot necesita cross-signing funcional. Mitigacion: verify.sh ya maneja esto.