chore: auto-commit (129 archivos)

- .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>
This commit is contained in:
2026-06-01 22:23:12 +02:00
parent dbf5b45acd
commit 7913116a8e
129 changed files with 427 additions and 422 deletions
@@ -239,7 +239,7 @@ def extract_triples_spacy_es_v2(text: str, nlp: Any, resolve_pronouns: bool = Tr
`.ipython/profile_default/startup/00_fn_registry.py` añade cada subdir de `python/functions/` al sys.path top-level. Como hay un `bigquery/datasets.py` en el registry, **shadows** el paquete `datasets` de HuggingFace que `transformers` necesita. Resultado: en cada notebook hay que aplicar un workaround:
```python
_pf = '/home/lucas/fn_registry/python/functions'
_pf = '$HOME/fn_registry/python/functions'
sys.path = [p for p in sys.path if not p.startswith(_pf + '/')]
if _pf not in sys.path: sys.path.insert(0, _pf)
```
+2 -2
View File
@@ -693,7 +693,7 @@ Eres `agent-home-wsl`, un agente operativo conectado al PC `home-wsl` del operad
por que. El operador vera la respuesta en `#home-wsl` cuando el sudo agent termine.
4. **Proyectos**: para crear un proyecto nuevo, prefiere `project.create` antes que componer
`exec mkdir + fs.write + ...`. Es mas rapido y deja entrada en `memory.projects`.
5. **Registry**: el operador mantiene un registry de funciones en /home/lucas/fn_registry. Si la tarea
5. **Registry**: el operador mantiene un registry de funciones en $HOME/fn_registry. Si la tarea
parece composicion de funciones (ETL, scraping, parsing), pregunta al operador si ya hay algo en el
registry antes de codear desde cero. (No tienes herramienta para consultar el registry directamente;
pidele al operador que ejecute `mcp__registry__fn_search` por ti).
@@ -818,7 +818,7 @@ Flujo:
3. Si operador → "delega":
- `delegate_sudo task="registrar /home/lucas/projects/scraper-precios como app en fn_registry"`.
4. sudo agent ejecuta:
- `cd /home/lucas/fn_registry && ./fn run init_some_pipeline scraper-precios ...` (o similar — depende del scaffolder).
- `cd $HOME/fn_registry && ./fn run init_some_pipeline scraper-precios ...` (o similar — depende del scaffolder).
- Cada paso = approval individual o pre-approved si operator activo `!preapprove fn-* 10m`.
Esto evita que el user agent toque `fn_registry` directamente — el registry es del operador, no del agent. El agent solo orquesta cuando le piden.
@@ -21,7 +21,7 @@ tags: []
`jupyter_discover.py` reporta el campo `analysis` incorrecto. Con Jupyter corriendo desde `analysis/estudio_mercados/`, el discover devolvió `"analysis": "estudio_embeddings"`.
El proceso real tenía `--ServerApp.root_dir=/home/lucas/fn_registry/analysis/estudio_mercados` en su cmdline, pero el discover no lo parsea.
El proceso real tenía `--ServerApp.root_dir=$HOME/fn_registry/analysis/estudio_mercados` en su cmdline, pero el discover no lo parsea.
## Solución propuesta
@@ -89,7 +89,7 @@ deferred -> Deferred
- Frontmatter mal formado (yaml invalid): card aparece con badge `parse-error` + tooltip detalle. NO crashea backend.
- Cambios concurrentes: humano edita `.md` con vim mientras agente lo PATCHea via API. Usar lock file `.md.lock` corto + retry.
- `fsnotify` no funciona bien en WSL para `/mnt/c/` paths. Backend corre en WSL, lee paths nativos (`/home/lucas/fn_registry/dev/...`). Verificar.
- `fsnotify` no funciona bien en WSL para `/mnt/c/` paths. Backend corre en WSL, lee paths nativos (`$HOME/fn_registry/dev/...`). Verificar.
- Issue / flow grandes (>500 lineas body): NO mandar full body en `/cards` (lento). Devolver solo frontmatter + primeras 5 lineas. Body completo via `/cards/<id>` on demand.
- Cards sin `status` (frontmatter incompleto): default `pendiente`.
- Reordenamiento manual: drag-and-drop en UI cambia status (cruzar columna) PERO no orden vertical persistente — no hay campo `order` en frontmatter. Decision: orden por `updated` desc dentro de cada columna.
@@ -55,7 +55,7 @@ e2e_checks:
2. Lanzar `/autonomous-task 0120 --dry-run` para audit.
3. Lanzar `/autonomous-task 0120 --max-iterations 5 --max-minutes 30`.
4. Recoger output: `task_run_id`, branch `auto/0120-*`, log de iteraciones, proposals aplicadas/skipped, URL del PR draft.
5. Verificar `git -C /home/lucas/fn_registry status --short` igual a baseline (regla 11 sandbox breach).
5. Verificar `git -C $HOME/fn_registry status --short` igual a baseline (regla 11 sandbox breach).
6. Post-mortem: si fallo en alguna iteracion, anotar en seccion `## Hallazgos` y refinar `fn-orquestador/SKILL.md` o `autonomous_loop.md` si corresponde.
## Acceptance
@@ -64,7 +64,7 @@ e2e_checks:
- [ ] `apps/chart_demo/app.md` contiene bloque `e2e_checks:` con al menos `build` + `binary_exists`.
- [ ] `fn-analizador` corrida sobre `chart_demo` reporta `checks_pass=checks_total` (todo verde).
- [ ] PR draft existe en Gitea con branch `auto/0120-*` apuntando a `master`.
- [ ] `git -C /home/lucas/fn_registry status --short` antes/despues del piloto identico (excluyendo solo este `.md` cerrado).
- [ ] `git -C $HOME/fn_registry status --short` antes/despues del piloto identico (excluyendo solo este `.md` cerrado).
- [ ] Documento de post-mortem en `## Hallazgos` con: iteraciones totales, tiempo total, proposals creadas, decisiones del orquestador.
## DoD
@@ -69,7 +69,7 @@ Acciones tomadas:
- Clonado `apps/pipeline_launcher` desde Gitea en aurgi-pc para la investigacion; `pc_locations` pasa de `missing` a `active` tras `fn sync` futuro.
Pendiente fuera de scope:
- `apps/pipeline_launcher/go.mod` tiene `replace fn-registry => /home/lucas/fn_registry` hardcoded — el build solo funciona en home-wsl. Issue aparte si se quiere cross-PC build.
- `apps/pipeline_launcher/go.mod` tiene `replace fn-registry => $HOME/fn_registry` hardcoded — el build solo funciona en home-wsl. Issue aparte si se quiere cross-PC build.
- `fn_operations/project_template/operations.db` tiene migraciones aplicadas hasta v5, falta v6. Stale template — issue aparte.
Acceptance:
@@ -65,9 +65,9 @@ e2e_checks:
# reconfiguracion).
- id: cmake_configure_linux
cmd: >
test -f /home/lucas/fn_registry/cpp/build/linux/build.ninja ||
cmake -S /home/lucas/fn_registry/cpp
-B /home/lucas/fn_registry/cpp/build/linux
test -f $HOME/fn_registry/cpp/build/linux/build.ninja ||
cmake -S $HOME/fn_registry/cpp
-B $HOME/fn_registry/cpp/build/linux
-DFN_BUILD_TESTS=OFF
-DCMAKE_BUILD_TYPE=RelWithDebInfo
timeout_s: 60
@@ -77,13 +77,13 @@ e2e_checks:
# y el linkado con fn_framework (app_base.cpp, GLFW, OpenGL) tiene exito.
# Este es el check de compilacion base que corre en cualquier entorno.
- id: build_linux
cmd: "cmake --build /home/lucas/fn_registry/cpp/build/linux --target altsnap_jitter_test -j4"
cmd: "cmake --build $HOME/fn_registry/cpp/build/linux --target altsnap_jitter_test -j4"
timeout_s: 300
severity: critical
# Verifica que el binario Linux existe tras el build.
- id: binary_exists_linux
cmd: "test -f /home/lucas/fn_registry/cpp/build/linux/apps/altsnap_jitter_test/altsnap_jitter_test"
cmd: "test -f $HOME/fn_registry/cpp/build/linux/apps/altsnap_jitter_test/altsnap_jitter_test"
timeout_s: 5
severity: critical
@@ -95,7 +95,7 @@ e2e_checks:
cmd: >
xvfb-run -a -s "-screen 0 1280x800x24"
env LIBGL_ALWAYS_SOFTWARE=1 GALLIUM_DRIVER=llvmpipe
/home/lucas/fn_registry/cpp/build/linux/apps/altsnap_jitter_test/altsnap_jitter_test
$HOME/fn_registry/cpp/build/linux/apps/altsnap_jitter_test/altsnap_jitter_test
timeout_s: 60
severity: critical
@@ -103,7 +103,7 @@ e2e_checks:
# add_imgui_app genera altsnap_jitter_test_appicon.rc; si el .ico falta el build
# mingw pasa pero el .exe Windows queda sin icono embebido.
- id: icon_exists
cmd: "test -f /home/lucas/fn_registry/apps/altsnap_jitter_test/appicon.ico"
cmd: "test -f $HOME/fn_registry/apps/altsnap_jitter_test/appicon.ico"
timeout_s: 5
severity: warning
@@ -124,9 +124,9 @@ e2e_checks:
# real bajo Win32 que xvfb no puede cubrir.
- id: windows_run
cmd: >
FN_REGISTRY_ROOT=/home/lucas/fn_registry
FN_REGISTRY_ROOT=$HOME/fn_registry
bash -c '
source /home/lucas/fn_registry/bash/functions/infra/e2e_run_cpp_windows.sh
source $HOME/fn_registry/bash/functions/infra/e2e_run_cpp_windows.sh
e2e_run_cpp_windows altsnap_jitter_test
'
timeout_s: 300
@@ -35,7 +35,7 @@ e2e_checks:
# Por que: gate esencial — si el target no compila, nada mas tiene sentido.
# Corre sobre el build de Windows via mingw toolchain (cross-compile desde WSL).
- id: build
cmd: "cd /home/lucas/fn_registry/cpp && cmake --build build/windows --target app_hub_launcher -j"
cmd: "cd $HOME/fn_registry/cpp && cmake --build build/windows --target app_hub_launcher -j"
timeout_s: 300
severity: critical
@@ -44,7 +44,7 @@ e2e_checks:
# Este check verifica que el binario existe y es un archivo regular.
# Si el build cross no produjo el .exe o el cp falló, este check lo detecta.
- id: binary_exists
cmd: "test -f /home/lucas/fn_registry/cpp/build/windows/apps/app_hub_launcher/app_hub_launcher.exe"
cmd: "test -f $HOME/fn_registry/cpp/build/windows/apps/app_hub_launcher/app_hub_launcher.exe"
timeout_s: 5
severity: critical
@@ -53,7 +53,7 @@ e2e_checks:
# Si se borra el ico, el .exe no tiene icono embebido (no falla el build, pero rompe el
# contrato visual de la suite). El .ico es artefacto versionado en el sub-repo.
- id: appicon_exists
cmd: "test -f /home/lucas/fn_registry/apps/app_hub_launcher/appicon.ico"
cmd: "test -f $HOME/fn_registry/apps/app_hub_launcher/appicon.ico"
timeout_s: 5
severity: critical
@@ -36,7 +36,7 @@ e2e_checks:
# 2026-05-16 en app.md). Arreglar antes de promover a critical.
# -----------------------------------------------------------------------
- id: build_frontend
cmd: "cd /home/lucas/fn_registry/apps/dag_engine/frontend && pnpm install --frozen-lockfile && pnpm build"
cmd: "cd $HOME/fn_registry/apps/dag_engine/frontend && pnpm install --frozen-lockfile && pnpm build"
timeout_s: 180
severity: warning
# NOTA: severity warning porque pnpm build falla por API drift conocido.
@@ -51,7 +51,7 @@ e2e_checks:
# de trabajo (idempotente, no afecta al binario productivo).
# -----------------------------------------------------------------------
- id: build_backend
cmd: "cd /home/lucas/fn_registry/apps/dag_engine && CGO_ENABLED=1 go build -tags fts5 -o /tmp/dag_engine_e2e_bin ."
cmd: "cd $HOME/fn_registry/apps/dag_engine && CGO_ENABLED=1 go build -tags fts5 -o /tmp/dag_engine_e2e_bin ."
timeout_s: 120
# -----------------------------------------------------------------------
@@ -64,7 +64,7 @@ e2e_checks:
# NO hay flag --migrate-only en el binario actual.
# -----------------------------------------------------------------------
- id: migrations_apply
cmd: "rm -f /tmp/dag_engine_e2e.db /tmp/dag_engine_e2e.db-shm /tmp/dag_engine_e2e.db-wal && /tmp/dag_engine_e2e_bin list --db /tmp/dag_engine_e2e.db /home/lucas/fn_registry/apps/dag_engine/dags_migrated/"
cmd: "rm -f /tmp/dag_engine_e2e.db /tmp/dag_engine_e2e.db-shm /tmp/dag_engine_e2e.db-wal && /tmp/dag_engine_e2e_bin list --db /tmp/dag_engine_e2e.db $HOME/fn_registry/apps/dag_engine/dags_migrated/"
timeout_s: 15
expect_exit: 0
# NOTA: depende de check build_backend (usa /tmp/dag_engine_e2e_bin).
@@ -80,7 +80,7 @@ e2e_checks:
# mal referenciados, etc.).
# -----------------------------------------------------------------------
- id: dag_parse_fn_backup
cmd: "/tmp/dag_engine_e2e_bin validate /home/lucas/fn_registry/apps/dag_engine/dags_migrated/fn_backup.yaml"
cmd: "/tmp/dag_engine_e2e_bin validate $HOME/fn_registry/apps/dag_engine/dags_migrated/fn_backup.yaml"
timeout_s: 10
expect_exit: 0
expect_stdout_contains: "Validation: PASS"
@@ -93,7 +93,7 @@ e2e_checks:
# topo_sort sobre un grafo no trivial.
# -----------------------------------------------------------------------
- id: dag_parse_daily_audit
cmd: "/tmp/dag_engine_e2e_bin validate /home/lucas/fn_registry/apps/dag_engine/dags_migrated/daily-registry-audit.yaml"
cmd: "/tmp/dag_engine_e2e_bin validate $HOME/fn_registry/apps/dag_engine/dags_migrated/daily-registry-audit.yaml"
timeout_s: 10
expect_exit: 0
expect_stdout_contains: "Validation: PASS"
@@ -108,7 +108,7 @@ e2e_checks:
# health endpoint /api/dags declarado en service.health_endpoint.
# -----------------------------------------------------------------------
- id: smoke_server
cmd: "/tmp/dag_engine_e2e_bin server --port 8195 --db /tmp/dag_engine_e2e.db --dags-dir /home/lucas/fn_registry/apps/dag_engine/dags_migrated/ &"
cmd: "/tmp/dag_engine_e2e_bin server --port 8195 --db /tmp/dag_engine_e2e.db --dags-dir $HOME/fn_registry/apps/dag_engine/dags_migrated/ &"
health: "http://127.0.0.1:8195/api/dags"
timeout_s: 10
# NOTA: sin flag --scheduler para no disparar jobs reales.
@@ -132,6 +132,6 @@ e2e_checks:
# Cuando se añadan tests: descomentar y ajustar.
# -----------------------------------------------------------------------
# - id: tests
# cmd: "cd /home/lucas/fn_registry/apps/dag_engine && go test -tags fts5 -count=1 ./..."
# cmd: "cd $HOME/fn_registry/apps/dag_engine && go test -tags fts5 -count=1 ./..."
# timeout_s: 120
# OMITIDO: sin *_test.go
@@ -15,7 +15,7 @@ e2e_checks:
# build: compila el binario con CGO habilitado. Sin -tags fts5 (no lo usa el modulo).
# Valida que el modulo go-sqlite3 linkea correctamente en el entorno local.
- id: build
cmd: "cd /home/lucas/fn_registry/apps/deploy_server && CGO_ENABLED=1 go build -o /tmp/deploy_server_e2e_bin ."
cmd: "cd $HOME/fn_registry/apps/deploy_server && CGO_ENABLED=1 go build -o /tmp/deploy_server_e2e_bin ."
timeout_s: 180
# cli_help: verifica que el binario arranca y responde sin crashear ni pedir args obligatorios.
@@ -30,8 +30,8 @@ e2e_checks_suggested:
# No conecta a Metabase — solo resuelve imports.
- id: import
cmd: >
cd /home/lucas/fn_registry/apps/metabase_registry &&
/home/lucas/fn_registry/python/.venv/bin/python3 -c
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;
@@ -49,8 +49,8 @@ e2e_checks_suggested:
# argparse imprime usage sin necesitar credenciales ni conexion.
- id: cli_help
cmd: >
cd /home/lucas/fn_registry/apps/metabase_registry &&
/home/lucas/fn_registry/python/.venv/bin/python3 main.py --help
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
@@ -62,8 +62,8 @@ e2e_checks_suggested:
# Detecta SyntaxError y NameError de nivel modulo antes de cualquier deploy.
- id: syntax_check
cmd: >
cd /home/lucas/fn_registry/apps/metabase_registry &&
/home/lucas/fn_registry/python/.venv/bin/python3 -m py_compile
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"
@@ -82,11 +82,11 @@ e2e_checks_suggested:
# severity: warning porque el fallo esperado viene de red, no del codigo.
- id: dry_run_parser
cmd: >
cd /home/lucas/fn_registry/apps/metabase_registry &&
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/lucas/fn_registry/python/.venv/bin/python3 main.py
$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
@@ -48,7 +48,7 @@ e2e_checks:
# y hacer el check idempotente.
# -----------------------------------------------------------------------
- id: build
cmd: "cd /home/lucas/fn_registry/apps/pipeline_launcher && CGO_ENABLED=1 go build -tags fts5 -o /tmp/pipeline_launcher_e2e_bin ."
cmd: "cd $HOME/fn_registry/apps/pipeline_launcher && CGO_ENABLED=1 go build -tags fts5 -o /tmp/pipeline_launcher_e2e_bin ."
timeout_s: 120
# -----------------------------------------------------------------------
@@ -61,7 +61,7 @@ e2e_checks:
# config/ y views/ que el build check no ejercita separadamente.
# -----------------------------------------------------------------------
- id: vet
cmd: "cd /home/lucas/fn_registry/apps/pipeline_launcher && CGO_ENABLED=1 go vet -tags fts5 ./..."
cmd: "cd $HOME/fn_registry/apps/pipeline_launcher && CGO_ENABLED=1 go vet -tags fts5 ./..."
timeout_s: 60
# -----------------------------------------------------------------------
@@ -78,7 +78,7 @@ e2e_checks:
# -----------------------------------------------------------------------
- id: pipelines_list_loads
cmd: >
COUNT=$(sqlite3 /home/lucas/fn_registry/registry.db
COUNT=$(sqlite3 $HOME/fn_registry/registry.db
"SELECT COUNT(*) FROM functions WHERE kind='pipeline' AND tags LIKE '%launcher%';");
[ "$COUNT" -ge 1 ] && echo "launcher_pipelines=$COUNT OK" || { echo "FAIL: no launcher pipelines found in registry.db"; exit 1; }
timeout_s: 10
@@ -48,7 +48,7 @@ e2e_checks:
# rompe su API de compilacion, este check lo detecta antes de que otro app falle.
# Actua como build gate del registry de funciones C++.
- id: build
cmd: "cmake --build /home/lucas/fn_registry/cpp/build/windows --target primitives_gallery -j"
cmd: "cmake --build $HOME/fn_registry/cpp/build/windows --target primitives_gallery -j"
timeout_s: 300
severity: critical
@@ -56,7 +56,7 @@ e2e_checks:
# El build puede reportar exit 0 con -j en builds parciales sin producir binario.
# Sin este check, capture_mode fallaria con un mensaje de error menos claro.
- id: binary_exists
cmd: "test -f /home/lucas/fn_registry/cpp/build/windows/apps/primitives_gallery/primitives_gallery.exe"
cmd: "test -f $HOME/fn_registry/cpp/build/windows/apps/primitives_gallery/primitives_gallery.exe"
timeout_s: 5
severity: critical
@@ -78,7 +78,7 @@ e2e_checks:
- id: capture_mode
cmd: >
mkdir -p /tmp/primitives_gallery_e2e &&
/home/lucas/fn_registry/cpp/build/windows/apps/primitives_gallery/primitives_gallery.exe
$HOME/fn_registry/cpp/build/windows/apps/primitives_gallery/primitives_gallery.exe
--capture /tmp/primitives_gallery_e2e
timeout_s: 120
severity: warning
@@ -108,7 +108,7 @@ e2e_checks:
# como recurso (.rsrc) en el .exe. Si appicon.ico falta, el build pasa
# pero el .exe queda sin icono embebido (visible en Explorer + taskbar).
- id: icon_exists
cmd: "test -f /home/lucas/fn_registry/apps/primitives_gallery/appicon.ico"
cmd: "test -f $HOME/fn_registry/apps/primitives_gallery/appicon.ico"
timeout_s: 5
severity: warning
@@ -121,7 +121,7 @@ e2e_checks:
# Referencia esperada: 43 entradas (conteo manual de k_demos[] en main.cpp L37-84).
- id: demos_count_static
cmd: >
count=$(grep -c '^\s*{"' /home/lucas/fn_registry/apps/primitives_gallery/main.cpp);
count=$(grep -c '^\s*{"' $HOME/fn_registry/apps/primitives_gallery/main.cpp);
echo "DemoEntry count in source: $count";
test "$count" -ge 43
timeout_s: 5
@@ -32,7 +32,7 @@ e2e_checks:
# apunta a ../../ (raiz del registry), por lo que el build debe lanzarse
# desde dentro del directorio de la app.
- id: build
cmd: "cd /home/lucas/fn_registry/apps/registry_api && CGO_ENABLED=1 go build -tags fts5 -o registry_api ."
cmd: "cd $HOME/fn_registry/apps/registry_api && CGO_ENABLED=1 go build -tags fts5 -o registry_api ."
timeout_s: 120
severity: critical
# por que: sin binario el resto de checks no tiene sentido; fallo de build
@@ -43,7 +43,7 @@ e2e_checks:
# /api/status. Puerto 8521 (!=8420 prod, !=8420 dev) para no colisionar.
# El proceso en background se mata al terminar la suite por fn-analizador.
- id: smoke
cmd: "/home/lucas/fn_registry/apps/registry_api/registry_api -port 8521 -db /tmp/registry_api_e2e.db &"
cmd: "$HOME/fn_registry/apps/registry_api/registry_api -port 8521 -db /tmp/registry_api_e2e.db &"
health: "http://127.0.0.1:8521/api/status"
timeout_s: 10
severity: critical
@@ -91,7 +91,7 @@ e2e_checks:
- id: auth_check
cmd: >
REGISTRY_API_TOKEN=real-secret
/home/lucas/fn_registry/apps/registry_api/registry_api -port 8522 -db /tmp/registry_api_e2e_auth.db &
$HOME/fn_registry/apps/registry_api/registry_api -port 8522 -db /tmp/registry_api_e2e_auth.db &
sleep 1 &&
STATUS=$(curl -s -o /dev/null -w '%{http_code}'
-X POST http://127.0.0.1:8522/api/sync
@@ -44,7 +44,7 @@
# (antes del primer "##" de prosa).
# 2. El check 'build' asume que el directorio cpp/build/linux existe y cmake
# fue configurado previamente. Si no: anteponer
# "cmake -B /home/lucas/fn_registry/cpp/build/linux -S /home/lucas/fn_registry/cpp &&"
# "cmake -B $HOME/fn_registry/cpp/build/linux -S $HOME/fn_registry/cpp &&"
# al cmd o usar el check 'build_configure' (opcional, ver abajo).
# 3. El check 'integration_sqlite_direct' requiere que registry.db exista en
# la raiz del repo. En CI, puede copiarse de un fixture o generarse con
@@ -62,7 +62,7 @@ e2e_checks:
# CGO no aplica (es C++, no Go). FTS5 se compila via SQLITE_ENABLE_FTS5
# en la amalgamation vendoreada (CMakeLists.txt lo setea).
- id: build
cmd: "cmake --build /home/lucas/fn_registry/cpp/build/linux --target registry_dashboard -j$(nproc)"
cmd: "cmake --build $HOME/fn_registry/cpp/build/linux --target registry_dashboard -j$(nproc)"
timeout_s: 300
severity: critical
# por que: la app enlaza ~20 funciones del registry C++ + sqlite + ws_client.
@@ -74,7 +74,7 @@ e2e_checks:
# Confirma que el binario existe y es ejecutable tras el build.
# Tambien verifica la version de symbols minimos esperados (sin linkage roto).
- id: verify_binary
cmd: "test -x /home/lucas/fn_registry/cpp/build/linux/apps/registry_dashboard && /home/lucas/fn_registry/cpp/build/linux/apps/registry_dashboard --help 2>&1 || true"
cmd: "test -x $HOME/fn_registry/cpp/build/linux/apps/registry_dashboard && $HOME/fn_registry/cpp/build/linux/apps/registry_dashboard --help 2>&1 || true"
expect_exit: 0
timeout_s: 5
severity: critical
@@ -93,8 +93,8 @@ e2e_checks:
- id: integration_sqlite_direct
cmd: >
DISPLAY="" timeout 3
/home/lucas/fn_registry/cpp/build/linux/apps/registry_dashboard
/home/lucas/fn_registry/registry.db
$HOME/fn_registry/cpp/build/linux/apps/registry_dashboard
$HOME/fn_registry/registry.db
2>&1 | head -5
expect_exit: 1
timeout_s: 10
@@ -116,7 +116,7 @@ e2e_checks:
# Actua como pre-condicion para integration_sqlite_direct.
- id: data_schema_check
cmd: >
sqlite3 /home/lucas/fn_registry/registry.db
sqlite3 $HOME/fn_registry/registry.db
"SELECT COUNT(*) FROM sqlite_master WHERE type='table'
AND name IN ('functions','types','apps','analysis','proposals','unit_tests');"
expect_stdout_contains: "6"
@@ -133,7 +133,7 @@ e2e_checks:
# via HTTP, pero aqui queremos detectar schema drift independientemente.
- id: call_monitor_schema_check
cmd: >
sqlite3 /home/lucas/fn_registry/projects/fn_monitoring/apps/call_monitor/operations.db
sqlite3 $HOME/fn_registry/projects/fn_monitoring/apps/call_monitor/operations.db
"SELECT COUNT(*) FROM sqlite_master WHERE type='table'
AND name IN ('calls','violations','sessions');"
expect_stdout_contains: "3"
@@ -151,7 +151,7 @@ e2e_checks:
# WsClient sin actualizar todos los call sites.
- id: ws_client_compile_check
cmd: >
cmake --build /home/lucas/fn_registry/cpp/build/linux
cmake --build $HOME/fn_registry/cpp/build/linux
--target registry_dashboard -j$(nproc) -- --warn-undefined-functions
2>&1 | grep -i "ws_client" | grep -i "error" || true
expect_stdout_contains: ""
@@ -50,7 +50,7 @@ e2e_checks:
# -------------------------------------------------------------------
- id: build
cmd: >
cd /home/lucas/fn_registry/apps/registry_mcp &&
cd $HOME/fn_registry/apps/registry_mcp &&
CGO_ENABLED=1 go build -tags fts5 -o registry_mcp .
timeout_s: 120
severity: critical
@@ -64,7 +64,7 @@ e2e_checks:
# -------------------------------------------------------------------
- id: tests
cmd: >
cd /home/lucas/fn_registry/apps/registry_mcp &&
cd $HOME/fn_registry/apps/registry_mcp &&
CGO_ENABLED=1 go test -tags fts5 -count=1 -timeout 60s ./...
timeout_s: 90
severity: critical
@@ -80,7 +80,7 @@ e2e_checks:
# -------------------------------------------------------------------
- id: naming_reject
cmd: >
cd /home/lucas/fn_registry/apps/registry_mcp &&
cd $HOME/fn_registry/apps/registry_mcp &&
CGO_ENABLED=1 go test -tags fts5 -count=1 -run TestValidateName -v 2>&1 |
grep -q "PASS"
timeout_s: 30
@@ -98,10 +98,10 @@ e2e_checks:
# -------------------------------------------------------------------
- id: mcp_handshake_stdio
cmd: |
BINARY=/home/lucas/fn_registry/apps/registry_mcp/registry_mcp
BINARY=$HOME/fn_registry/apps/registry_mcp/registry_mcp
PAYLOAD='{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-06-18","capabilities":{},"clientInfo":{"name":"e2e_probe","version":"0"}}}'
RESPONSE=$(echo "$PAYLOAD" | timeout 5 "$BINARY" \
--registry-root /home/lucas/fn_registry \
--registry-root $HOME/fn_registry \
--log-level error \
2>/dev/null | head -n1)
echo "response: $RESPONSE"
@@ -21,12 +21,12 @@ e2e_checks:
# -----------------------------------------------------------------------
# CHECK 1: build
# Por que: verifica que el modulo Go compila con CGO (go-sqlite3) y las
# dependencias del registry (replace fn-registry => /home/lucas/fn_registry).
# dependencias del registry (replace fn-registry => $HOME/fn_registry).
# Sin esto nada funciona. El binario se deja en /tmp para no contaminar el dir.
# -----------------------------------------------------------------------
- id: build
cmd: >
cd /home/lucas/fn_registry/apps/script_navegador &&
cd $HOME/fn_registry/apps/script_navegador &&
CGO_ENABLED=1 go build -tags fts5 -o /tmp/script_navegador_e2e .
timeout_s: 120
@@ -52,7 +52,7 @@ e2e_checks:
- id: syntax_yaml
cmd: >
/tmp/script_navegador_e2e
--script /home/lucas/fn_registry/apps/script_navegador/examples/busqueda_google.yaml
--script $HOME/fn_registry/apps/script_navegador/examples/busqueda_google.yaml
--port 19222
2>&1 || true
expect_stdout_contains: "busqueda_google"
@@ -84,7 +84,7 @@ e2e_checks:
# -----------------------------------------------------------------------
- id: ops_schema
cmd: >
sqlite3 /home/lucas/fn_registry/apps/script_navegador/operations.db
sqlite3 $HOME/fn_registry/apps/script_navegador/operations.db
"SELECT name FROM sqlite_master WHERE type='table'
AND name IN ('entities','relations','executions','logs','assertions','assertion_results')
ORDER BY name;" 2>/dev/null
@@ -116,6 +116,6 @@ e2e_checks:
# No hay archivos *_test.go en el directorio. Si se anaden en el futuro,
# agregar:
# - id: tests
# cmd: "cd /home/lucas/fn_registry/apps/script_navegador && go test -count=1 ./..."
# cmd: "cd $HOME/fn_registry/apps/script_navegador && go test -count=1 ./..."
# timeout_s: 60
# -----------------------------------------------------------------------
@@ -33,7 +33,7 @@ e2e_checks:
# pero el flag no rompe nada y evita confusion futura si se añade FTS).
# -----------------------------------------------------------------------
- id: build
cmd: "cd /home/lucas/fn_registry/apps/services_api && CGO_ENABLED=1 go build -o services_api ."
cmd: "cd $HOME/fn_registry/apps/services_api && CGO_ENABLED=1 go build -o services_api ."
timeout_s: 120
severity: critical
# por que: si no compila no hay nada que probar
@@ -47,11 +47,11 @@ e2e_checks:
# -----------------------------------------------------------------------
- id: smoke_once
cmd: >
cd /home/lucas/fn_registry/apps/services_api &&
FN_REGISTRY_ROOT=/home/lucas/fn_registry
cd $HOME/fn_registry/apps/services_api &&
FN_REGISTRY_ROOT=$HOME/fn_registry
./services_api
--once
--registry /home/lucas/fn_registry
--registry $HOME/fn_registry
--db /tmp/services_api_e2e.db
--bind 127.0.0.1:8585
timeout_s: 45
@@ -67,10 +67,10 @@ e2e_checks:
# -----------------------------------------------------------------------
- id: smoke_health
cmd: >
cd /home/lucas/fn_registry/apps/services_api &&
cd $HOME/fn_registry/apps/services_api &&
./services_api
--bind 127.0.0.1:8585
--registry /home/lucas/fn_registry
--registry $HOME/fn_registry
--db /tmp/services_api_e2e_http.db
--interval 300s &
health: "http://127.0.0.1:8585/api/health"
@@ -124,7 +124,7 @@ e2e_checks:
# No existen *_test.go en apps/services_api. Activar cuando se añadan.
#
# - id: tests
# cmd: "cd /home/lucas/fn_registry/apps/services_api && CGO_ENABLED=1 go test -count=1 ./..."
# cmd: "cd $HOME/fn_registry/apps/services_api && CGO_ENABLED=1 go test -count=1 ./..."
# timeout_s: 120
# severity: critical
# -----------------------------------------------------------------------
@@ -30,7 +30,7 @@ e2e_checks:
# (data_table::render, issue 0097) y ws2_32 en WIN32.
# Detecta regresiones de API en data_table o cambios de firma en http_client.h.
- id: build
cmd: "cmake --build /home/lucas/fn_registry/cpp/build/windows --target services_monitor -j"
cmd: "cmake --build $HOME/fn_registry/cpp/build/windows --target services_monitor -j"
timeout_s: 300
severity: critical
@@ -39,7 +39,7 @@ e2e_checks:
# (ha ocurrido con fn_module_data_table cuando el target es condicional via
# if(TARGET fn_module_data_table) sin hacer REQUIRED).
- id: binary_exists
cmd: "test -f /home/lucas/fn_registry/cpp/build/windows/apps/services_monitor/services_monitor.exe"
cmd: "test -f $HOME/fn_registry/cpp/build/windows/apps/services_monitor/services_monitor.exe"
timeout_s: 5
severity: critical
@@ -48,7 +48,7 @@ e2e_checks:
# si el .ico falta el build pasa pero el .exe queda sin icono (phosphor=pulse
# accent=#10b981 segun app.md). Visible al copiar a Desktop/apps/.
- id: icon_exists
cmd: "test -f /home/lucas/fn_registry/apps/services_monitor/appicon.ico"
cmd: "test -f $HOME/fn_registry/apps/services_monitor/appicon.ico"
timeout_s: 5
severity: warning
@@ -25,7 +25,7 @@ e2e_checks:
# Es el check mas valioso: detecta regresiones de API en cualquiera de las
# 19 funciones del registry que usa la app.
- id: build
cmd: "cmake --build /home/lucas/fn_registry/cpp/build/windows --target shaders_lab -j"
cmd: "cmake --build $HOME/fn_registry/cpp/build/windows --target shaders_lab -j"
timeout_s: 300
severity: critical
@@ -33,7 +33,7 @@ e2e_checks:
# Detecta casos donde cmake reporta exit 0 pero el linker no produjo binario
# (muy raro con mingw-w64 pero ha ocurrido en builds parciales con -j).
- id: binary_exists
cmd: "test -f /home/lucas/fn_registry/cpp/build/windows/apps/shaders_lab/shaders_lab.exe"
cmd: "test -f $HOME/fn_registry/cpp/build/windows/apps/shaders_lab/shaders_lab.exe"
timeout_s: 5
severity: critical
@@ -42,6 +42,6 @@ e2e_checks:
# si el .ico falta el build pasa pero el .exe queda sin icono embebido
# (visible al deploy a /mnt/c/.../Desktop/apps/).
- id: icon_exists
cmd: "test -f /home/lucas/fn_registry/apps/shaders_lab/appicon.ico"
cmd: "test -f $HOME/fn_registry/apps/shaders_lab/appicon.ico"
timeout_s: 5
severity: warning
@@ -20,7 +20,7 @@ e2e_checks:
# El binario resultante es el mismo que usa el systemd unit.
# Correr desde la raiz del repo porque go.mod vive ahi.
cmd: >
cd /home/lucas/fn_registry &&
cd $HOME/fn_registry &&
CGO_ENABLED=1 go build -tags fts5
-o projects/fn_monitoring/apps/sqlite_api/sqlite_api
./projects/fn_monitoring/apps/sqlite_api/
@@ -35,7 +35,7 @@ e2e_checks:
# DiscoverDatabases, /tables, /schema, 404 para DB inexistente.
# Usan DB en t.TempDir() — totalmente efimeros.
cmd: >
cd /home/lucas/fn_registry &&
cd $HOME/fn_registry &&
CGO_ENABLED=1 go test -tags fts5 -count=1 -v
./projects/fn_monitoring/apps/sqlite_api/
timeout_s: 60
@@ -48,8 +48,8 @@ e2e_checks:
# encuentre registry.db real (necesario para /api/databases).
# El proceso queda en background; fn-analizador lo mata al terminar.
cmd: >
FN_REGISTRY_ROOT=/home/lucas/fn_registry
/home/lucas/fn_registry/projects/fn_monitoring/apps/sqlite_api/sqlite_api
FN_REGISTRY_ROOT=$HOME/fn_registry
$HOME/fn_registry/projects/fn_monitoring/apps/sqlite_api/sqlite_api
--bind 127.0.0.1:8684
--data-factory-db /tmp/sqlite_api_e2e_df.db &
health: "http://127.0.0.1:8684/api/databases"
+6 -6
View File
@@ -57,7 +57,7 @@ e2e_checks:
# los tabs, (c) ninguna TU del modulo rompe ODR.
# Es el build gate de data_table v2.0+ para issue 0081 BeginTable migration.
- id: build
cmd: "cmake --build /home/lucas/fn_registry/cpp/build --target tables_qa -j"
cmd: "cmake --build $HOME/fn_registry/cpp/build --target tables_qa -j"
timeout_s: 300
severity: critical
# Nota: si fn_module_data_table aun no esta buildado, cmake lo buildara como
@@ -67,7 +67,7 @@ e2e_checks:
# cmake --build puede retornar exit 0 en rebuilds parciales sin producir binario
# si el target ya esta up-to-date pero el archivo fue borrado manualmente.
- id: binary_exists
cmd: "test -f /home/lucas/fn_registry/cpp/build/apps/tables_qa/tables_qa"
cmd: "test -f $HOME/fn_registry/cpp/build/apps/tables_qa/tables_qa"
timeout_s: 5
severity: critical
@@ -80,7 +80,7 @@ e2e_checks:
# implemente --self-test real con imgui_test_engine, ascender a critical y
# añadir expect_stdout_contains para verificar resultados concretos.
- id: self_test_stub
cmd: "/home/lucas/fn_registry/cpp/build/apps/tables_qa/tables_qa --self-test"
cmd: "$HOME/fn_registry/cpp/build/apps/tables_qa/tables_qa --self-test"
timeout_s: 15
expect_exit: 0
expect_stdout_contains: "SKIPPED"
@@ -94,7 +94,7 @@ e2e_checks:
# Windows queda sin icono embebido. Fallo aqui detecta borrado accidental
# del .ico antes de cross-compile.
- id: icon_exists
cmd: "test -f /home/lucas/fn_registry/apps/tables_qa/appicon.ico"
cmd: "test -f $HOME/fn_registry/apps/tables_qa/appicon.ico"
timeout_s: 5
severity: warning
@@ -107,7 +107,7 @@ e2e_checks:
# Cuenta "render_" en tabs.h como proxy del numero de tabs declarados.
- id: tabs_declared
cmd: >
count=$(grep -c 'render_' /home/lucas/fn_registry/apps/tables_qa/tabs.h 2>/dev/null);
count=$(grep -c 'render_' $HOME/fn_registry/apps/tables_qa/tabs.h 2>/dev/null);
echo "render_ declarations in tabs.h: $count";
test "$count" -ge 10
timeout_s: 5
@@ -121,7 +121,7 @@ e2e_checks:
# Este check estático es mas rapido que el build completo y da feedback antes.
- id: cmakelists_tab_srcs
cmd: >
count=$(grep -c '^ tab_' /home/lucas/fn_registry/apps/tables_qa/CMakeLists.txt 2>/dev/null);
count=$(grep -c '^ tab_' $HOME/fn_registry/apps/tables_qa/CMakeLists.txt 2>/dev/null);
echo "tab_*.cpp in CMakeLists: $count";
test "$count" -ge 10
timeout_s: 5