Files
graph_explorer/issues/0033c-fn-check-vendored.md
T
egutierrez 35ace544d9 docs(issues): roadmap fase 2 navegador + ports Go + runtime embebido
Anade siete issues que definen el camino para hacer graph_explorer
distribuible como binario Windows autocontenido (sin WSL):

- 0032 — browser_session enrichers via Playwright (login interactivo,
  cookies persistentes, fetch_webpage_browser, web_search_browser).
- 0033 — dispatcher multi-lenguaje (lang: go|python|bash en manifest)
  + runtime Python embebido en <app>/runtime/. 3 fases (A=dispatcher,
  B=runtime, C=UI badges).
- 0033b — vendoring de funciones Python por enricher (_vendored/ +
  .vendor.lock) para que los enrichers no dependan de registry_root
  en runtime.
- 0033c — fn check vendored: drift detection con --fix.
- 0033d — fn index lee python_runtime / python_runtime_deps de app.md.
- 0033e — /compile orquesta freeze + vendor + go builds.
- 0034 — port de los 5 enrichers de sistema a Go. Reusa funciones
  Go del registry directamente (no copias). Tests pytest existentes
  pasan sin cambios.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-02 16:10:35 +02:00

66 lines
1.9 KiB
Markdown

---
id: 0033c
title: Comando `fn check vendored` — drift detection
status: pending
priority: medium
created: 2026-05-02
depends_on: [0033b]
---
## Objetivo
Subcomando del CLI `fn` para detectar drift entre los `_vendored/`
de los enrichers y la fuente del registry. Permite auditoria en CI y
diagnostico rapido cuando algo deja de funcionar tras editar una
funcion.
## CLI
```bash
fn check vendored # recorre todas las apps con vendoring
fn check vendored apps/graph_explorer # solo esta app
fn check vendored --fix # re-vendoriza si detecta drift
```
Salida esperada:
```
[OK] apps/graph_explorer/enrichers/fetch_webpage 3 funcs, lock OK
[DRIFT] apps/graph_explorer/enrichers/extract_links 1 func cambio
- extract_urls_py_cybersecurity (lock=abc123, current=def456)
[MISS] apps/graph_explorer/enrichers/web_search sin .vendor.lock
```
Exit codes:
- 0: todo OK
- 1: drift detectado
- 2: error operativo (manifest invalido, registry.db inaccesible)
## Implementacion
`cmd/fn/check_vendored.go`:
1. Glob `apps/*/enrichers/*/manifest.yaml` y
`projects/*/apps/*/enrichers/*/manifest.yaml`.
2. Filtrar los con `lang: python` y `uses_functions` no vacio.
3. Por cada uno:
- Si no existe `.vendor.lock` → MISS.
- Por cada linea del lock: leer `file_path` actual de registry.db,
calcular sha256, comparar.
4. Con `--fix`: invocar `vendor_enricher_python.sh` cuando se detecta
drift o miss.
## Tests
- Caso OK: manifest + lock + ficheros consistentes.
- Caso DRIFT: editamos un .py vendorizado, el comando lo detecta.
- Caso MISS: enricher con `lang: python` y `uses_functions` no vacio
pero sin lock.
- Caso `--fix`: tras drift, ejecutar con `--fix` deja todo OK.
## Definicion de hecho
- `fn check vendored` reporta el estado correctamente en los 3
casos.
- `--fix` re-vendoriza y deja exit code 0.
- Tests Go en `cmd/fn/check_vendored_test.go`.