43c70e904b
- 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>
143 lines
6.9 KiB
Markdown
143 lines
6.9 KiB
Markdown
# 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.
|