# 0032 — E2E: verificar skill /create-agent con agente de prueba

## Objetivo

Crear un agente de prueba con personalidad muy marcada usando la skill `/create-agent` y escribir tests E2E con Playwright que verifiquen que el agente se creo correctamente y responde en Matrix con la personalidad esperada. Esto valida el pipeline completo: scaffold → build → register → verify → respuesta funcional.

## Contexto

- La skill `/create-agent` existe en `.claude/skills/create-agent/` y ejecuta `create-full.sh` internamente
- Ya hay E2E tests para `assistant-bot` y `asistente-2` en `e2e/tests/`
- Los tests E2E usan Playwright contra Element Web + homeserver real
- No hay tests que validen el pipeline de creacion de agentes — solo se testean agentes ya existentes
- El agente de prueba tendra una personalidad exagerada y facilmente verificable (ej: habla como pirata, responde siempre con rimas, etc.) para que los assertions sean robustos

## Arquitectura

```
agents/test-personality/                NEW — agente creado por /create-agent
agents/test-personality/agent.go        NEW — reglas puras (llm-all)
agents/test-personality/config.yaml     NEW — config con personalidad marcada
agents/test-personality/prompts/        NEW — system prompt con personalidad exagerada
cmd/launcher/main.go                    MOD — registro del agente en rulesRegistry
e2e/tests/test-personality.spec.ts      NEW — tests E2E del agente
e2e/tests/create-agent-pipeline.spec.ts NEW — tests E2E del pipeline de creacion
```

### Patron pure core / impure shell

- `pkg/` — sin cambios
- `shell/` — sin cambios
- `agents/test-personality/` — composicion: agent.go puro (reglas) + config YAML + system prompt
- `tools/` — sin cambios
- `e2e/` — tests Playwright (fuera del modulo Go)

## Tareas

### Fase 1: Crear agente de prueba con /create-agent

- [ ] **1.1** Ejecutar `/create-agent test-personality "Test Personality"` con los siguientes inputs:
  - `agent-id`: `test-personality`
  - `display-name`: `"Test Personality"`
  - `description`: `"Agente de prueba con personalidad de pirata espacial para validar el pipeline de creacion"`
  - `llm.provider`: `openai` (default)
  - `llm.model`: `gpt-4o` (default)
  - `tool_use`: `false`
  - System prompt: personalidad de **pirata espacial** — siempre habla con jerga pirata mezclada con terminos de ciencia ficcion, usa emojis de calavera y cohetes, empieza cada respuesta con "¡Arrr, cosmonauta!" o variante, y termina con "¡Que la marea estelar te acompane!"
- [ ] **1.2** Verificar que `create-full.sh` completa las 4 etapas sin errores (scaffold, build, register, verify)
- [ ] **1.3** Personalizar `agents/test-personality/prompts/system.md` con la personalidad de pirata espacial (bien exagerada para que sea facilmente detectable en tests)
- [ ] **1.4** Verificar compilacion: `go build -tags goolm ./...`
- [ ] **1.5** Arrancar el servidor y verificar que el agente responde en Matrix: `./dev-scripts/server/start.sh`

### Fase 2: E2E tests del agente

- [ ] **2.1** Crear `e2e/tests/test-personality.spec.ts` con los siguientes tests:
  - **Responde a saludo**: enviar "Hola" → verificar que la respuesta contiene jerga pirata/espacial (keywords: "arrr", "cosmonauta", "estelar", "marea", o similares)
  - **Personalidad consistente**: enviar pregunta seria ("Que es la gravedad?") → verificar que responde con contenido correcto pero manteniendo la personalidad (jerga pirata/espacial presente)
  - **!help funciona**: enviar `!help` → verificar que lista comandos (built-in commands)
  - **!ping funciona**: enviar `!ping` → verificar respuesta
  - **Sin errores de descifrado**: verificar `assertNoDecryptionErrors` en cada test
- [ ] **2.2** Seguir el patron de los tests existentes (`assistant-bot.spec.ts`) para fixtures, imports y estructura
- [ ] **2.3** Ejecutar los tests y verificar que pasan: `./dev-scripts/e2e/run.sh test-personality`

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

- [ ] **3.1** Crear `e2e/tests/create-agent-pipeline.spec.ts` (o un test dentro de `test-personality.spec.ts`) que valide la estructura generada por el pipeline:
  - Verificar que `agents/test-personality/agent.go` existe y exporta `Rules()`
  - Verificar que `agents/test-personality/config.yaml` tiene `agent.id: test-personality`
  - Verificar que `agents/test-personality/prompts/system.md` contiene la seccion de seguridad obligatoria
  - Verificar que `cmd/launcher/main.go` contiene el import y la entrada en `rulesRegistry`
- [ ] **3.2** Estos tests pueden ser scripts bash o tests de Node.js que lean los archivos — no requieren Playwright

### Fase 4: Tests

- [ ] **4.1** Ejecutar suite E2E completa: `./dev-scripts/e2e/run.sh` (todos los tests, incluyendo los nuevos)
- [ ] **4.2** Verificar que los tests existentes de `assistant-bot` y `asistente-2` 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-personality`
- [ ] **5.2** Documentar en `e2e/README.md` el nuevo spec y la estrategia de personalidad para tests

---

## Ejemplo de uso

```
# 1. Crear el agente con la skill
> /create-agent test-personality "Test Personality"
(skill ejecuta create-full.sh, personaliza archivos)

# 2. Arrancar y probar manualmente
> ./dev-scripts/server/start.sh
> (en Matrix) Hola!
< ¡Arrr, cosmonauta! 🏴‍☠️🚀 Bienvenido a bordo de la nave...
  ¡Que la marea estelar te acompane!

# 3. Correr E2E
> ./dev-scripts/e2e/run.sh test-personality
  ✓ responde con personalidad de pirata espacial (15s)
  ✓ personalidad consistente en respuestas serias (18s)
  ✓ !help muestra comandos (3s)
  ✓ !ping responde (2s)
  4 passed
```

## Decisiones de diseno

- **Pirata espacial como personalidad**: es suficientemente exagerada para generar keywords detectables (arrr, cosmonauta, estelar, marea) pero no tan absurda como para que el LLM la ignore. Las assertions buscan presencia de al menos una keyword de un set, no matching exacto.
- **Assertions flexibles para LLM**: las respuestas LLM son no-deterministicas, asi que verificamos presencia de keywords del tema pirata/espacial, no texto exacto. Para `!help` y `!ping` si usamos assertions estrictas (son comandos deterministicos).
- **Test de pipeline como script separado**: la validacion estructural (archivos existen, config correcto) no necesita Playwright, asi que puede ser un test de Node.js simple o bash script. Esto lo hace mas rapido y mas facil de debuggear.
- **Agente permanente**: el agente de prueba se queda en el repo como agente real. Sirve como referencia de creacion y como target permanente para E2E tests del pipeline.

## Prerequisitos

- E2E infrastructure funcionando (issue 0022 completado)
- Skill `/create-agent` funcionando (ya existe en `.claude/skills/create-agent/`)
- Variables de entorno del homeserver configuradas (`MATRIX_ADMIN_TOKEN`, etc.)
- Element Web disponible para tests Playwright

## Riesgos

- **LLM no respeta personalidad**: mitigacion — system prompt muy explicito y exagerado, keywords amplias (buscar cualquiera de un set, no todas)
- **Rate limits del LLM**: mitigacion — pocos tests con respuesta LLM (2-3), el resto son comandos directos
- **create-full.sh falla por estado previo**: mitigacion — verificar que no exista `agents/test-personality/` antes de ejecutar, o limpiar si existe
- **Flakiness en E2E por timing**: mitigacion — timeouts generosos (60s para LLM), reintentos en el pipeline de Playwright
