--- asset_id: DC-XX-AuditVault-Tooling-v01 version: v01 tipo: DC — Documento canónico (documentación de herramientas) estado: 🟢 v01 intellibank: IB-XX-Maestro owner: Victor Heredia sherpa: SherpaX (Cowork) ratificador: Victor Heredia proposito: Documentación de las herramientas del harness de auditoría (obsidian_health, wiki_validator, dashboard). fecha_creacion: 2026-06-14 fecha_ultima_actualizacion: 2026-06-15 tags: [DC, auditoria, tooling, XX] --- # Obsidian Vault Health · Paquete de chequeo de salud — v01 **Fecha:** 2026-06-14 Paquete portable para revisar la salud de **cualquier carpeta sincronizada con Obsidian** (o cualquier vault de Markdown). No requiere la app Intellibanks ni instalar nada: solo **Python 3** (librería estándar). Es de **solo lectura** — no modifica tu vault. ## Qué revisa **Específico de Obsidian** - **WikiLinks rotos** — cada `[[enlace]]` y `![[embed]]` que apunta a una nota o adjunto que no existe. También revisa enlaces Markdown internos `[txt](ruta)`. - **Notas huérfanas** — notas sin ningún enlace entrante (no las referencia nadie). - **Adjuntos sin usar** — imágenes/PDF/etc. cuyo nombre no aparece en ninguna nota (cubre WikiLink, Markdown y HTML ``). - Detecta si la carpeta es un vault Obsidian (`.obsidian/`). **Estructural** - **Duplicados por contenido** (hash idéntico) y **por nombre** (mismo nombre en varias rutas). - **Convención de nombres BMF**: notas `TIPO-ENTIDAD-...-vNN`, carpetas raíz `IB-...`. - **Carpetas vacías**. Si la carpeta resulta ser un vault de la app Intellibanks (tiene `.intellibanks_sync_map.json`), lo detecta y lo indica, pero el chequeo no depende de ello. ## Requisitos - Python 3.8+ (incluido en macOS). Sin dependencias externas. ## Uso **Opción A — un comando:** ```bash ./run_health.sh "/ruta/a/tu/vault-obsidian" ``` Genera `salud-AAAA-MM-DD.json` y `Tablero-Salud-AAAA-MM-DD.html` junto al script. **Opción B — manual (dos pasos):** ```bash python3 obsidian_health.py "/ruta/a/tu/vault-obsidian" > salud.json python3 build_obsidian_dashboard.py salud.json Tablero-Salud.html ``` Abre el `.html` en cualquier navegador para ver el tablero. > En macOS, para obtener la ruta de tu vault: arrástralo a la Terminal o usa clic derecho → "Copiar como ruta de acceso". ## Cálculo de la salud (v01.1 — proporcional) La nota (0–100) es ahora **proporcional**, no binaria: cada dimensión aporta según qué tan limpia está, ponderada — enlaces 30 · naming de notas 25 · duplicados-contenido 15 · naming de bancos 15 · nombres repetidos 10 · carpetas vacías 5. El JSON incluye `score_breakdown` (% por dimensión) y `health_score_binary` (el cálculo viejo, como referencia). **Exclusión de capas espejo/inbox:** las copias-espejo intencionales (`IB-WikiX/Raw/`) y el inbox de tránsito (`CloudVault/`) **no cuentan como deuda** — sus enlaces "rotos" y duplicados son por diseño. El JSON reporta `broken_actionable` vs `broken_mirror` por separado. **Exenciones de naming:** las páginas de `Wiki/` usan nombre = concepto (dominio de naming propio) y están exentas del patrón BMF de archivos. `.claude/` se excluye del escaneo. Las **notas huérfanas** y los **adjuntos sin usar** se reportan como información (no bajan la nota). ## Notas de calibración - El escáner ignora `.obsidian/`, `.git/`, `.trash/`, `node_modules/`. - La convención BMF acepta Brain Codes (`BC-`/`BCV-`) y variantes de render (`_html`, `_docx`, `_pdf`, `_xlsx`) y `-light`/`-dark`. - Si tu vault NO usa la convención BMF, el chequeo de naming marcará casi todo: en ese caso, avísame y te dejo una variante "naming genérico / sin penalizar". ## Archivos del paquete ``` obsidian_health.py ← escáner (genera JSON) build_obsidian_dashboard.py ← genera el tablero HTML desde el JSON run_health.sh ← wrapper de un comando README-Obsidian-Health.md ← este archivo ejemplo/Tablero-Obsidian-DEMO.html ← ejemplo generado sobre un vault real ```