--- name: vault_audit kind: pipeline lang: bash domain: pipelines version: "1.0.0" purity: impure signature: "vault_audit( | --all) [--skip-profilers] [--dry-run-layout] -> void" description: "Pipeline completo de auditoria para uno o todos los vaults declarados: layout-ensure, index, profile (csv/pdf/md), dedupe, aggregate y doctor. Produce tabla resumen con estado por vault y codigo de salida 4 si hay warnings." tags: [vault, audit, pipeline, launcher, infra, bash] uses_functions: - vault_layout_ensure_go_infra - vault_inventory_scan_go_infra - vault_index_open_go_infra - vault_index_write_go_infra - vault_csv_profile_py_datascience - vault_pdf_extract_py_datascience - vault_knowledge_parse_py_infra - vault_dedupe_report_py_infra - vault_aggregate_index_go_infra - vault_doctor_go_infra uses_types: [] returns: [] returns_optional: false error_type: "error_go_core" imports: [] params: - name: vault_name desc: "Nombre del vault a auditar (como aparece en registry.db tabla vaults). Usar --all para todos." - name: --all desc: "Audita todos los vaults declarados en registry.db. Mutuamente excluyente con vault_name." - name: --skip-profilers desc: "Omite el paso de profiling CSV/PDF/MD. Util para auditorias rapidas de inventario." - name: --dry-run-layout desc: "Pasa --dry-run a vault layout-ensure: calcula cambios sin tocar el disco." output: "Tabla de resumen por vault con status ok/warn. Codigo de salida 0=exito, 1=root no localizable, 4=uno o mas vaults con warnings." tested: false tests: [] test_file_path: "" file_path: "bash/functions/pipelines/vault_audit.sh" --- ## Ejemplo ```bash # Auditar un vault especifico FN_REGISTRY_ROOT=$HOME/fn_registry \ bash bash/functions/pipelines/vault_audit.sh turismo_spain # Auditar todos los vaults FN_REGISTRY_ROOT=$HOME/fn_registry \ bash bash/functions/pipelines/vault_audit.sh --all # Solo layout + index + aggregate (sin profilers, mas rapido) bash bash/functions/pipelines/vault_audit.sh turismo_spain --skip-profilers # Ver que haria layout-ensure sin tocar disco bash bash/functions/pipelines/vault_audit.sh turismo_spain --dry-run-layout # Equivalente via fn run (desde la raiz del registry) ./fn run vault_audit_bash_pipelines turismo_spain ``` ## Pasos del pipeline 1. **layout-ensure** — `fn vault layout-ensure ` asegura `data/{raw,processed,exports}` y `knowledge/{...}`. 2. **index** — `fn vault index ` escanea archivos y persiste en `vault_index.db`. 3. **profile** — `fn vault profile ` llama `vault_profile_dispatch.py` para CSV/PDF/MD. 4. **dedupe** — `fn vault dedupe ` detecta duplicados por sha256 (informacional, no fatal). 5. **aggregate** — `fn vault aggregate` copia todo a `registry.db` tabla `vault_files` (una sola vez al final). 6. **doctor** — `fn vault doctor` muestra estado de salud de todos los vaults. ## Codigos de salida | Codigo | Significado | |--------|-------------| | 0 | Todos los vaults procesados sin errores | | 1 | FN_REGISTRY_ROOT no localizable o fn binary no encontrado | | 4 | Uno o mas vaults con warnings (layout o index fallaron) | ## Variables de entorno - `FN_REGISTRY_ROOT` — raiz del registry (auto-detectada si no esta seteada). - `FN_BIN` — path al binario `fn` (default: `$FN_REGISTRY_ROOT/fn`). ## Notas Requiere `sqlite3` en PATH para resolver la lista de vaults con `--all`. El paso de profile es non-fatal: errores en profilers individuales se reportan como warnings. El paso de dedupe es siempre informacional (no borra archivos).