Files
egutierrez fc86edd94c chore: auto-commit (27 archivos)
- .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>
2026-05-26 19:38:16 +02:00
..
2026-05-26 19:38:16 +02:00
2026-05-26 19:38:16 +02:00
2026-05-26 19:38:16 +02:00
2026-05-26 19:38:16 +02:00
2026-05-26 19:38:16 +02:00

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:

  1. Verificar que los agentes estan corriendo
  2. Levantar Element Web si no esta activo
  3. Ejecutar los tests
  4. Generar reporte en caso de fallos
  5. 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: !help y !ping tienen respuestas deterministicas y se validan con mayor precision.
  • Tests secuenciales: fullyParallel: false y workers: 1 para 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 tool para exec / shell.eval / fs.* pero audit_log no tiene entries, el test falla — captura LLM hallucinando ejecuciones sin tocar el device.
  • Hash chain: verifyHashChain recomputa sha256(prev|ts|req|cap|args_hash|exit) y compara con this_hash de cada fila. Detecta tampering en audit_log.

Prerequisitos

  1. device_agent corriendo en WSL en 10.42.0.10:7474 con --audit /tmp/device_audit.db.
  2. agents_and_robots.service activo en VPS organic-machine.com.
  3. SSH key-based al VPS (ssh organic-machine.com true sin password). Override con AGENT_LOG_SSH_TARGET.
  4. claude CLI instalado en el VPS para que agent-wsl-lucas pueda generar respuestas.
  5. e2e/.env con MATRIX_* 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.