6664163f6d
Issue 0033: comandos de robots sin prefijo ! — permitir que robots respondan a comandos sin necesitar el prefijo, usando command_prefix vacio en config. Solo aplica a robots, agentes con LLM mantienen el prefijo para distinguir comandos de mensajes naturales. Issue 0034: E2E para skill /create-bot — crear robot de prueba (test-bot) con comandos custom (!echo, !dice) y tests Playwright que validen el pipeline de creacion y los comandos funcionales. Equivalente al issue 0032 pero para robots en vez de agentes. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
6.9 KiB
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-botexiste en.claude/skills/create-bot/y ejecutacreate-full.sh+ conversion a robot - Ya hay E2E tests para agentes (
assistant-bot,asistente-2) ene2e/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 cambiosshell/— sin cambiosagents/test-bot/— composicion: agent.go puro (nil rules) + config YAML + commands.goe2e/— 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-botdisplay-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.shcompleta 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.tscon 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
assertNoDecryptionErrorsen cada test
- !help funciona: enviar
- 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.tsque valide la estructura:- Verificar que
agents/test-bot/agent.goexiste yRules()retorna nil - Verificar que
agents/test-bot/config.yamltieneagent.type: robot - Verificar que NO existe
agents/test-bot/prompts/system.md - Verificar que
cmd/launcher/main.gotiene el blank import - Verificar que
agents/test-bot/commands.goexiste
- Verificar que
- 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 ./...ygo test -tags goolm ./...
Fase 5: Cleanup y docs
- 5.1 Actualizar
CLAUDE.mdtabla de agentes contest-bot(tipo robot) - 5.2 Documentar en
e2e/README.mdel 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.
!echocomo comando de prueba: permite enviar cualquier texto y verificar que lo devuelve exactamente — ideal para debugging y assertions.!dicecomo 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-botfuncionando (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.shya maneja esto.