- .claude/CLAUDE.md - .claude/rules/create_agent.md - agents/_specials/father-bot/prompts/system.md - agents/_template/config.yaml - agents/_template_robot/config.yaml - cmd/agentctl/autoavatar.go - cmd/launcher/sqlite.go - dev-scripts/_common.sh - dev-scripts/agent/create-full.sh - dev-scripts/agent/delete-full.sh - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
E2E Tests — agents_and_robots
Tests end-to-end con Playwright para verificar que los agentes Matrix responden correctamente via Element Web.
Requisitos
- Node.js v18+
- Agentes corriendo contra el homeserver (
./dev-scripts/server/start.sh) - Credenciales de un usuario de test en el homeserver
Instalacion
./dev-scripts/e2e/install.sh
Esto instala dependencias npm y Chromium para Playwright.
Configuracion
cp e2e/.env.example e2e/.env
Editar e2e/.env con las credenciales del usuario de test:
| Variable | Descripcion |
|---|---|
ELEMENT_URL |
URL de Element Web local (default: http://localhost:8090) |
MATRIX_HOMESERVER |
URL del homeserver Matrix |
MATRIX_USER |
MXID del usuario de test (@user:server) |
MATRIX_PASSWORD |
Password del usuario de test |
MATRIX_RECOVERY_KEY |
Recovery key para cross-signing/E2EE |
Ejecucion
# Ejecutar todos los tests (headless)
./dev-scripts/e2e/run.sh
# Con browser visible (requiere DISPLAY)
./dev-scripts/e2e/run.sh --headed
# Ejecutar un spec especifico
./dev-scripts/e2e/run.sh assistant-bot
# Directamente con Playwright
cd e2e && npx playwright test
cd e2e && npx playwright test --headed
cd e2e && npx playwright test assistant-bot.spec.ts
El script run.sh se encarga de:
- Verificar que los agentes estan corriendo
- Levantar Element Web si no esta activo
- Ejecutar los tests
- Generar reporte en caso de fallos
- Teardown de Element Web (si lo levanto)
Estructura
e2e/
├── package.json dependencias (Playwright, dotenv)
├── playwright.config.ts configuracion de Playwright
├── global-setup.ts login unico antes de todos los tests
├── .env.example template de credenciales
├── fixtures/
│ ├── element-auth.ts login y verificacion E2EE
│ └── matrix-room.ts helpers: goToRoom, sendMessage, waitForBotReply
├── tests/
│ ├── login.spec.ts smoke test: sesion y E2EE
│ ├── assistant-bot.spec.ts tests del assistant-bot
│ └── asistente-2.spec.ts tests del asistente-2 (con tools)
├── scripts/
│ └── setup-element.sh descarga y sirve Element Web local
└── element-web/ Element Web descargado (gitignored)
dev-scripts/e2e/
├── install.sh instalacion de dependencias
└── run.sh orquestacion completa de tests
Debug de fallos
Screenshots
Cuando un test falla, Playwright captura screenshot automaticamente en e2e/test-results/. Revisarlos para entender el estado de la UI al momento del fallo.
Reporte HTML
Si hay fallos, run.sh genera un reporte HTML:
cd e2e && npx playwright show-report
Modo headed
Para ver el browser en tiempo real (requiere entorno grafico):
./dev-scripts/e2e/run.sh --headed
Traces
En el primer retry, Playwright captura un trace completo. Verlo con:
cd e2e && npx playwright show-trace test-results/<test-name>/trace.zip
Login cacheado
El global-setup cachea la sesion autenticada en e2e/.auth/state.json por 12 horas. Si hay problemas de autenticacion:
rm -rf e2e/.auth/
Y re-ejecutar los tests para forzar login fresco.
Notas de diseno
- Assertions flexibles para LLM: las respuestas de los bots son no-deterministicas. Solo se verifica que responde, que no esta vacio, y longitud razonable.
- Commands con assertions estrictas:
!helpy!pingtienen respuestas deterministicas y se validan con mayor precision. - Tests secuenciales:
fullyParallel: falseyworkers: 1para evitar race conditions en el timeline de Matrix. - Timeouts generosos: 60s por test, 30s para expect. Los LLMs pueden tardar 5-20s en responder.
- Retry en CI: 1 retry en CI para manejar timeouts ocasionales.
agent-wsl-lucas (issue 0144 / flow 0009)
Tests con cobertura DoD Quality Triada (registry rule dod_quality.md) que no se fian de la respuesta visual del bot: cruzan cada turno contra logs SSH del VPS y contra la audit DB local del device_agent.
Que validan
| Capa | Tests | Por que |
|---|---|---|
| 1. Mecanica | M1 bot alive, M2 matrix sync, M3 mesh tools >=14 |
pre-requisito, NO es DoD |
| 2. Cobertura | C1 exec golden, C2 fs.list golden, C3 shell.eval auto-approve, C4 rm -rf bloqueado, C5 tool no-en-manifest, C6 device_agent down, C7 hash chain |
1 golden + 2 edge + 1 error path por DoD |
| 3. Vida util | V1 systemd uptime, V2 tool ratio, V3 latencia |
sobrevivir uso real |
| Anti-criterios | A1 no ERROR inesperado, A2 chain intacta, A3 claim sin audit = hallucination |
invalidan DoD aunque otros pasen |
Cross-checks (no fake passes)
- A3 (anti-criterio clave): si el agent log VPS muestra
executing toolparaexec/shell.eval/fs.*peroaudit_logno tiene entries, el test falla — captura LLM hallucinando ejecuciones sin tocar el device. - Hash chain:
verifyHashChainrecomputasha256(prev|ts|req|cap|args_hash|exit)y compara conthis_hashde cada fila. Detecta tampering enaudit_log.
Prerequisitos
- device_agent corriendo en WSL en
10.42.0.10:7474con--audit /tmp/device_audit.db. agents_and_robots.serviceactivo en VPSorganic-machine.com.- SSH key-based al VPS (
ssh organic-machine.com truesin password). Override conAGENT_LOG_SSH_TARGET. - claude CLI instalado en el VPS para que
agent-wsl-lucaspueda generar respuestas. e2e/.envconMATRIX_*rellenado.
Ejecuta el preflight para verificarlo todo:
./scripts/setup-agent-wsl-lucas.sh
# o
npm run preflight:agent-wsl-lucas
Run
cd e2e
npm install # instala better-sqlite3
npm run test:agent-wsl-lucas # ejecuta solo este spec
# o filtrando una capa
npx playwright test agent-wsl-lucas.spec.ts -g "Capa 2"
# o un test concreto
npx playwright test agent-wsl-lucas.spec.ts -g "C1: golden exec"
Variables de entorno extra (todas opcionales)
| Variable | Default | Para que |
|---|---|---|
AGENT_WSL_LUCAS_ROOM |
Agent Wsl Lucas |
nombre del room en Element |
AGENT_WSL_LUCAS_DISPLAY |
Agent Wsl Lucas |
display name del bot para filtrar replies |
AGENT_LOG_SSH_TARGET |
organic-machine.com |
alias ssh del VPS |
AGENT_LOG_BASE_DIR |
/home/ubuntu/CodeProyects/agents_and_robots/logs |
base de logs en VPS |
DEVICE_AUDIT_DB |
/tmp/device_audit.db |
audit DB del device_agent |
AGENT_LATENCY_THRESHOLD_MS |
20000 |
umbral para V3 (claude-code puede ser lento) |
Reports
Output por defecto en e2e/test-results/. HTML report con npx playwright show-report.
Los tests C* imprimen el JSON.stringify de las filas audit_log cuando fallan — facil de pegar en un issue para debugging.