7913116a8e
- .claude/agents/fn-analizador/SKILL.md - .claude/agents/fn-constructor/SKILL.md - .claude/agents/fn-executor/SKILL.md - .claude/agents/fn-mejorador/SKILL.md - .claude/agents/fn-orquestador/SKILL.md - .claude/agents/fn-recopilador/SKILL.md - .claude/commands/app.md - .claude/commands/compile.md - .claude/commands/cpp-app.md - .claude/commands/create_functions.md - ... Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
112 lines
5.1 KiB
YAML
112 lines
5.1 KiB
YAML
# e2e_checks proposal — metabase_registry
|
|
# app_id: metabase_registry
|
|
# lang: py
|
|
# stack: Python + httpx + argparse (no venv propio, usa python/.venv del repo)
|
|
# entry: apps/metabase_registry/main.py
|
|
# date: 2026-05-19
|
|
# issue: 0121a wave 3
|
|
#
|
|
# Notas de deteccion:
|
|
# - lang=py, framework=httpx (requirements.txt: httpx>=0.27.0)
|
|
# - Tres scripts ejecutables: main.py, create_registry_dashboard.py,
|
|
# create_apps_dashboard.py. Sin pyproject.toml, sin tests/.
|
|
# - NO es service (sin tag service, sin puerto HTTP propio).
|
|
# - operations.db presente con schema completo (11 tablas + schema_migrations).
|
|
# - Credenciales: en .env y env vars, NUNCA en checks. Todos los checks
|
|
# son mock-only (import + syntax + dry-run sin conexion a Metabase real).
|
|
# - Sin tests/ → check 'tests' OMITIDO (regla: no inventar tests inexistentes).
|
|
#
|
|
# REGLAS APLICADAS:
|
|
# - Sin credenciales reales en ningun cmd.
|
|
# - Todos los checks son idempotentes y terminan solos (sin &).
|
|
# - python/.venv del repo padre (ruta absoluta para claridad; adaptar si se
|
|
# crea venv propio en la app).
|
|
# - ops_audit incluido porque operations.db existe y tiene 2 entities + assertions.
|
|
|
|
e2e_checks_suggested:
|
|
# --- Check 1: import ---
|
|
# Verifica que el modulo main.py es importable y sus dependencias del registry
|
|
# (python/functions/metabase/) estan disponibles sin errores de import.
|
|
# No conecta a Metabase — solo resuelve imports.
|
|
- id: import
|
|
cmd: >
|
|
cd $HOME/fn_registry/apps/metabase_registry &&
|
|
$HOME/fn_registry/python/.venv/bin/python3 -c
|
|
"import sys, os;
|
|
sys.path.insert(0, os.path.join(os.getcwd(), '..', '..', 'python', 'functions'));
|
|
from metabase import MetabaseClient, metabase_create_card, metabase_create_dashboard, metabase_update_dashboard;
|
|
from metabase.client import metabase_auth;
|
|
from metabase.databases import metabase_add_database, metabase_list_databases;
|
|
print('imports OK')"
|
|
expect_stdout_contains: "imports OK"
|
|
timeout_s: 15
|
|
severity: critical
|
|
# por que: si los imports del registry fallan, ningun script funciona.
|
|
# detecta: renombrado de funciones metabase_*, rotura de __init__.py, httpx no instalado.
|
|
|
|
# --- Check 2: cli_help ---
|
|
# Verifica que el parser CLI de main.py esta intacto.
|
|
# argparse imprime usage sin necesitar credenciales ni conexion.
|
|
- id: cli_help
|
|
cmd: >
|
|
cd $HOME/fn_registry/apps/metabase_registry &&
|
|
$HOME/fn_registry/python/.venv/bin/python3 main.py --help
|
|
expect_stdout_contains: "metabase_registry"
|
|
expect_exit: 0
|
|
timeout_s: 10
|
|
severity: critical
|
|
# por que: si --help falla, el CLI esta roto (argparse error o import error previo).
|
|
|
|
# --- Check 3: syntax_check (todos los scripts) ---
|
|
# Compila los tres scripts con py_compile sin ejecutarlos.
|
|
# Detecta SyntaxError y NameError de nivel modulo antes de cualquier deploy.
|
|
- id: syntax_check
|
|
cmd: >
|
|
cd $HOME/fn_registry/apps/metabase_registry &&
|
|
$HOME/fn_registry/python/.venv/bin/python3 -m py_compile
|
|
main.py create_registry_dashboard.py create_apps_dashboard.py
|
|
create_script_navegador_dashboard.py &&
|
|
echo "syntax OK"
|
|
expect_stdout_contains: "syntax OK"
|
|
timeout_s: 10
|
|
severity: critical
|
|
# por que: los 4 scripts no tienen tests unitarios; py_compile es el gate
|
|
# mas ligero antes de un run real. Detecta typos, variables no definidas
|
|
# a nivel modulo, imports ciclicos.
|
|
|
|
# --- Check 4: dry_run_parser ---
|
|
# Ejercita el parser con credenciales ficticias para verificar que
|
|
# los defaults de env vars y la logica de build_parser() funcionan.
|
|
# Falla INTENCIONALMENTE en autenticacion (no hay Metabase disponible)
|
|
# pero debe mostrar el mensaje de error de auth, no un traceback de Python.
|
|
# severity: warning porque el fallo esperado viene de red, no del codigo.
|
|
- id: dry_run_parser
|
|
cmd: >
|
|
cd $HOME/fn_registry/apps/metabase_registry &&
|
|
METABASE_URL=http://127.0.0.1:19999
|
|
METABASE_ADMIN_EMAIL=test@example.com
|
|
METABASE_ADMIN_PASSWORD=fake_password_for_e2e
|
|
$HOME/fn_registry/python/.venv/bin/python3 main.py
|
|
--url http://127.0.0.1:19999
|
|
--admin-email test@example.com
|
|
--admin-password fake_password_for_e2e
|
|
2>&1 | head -5
|
|
expect_stdout_contains: "[metabase_registry]"
|
|
expect_exit: 1
|
|
timeout_s: 15
|
|
severity: warning
|
|
# por que: verifica que el flujo run() arranca (auth, log(), log_err()),
|
|
# no que Metabase este activo. exit 1 es esperado (sin servidor en :19999).
|
|
# Si sale exit 2 (argparse error) o traceback sin el prefijo → regresion.
|
|
|
|
# --- Check 5: ops_audit ---
|
|
# Invoca fn-recopilador sobre operations.db de esta app.
|
|
# operations.db tiene schema completo (schema_migrations + 11 tablas),
|
|
# 2 entities y assertions declaradas.
|
|
- id: ops_audit
|
|
ref: "fn-recopilador:apps/metabase_registry"
|
|
severity: warning
|
|
# por que: operations.db existe y tiene datos vivos. El recopilador valida
|
|
# integridad referencial, snapshots al dia y assertions activas evaluadas.
|
|
# warning porque la app no depende de operations.db para su funcion principal.
|